在MSCRM 2011中执行报表时,您有两个数据源选项:SQL或Fetch。
在SSRS执行日志中,运行报告的用户始终是服务帐户。
使用fetch时,在报告执行日志中,有一个参数CRM_FullName,其中包含运行报告的用户的全名。
使用SQL源时,没有CRM_FullName参数。我如何知道谁负责报告?必须有一种方法可以知道,因为过滤后的观点知道我是谁。
答案 0 :(得分:6)
实际上没有办法找到这些信息。为MSCRM创建报表时,使用名为“MSCRM Data Connector”的连接器。这可以在SSRS实例上的ExecutionLogs3视图的AdditionnalInfo列中看到。使用此连接器并尝试显示报告时,系统将提示您输入用户名和密码。这就是事情变得有趣的地方。
该报告实际上并不期望用户名/密码!实际上,它希望将systemuserid(guid)作为用户名并将organizationid(guid)作为密码接收。然后,它在MSCRM_CONFIG数据库中搜索组织数据库设置。然后,它进入组织数据库,只需执行set context_info SYSTEMUSERID
。最后,filteredviews正在调用一个名为'[dbo]。[fn_FindUserGuid]'的函数来检索context_info。这就是过滤后的视图正常工作的方式,同时作为服务帐户连接。
正如您所料,我们无法知道运行报告的用户,因为SSRS中的用户名和密码提示永远不会记录在任何地方(可能是安全问题)。
我发现记录谁运行报告的最佳选择是实际创建一个存储过程,该过程将在过滤后的视图(或任何表)上生成一个select语句,然后登录到一个单独的表中语句,过程参数和context_info()。然后,在SSRS中,我调用该函数而不是直接转到过滤后的视图。
答案 1 :(得分:5)
编辑答案,包括在使用sql源时获取用户全名。
注册参数UserID,默认值为
=用户!用户ID
在数据集中使用以下查询
SELECT DomainName,FullName
FROM SystemUserBase
WHERE(DomainName = @UserID)
然后使用
= Fields!FullName.Value
在你的报告中。
在CRM中,用户数据存储在SystemUserBase表中,DomainName列是存储在报表的User!UserID中的实际域\用户名。 如果您更喜欢使用视图,请使用 FilteredSystemUser 视图而不是 SystemUserBase 表。
对于fetchxml,请尝试以下操作: 运营商 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>
然后,在您的报告中,您可以在表达式中使用以下代码来获取用户fullname
= First(Fields!user_fullname.Value,“GetUserData”)
数据集名称为 GetUserData
答案 2 :(得分:0)
用户登录名是否足够?也就是你可以使用类似的东西
="Generated by " & User!UserID
?