2014-11-04 3 views
0

저는 Dynamics Business Portal에서 작업하고 있습니다. 사용자의 AD 사용자 이름으로 GP Dynamics EmployeeID에 가입하려는 시도에서이 해시를 만드는 데 도움이 될 몇 가지 테이블을 발견했습니다. 비즈니스 포털 테이블에서 찾을 수있는 비즈니스 포털을 GP에 묶는 유일한 테이블은 [MbfRoleUser]입니다. 충분한 뒷 이야기, 여기에 몇 가지 샘플 데이터가 있으며 어떻게 표시하고 싶습니다.여러 레코드에서 XML 쿼리

declare @table table(UserID varchar(50),Constituent varchar(200)) 
insert into @table values 
('D8851830-EF23-44BE-BB17-0008D70F9F5B','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="002001" /></entityKey>') 
,('78E42A10-D7CE-4B40-86F2-001549F5A3C2','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001079" /></entityKey>') 
,('1F899A87-6186-4E2B-BA18-0076A4D95836','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001997" /></entityKey>') 
,('CB043358-0B16-4055-A806-00A63964C1A9','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001557" /></entityKey>') 
,('3EF8C35D-6227-486A-B86B-00BD5991E188','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001740" /></entityKey>') 

select * from @table 

내 원하는 출력은 다음과 같습니다

UserID        CompanyID Employeeid 
----------        ---------- ---------- 
D8851830-EF23-44BE-BB17-0008D70F9F5B 1   002001 
78E42A10-D7CE-4B40-86F2-001549F5A3C2 1   001079 
1F899A87-6186-4E2B-BA18-0076A4D95836 1   001997 
CB043358-0B16-4055-A806-00A63964C1A9 1   001557 
3EF8C35D-6227-486A-B86B-00BD5991E188 1   001740 

가능하다면, 내가 문자열을 사용하지 않고이 작업을 수행하고 싶습니다. 예,이 예제에서는 작동하지만 더 복잡한 XML에서는 다른 상황이 발생할 수 있으므로 올바르게 수행하는 방법을 배우고 싶습니다.

마지막으로 User \ username을 포함하는 다른 열과 함께 domain \ username 형식의 AD 사용자 이름을 포함하는 [MbfUserWindowsIdentity] 테이블에 가입합니다.

누군가가 EmployeeID를 가져올 수있는 더 좋은 곳을 알고 있다면 그렇게 할 수 있습니다. 기본적으로 우리는 단지 GP 사용자 ID를 AD 사용자 이름으로 내보내기 만하면됩니다.

호기심이 많은 사람들을 위해 GP에있는 데이터를 사용하여 직원 디렉토리를 구축하고 있지만 디렉토리에는 사용자가 선택한 개인 정보를 게시하지 못하도록하는 기능이 있으므로 AD에 연결해야합니다.

답변

2

먼저 "구성 요소"필드를 XML로 캐스트하십시오. Dynamics/GP 데이터베이스에서이 필드 데이터 유형은 NVARCHAR입니다. 그런 다음 Xquery를 사용하여 XML 필드에서 값을 추출하십시오. 아래의 예를 참조하십시오

SELECT UserID 
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Common.Company.Company/@ID)[1]','int') as CompanyID 
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Hrm.Entity.Employee/@ID)[1]','varchar(10)') as EmployeeID 
FROM @table as t 

귀하의 질문의 다른 부분에 대답하기 위해,이는 같은 테이블에있는 사용자 ID와 함께 직원 ID를 저장 내가 찾은 유일한 장소입니다.

도움이 되었기를 바랍니다.

+0

깨끗하고 중요한 부분입니다. 감사! – Apothis

관련 문제