在 MSCRM 2011 中执行报表时,您有两个数据源选项:SQL 或 Fetch。
在 SSRS 执行日志中,运行报告的用户始终是服务帐户。
使用 fetch 时,在报表执行日志中,有一个参数 CRM_FullName 包含运行报表的用户的全名。
使用 SQL 源时,没有 CRM_FullName 参数。我怎么知道是谁编写了报告?一定有办法知道,因为过滤后的视图知道我是谁。
在 MSCRM 2011 中执行报表时,您有两个数据源选项:SQL 或 Fetch。
在 SSRS 执行日志中,运行报告的用户始终是服务帐户。
使用 fetch 时,在报表执行日志中,有一个参数 CRM_FullName 包含运行报表的用户的全名。
使用 SQL 源时,没有 CRM_FullName 参数。我怎么知道是谁编写了报告?一定有办法知道,因为过滤后的视图知道我是谁。
实际上没有办法找到这些信息。当您为 MSCRM 创建报表时,您使用称为“MSCRM 数据连接器”的连接器。这可以在 SSRS 实例的 ExecutionLogs3 视图的 AdditionnalInfo 列中看到。使用此连接器并尝试显示报告时,系统会提示您输入用户名和密码。这就是事情变得有趣的地方。
该报告实际上并不需要用户名/密码!事实上,它希望接收 systemuserid (guid) 作为用户名和 organizationid (guid) 作为密码。然后它在 MSCRM_CONFIG 数据库中搜索组织数据库设置。然后,它进入组织数据库并简单地执行一个set context_info SYSTEMUSERID
. 最后,filteredviews 正在调用一个名为“[dbo].[fn_FindUserGuid]”的函数来检索 context_info。这就是过滤视图在作为服务帐户连接时正常工作的方式。
如您所料,我们无法知道运行报告的用户,因为 SSRS 中的用户名和密码提示从未在任何地方记录(可能出于安全考虑)。
我发现记录谁运行报告的最佳选择是实际创建一个存储过程,该过程将在过滤后的视图(或任何表)上创建一个 select 语句,然后将该语句登录到一个单独的表中,过程参数和 context_info()。然后,在 SSRS 中,我调用该函数,而不是直接转到过滤后的视图。
如果使用 sql 源,已编辑答案以包括获取用户全名。
注册一个参数,UserID,默认值为
=用户!用户ID
在数据集中使用以下查询
选择域名,全名
FROM SystemUserBase
WHERE(域名 = @UserID)
然后使用
=Fields!FullName.Value
在你的报告中。
在 CRM 中,用户数据存储在 SystemUserBase 表中,DomainName 列是实际的Domain\Username存储在 User!UserID 中的报表。如果您更喜欢使用视图,请使用FilteredSystemUser视图而不是SystemUserBase表。
对于 fetchxml,请尝试以下操作: operator operator='eq-userid'表示等于当前用户。
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
<entity name='team'>
<attribute name='name' />
<attribute name='businessunitid' />
<attribute name='teamid' />
<order attribute='name' descending='false' />
<link-entity name='teammembership' from='teamid' to='teamid' visible='false' intersect='true'>
<link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='user'>
<attribute name='fullname' />
<attribute name='systemuserid'/>
<filter type='and'>
<condition attribute='systemuserid' operator='eq-userid' />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
然后在您的报告中,您可以在表达式中使用以下代码来获取用户全名
=First(Fields!user_fullname.Value, "GetUserData")
其中数据集称为GetUserData
用户登录名是否足够?即你可以使用类似的东西
="Generated by " & User!UserID
吗?