我正在使用Dynamics Business Portal。在尝试使用用户的AD用户名加入GP Dynamics EmployeeID时,我发现了一些可帮助我创建此哈希的表。我可以在Business Portal表中找到的唯一一个将业务门户绑定到GP的表称为[MbfRoleUser]。足够的背景故事,这里有一些示例数据以及我希望如何显示它。
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],其中包含domain \ username格式的AD用户名以及另一个包含UserID的列。
如果有人知道拉一个EmployeeID的更好的地方,那也会有用。基本上我们只需要使用AD用户名导出GP EmployeeID。
对于那些好奇的人,我们正在使用GP中的数据构建员工目录,但该目录将具有允许用户选择不发布选择个人信息的功能,因此与AD相关联。
答案 0 :(得分:2)
首先,施放&#34;成分&#34;字段为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与userid存储在同一个表中的地方。
我希望这有帮助!