Dom*_*let 7 microsoft-dynamics dynamics-crm reporting-services dynamics-crm-2011
在MSCRM 2011中执行报表时,您有两个数据源选项:SQL或Fetch.
在SSRS执行日志中,运行报告的用户始终是服务帐户.
使用fetch时,在报告执行日志中,有一个参数CRM_FullName,其中包含运行报告的用户的全名.
使用SQL源时,没有CRM_FullName参数.我如何知道谁负责报告?必须有一种方法可以知道,因为过滤后的观点知道我是谁.
实际上没有办法找到这些信息.为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中,我调用该函数而不是直接转到过滤后的视图.
编辑的答案包括使用sql源时获取用户的全名.
注册参数UserID,默认值为
=用户!用户名
在数据集中使用以下查询
SELECT DomainName,FullName
来自SystemUserBase
WHERE(DomainName = @UserID)
然后用
=领域!FullName.Value
在你的报告中.
在CRM中,用户数据存储在SystemUserBase表中,DomainName列是存储在报表的User!UserID中的实际Domain\Username.如果您更喜欢使用视图,请使用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>
Run Code Online (Sandbox Code Playgroud)
然后,在报表中,您可以在表达式中使用以下代码来获取用户的全名
= First(Fields!user_fullname.Value,"GetUserData")
其中数据集名为GetUserData
| 归档时间: |
|
| 查看次数: |
16782 次 |
| 最近记录: |