【发布时间】:2025-11-23 06:55:02
【问题描述】:
有没有办法在 Dynamics 2013 中查看拥有或与用户共享的所有视图/图表? (数据库查询没问题。如果需要,我可以访问基表。
【问题讨论】:
标签: dynamics-crm crm microsoft-dynamics dynamics-crm-2013
有没有办法在 Dynamics 2013 中查看拥有或与用户共享的所有视图/图表? (数据库查询没问题。如果需要,我可以访问基表。
【问题讨论】:
标签: dynamics-crm crm microsoft-dynamics dynamics-crm-2013
@Ryan 的解决方案对我有很大帮助,但转录起来很痛苦。这是更可用格式的解决方案(稍作修改):
DECLARE @userid varchar(100)
SELECT @userid = 'domain\user'
-- Get team membership for the user
IF OBJECT_ID(N'tempdb.dbo.#UserAndTeams') IS NOT NULL DROP TABLE #UserAndTeams
SELECT DISTINCT t.TeamId TeamOrUserId, t.[Name]
INTO #UserAndTeams
FROM
TeamBase t
INNER JOIN TeamMembership tm ON t.TeamId = tm.TeamId
INNER JOIN SystemUserBase su ON su.SystemUserId = tm.SystemUserId
WHERE
su.DomainName = @userid
INSERT INTO #UserAndTeams(TeamOrUserId, [Name])
SELECT su.SystemUserId, su.Firstname + ' ' + su.Lastname [Name]
FROM SystemUserBase su WHERE su.DomainName = @userid
-- Get a union of all teams and this user
IF OBJECT_ID(N'tempdb.dbo.#AllUsersAndTeams') IS NOT NULL DROP TABLE #AllUsersAndTeams
SELECT t.TeamId TeamOrUserId, t.[Name]
INTO #AllUsersAndTeams
FROM TeamBase t
INSERT INTO #AllUsersAndTeams(TeamOrUserId, [Name])
SELECT su.SystemUserId, su.Firstname + ' ' + su.Lastname [Name]
FROM SystemUserBase su
-- Extract share info from POA for selected entity types
SELECT DISTINCT su.[Name] SharedWith, objectIds.[Type], objectIds.[Name] Objectname, aut.[Name] Ownername
FROM
PrincipalobjectAccess poa WITH (NOLOCK)
INNER JOIN #UserAndTeams su WITH (NOLOCK) ON poa.PrincipalId = su.TeamOrUserId
INNER JOIN
(
SELECT 'Chart' [Type], UserQueryVisualizationId id, [Name], OwnerId FROM UserQueryVisualizationBase WITH (NOLOCK)
UNION SELECT 'View', UserQueryId id, [Name], OwnerId FROM UserQueryBase WITH (NOLOCK)
UNION SELECT 'Report', ReportId, [Name], OwnerId FROM Report WITH (NOLOCK)
UNION SELECT 'Dashboard', uf.userFormId id, [Name], OwnerId FROM UserForm uf WITH (NOLOCK) WHERE uf.[Type] = 0
) objectIds ON poa.ObjectId = objectIds.id
INNER JOIN #AllUsersAndTeams aut ON objectIds.OwnerId = aut.TeamOrUserId
ORDER BY
objectIds.[Type], objectIds.[Name]
【讨论】:
我想出了这个程序:
这适用于视图/仪表板和图表。如果用户可以通过团队成员访问项目,则会显示团队名称;如果直接与用户共享,则显示用户名。
它需要为有权访问基表的用户运行。
(我无法将完整的 SQL 发布到 Stack Overflow!它包含在附图中。)
【讨论】:
这实际上比你想象的要复杂——关于共享视图的信息包含在数据库的 principalobjectaccess 表中。
此表包含正在共享的对象、共享对象以及他们对该对象的权限。
困难的部分是包含要共享的对象的 guid 也没有指定要共享的对象类型。可以创建一个查询,将 POA 表连接到创建的视图,然后为该特定用户放入 where 子句......但要小心,不要在生产系统上运行它(如果你有确保在 POA 表上使用(nolock)。)
抱歉,我无法提供更多帮助,但我没有使用 On-prem 并且无法测试查询。
【讨论】: