怎样获取运行报告的用户身份?

8
在执行MSCRM 2011中的报告时,您有两个数据源选项:SQL或Fetch。
在SSRS执行日志中,运行报告的用户始终是服务帐户。
当使用fetch时,在报告执行日志中,有一个名为CRM_FullName的参数,其中包含运行报告的用户的全名。
当使用SQL数据源时,没有CRM_FullName参数。我如何知道谁运行了报告?肯定有办法知道,因为Filtered视图知道我的身份。
3个回答

6
实际上没有办法找到这些信息。创建MSCRM报告时,需要使用名为“MSCRM数据连接器”的连接器。可以在SSRS实例的ExecutionLogs3视图的AdditionnalInfo列中看到它。当使用此连接器并尝试显示报表时,将提示输入用户名和密码。这就是事情变得有趣的地方。
事实上,报告实际上不需要用户名/密码!实际上,它期望以系统用户ID(guid)作为用户名,组织ID(guid)作为密码进行验证。然后,它会在MSCRM_CONFIG数据库中查找组织数据库设置。接下来,它进入组织数据库,简单地执行set context_info SYSTEMUSERID。最后,过滤视图调用一个名为“[dbo].[fn_FindUserGuid]”的函数,该函数检索context_info。这就是过滤视图正常工作的原理,同时作为服务帐户连接。
正如您可能预期的那样,我们无法知道运行报告的用户,因为SSRS中的用户名和密码提示永远不会被记录在任何地方(出于安全原因,也许)。
我发现记录运行报告的最佳选择是创建一个存储过程,该存储过程将在过滤视图(或任何表)上执行select语句,然后将语句、过程参数和context_info()记录到一个单独的表中。然后,在SSRS中,我调用该函数而不是直接进入过滤视图。

6

编辑答案以包括如果使用SQL源则获取用户全名的方法。

  1. 注册一个参数UserID,其默认值为

    =User!UserID

  2. 在数据集中使用以下查询

    SELECT DomainName, FullName

    FROM SystemUserBase

    WHERE (DomainName = @UserID)

  3. 然后在报表中使用

    =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>

那么在您的报告中,您可以使用以下代码表达式来获取用户的全名:

=First(Fields!user_fullname.Value, "GetUserData")

其中数据集名称为GetUserData.


问题是关于使用SQL Source。如问题所述,我知道在使用FetchXML时会记录日志。 - Dominic Goulet
是的,您说得对。我已编辑答案以包括在使用 SQL 数据源时获取用户名。 - Bojan Borisovski
您的回答(使用User!UserID)将在报告中显示用户名,但不会存储在执行日志中。我的问题最初是要求如何在执行日志中检索该信息。感谢您投入的时间。 - Dominic Goulet

0
用户登录名是否足够?例如,您可以只使用类似于="由" & User!UserID & "生成"的内容吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接