2014-11-04 3 views
0

Я работаю с Dynamics Business Portal. В попытке присоединиться к GP Dynamics EmployeeID с именем пользователя пользователя, я нашел несколько таблиц, которые помогут мне создать этот хеш. Единственная таблица, которую я могу найти в таблицах Business Portal, которые свяжут Business Portal с 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, и я хотел бы узнать, как это сделать правильно.

В конце я присоединяюсь к таблице [MbfUserWindowsIdentity], которая включает имя пользователя AD в формате имени домена \ username вместе с другим столбцом, содержащим UserID.

Если кто-нибудь знает, куда лучше потянуть EmployeeID, это тоже сработает. В основном нам просто нужно экспортировать GP EmployeeID с именем пользователя 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 

Чтобы ответить на вторую часть вашего вопроса, это единственное место, где я нашел, где он хранит EmployeeID вместе с идентификатором пользователя в той же таблице.

Надеюсь, это поможет!

+0

Чистота и точка. Благодаря! – Apothis

Смежные вопросы