如何获取运行报告的用户的身份?

时间:2012-04-26 12:37:58

标签: reporting-services dynamics-crm dynamics-crm-2011 microsoft-dynamics

在MSCRM 2011中执行报表时,您有两个数据源选项:SQL或Fetch。

在SSRS执行日志中,运行报告的用户始终是服务帐户。

使用fetch时,在报告执行日志中,有一个参数CRM_FullName,其中包含运行报告的用户的全名。

使用SQL源时,没有CRM_FullName参数。我如何知道谁负责报告?必须有一种方法可以知道,因为过滤后的观点知道我是谁。

3 个答案:

答案 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源时获取用户全名。

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

    =用户!用户ID

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

    SELECT DomainName,FullName

    FROM SystemUserBase

    WHERE(DomainName = @UserID)

  3. 然后使用

    = Fields!FullName.Value

  4. 在你的报告中。

    在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