7

Al ejecutar un informe en MSCRM 2011, tiene dos opciones para las fuentes de datos: SQL o Fetch.¿Cómo obtener la identidad del usuario que ejecutó un informe?

En los registros de ejecución de SSRS, el usuario que ejecutó el informe es siempre la cuenta de servicio.

Al usar fetch, en el registro de ejecución del informe, hay un parámetro CRM_FullName que contiene el nombre completo del usuario que ejecutó el informe.

Al usar fuente SQL, no hay parámetro CRM_FullName. ¿Cómo puedo saber quién ejecutó el informe? Debe haber una manera de saberlo, ya que los puntos de vista filtrados saben quién soy.

Respuesta

6

No hay manera de encontrar esta información. Cuando crea un informe para MSCRM, utiliza un conector llamado "Conector de datos MSCRM". Esto se puede ver en la columna AdditionnalInfo de la vista ExecutionLogs3 en la instancia de SSRS. Cuando use este conector e intente mostrar un informe, se le pedirá un nombre de usuario y contraseña. Ahí es donde las cosas se ponen interesantes.

¡El informe no está esperando realmente un nombre de usuario/contraseña! De hecho, espera recibir systemuserid (guid) como nombre de usuario y organizationid (guid) como contraseña. Luego busca en la base de datos MSCRM_CONFIG la configuración de la base de datos de la organización. Luego, va a la base de datos de la organización y simplemente hace un set context_info SYSTEMUSERID. Finalmente, las vistas de filtro están llamando a una función llamada '[dbo]. [Fn_FindUserGuid]' que recupera context_info. Así es como las vistas filtradas funcionan correctamente, mientras están conectadas como la cuenta de servicio.

Como era de esperar, no podemos conocer al usuario que ejecutó el informe porque las solicitudes de usuario y contraseña en SSRS nunca se registran en ningún lugar (por cuestiones de seguridad, tal vez).

La mejor opción que he encontrado para registrar quién ejecutó un informe es crear realmente un procedimiento almacenado que hará una declaración select en las vistas filtradas (o cualquier tabla, como está) y luego iniciar sesión en una tabla separada la instrucción, los parámetros de procedimiento y context_info(). Luego, en SSRS, llamo a esa función en lugar de ir directamente a las vistas filtradas.

0

¿Será suficiente el nombre de usuario? es decir, ¿puede simplemente usar algo como ="Generated by " & User!UserID?

5

Respuesta editada para incluir la obtención del nombre completo del usuario si se utiliza la fuente sql.

  1. Registra un parámetro, ID de usuario, con el valor por defecto como

    = Usuario! UserID

  2. utilizar la siguiente consulta del conjunto de datos

    SELECT NombreDeDominio, NombreCompleto

    DE SystemUserBase

    WHE RE (= NombreDeDominio @IDUsuario)

  3. A continuación, utilice

    = Fields! FullName.Value

en su informe.

En el CRM, los datos del usuario se almacenan en la tabla SystemUserBase, y la columna DomainName es el dominio real Domain \ Username almacenado en User! UserID del informe. Si prefiere usar vistas, use FilteredSystemUser view en lugar de SystemUserBase table.

Para FetchXML prueba lo siguiente: El operador operador = 'eq-ID de usuario' significa igual al usuario actual.

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

Luego, en su informe de que puede utilizar el código siguiente en una expresión para obtener los usuarios FULLNAME

= First (Fields! User_fullname.Value, "getUserData")

donde el dataset se llama GetUserData

+0

La pregunta era sobre el uso de SQL Source. Como se indicó en la pregunta, sé que se registra al usar FetchXML. –

+0

Sí, tiene la razón, he editado la respuesta para incluir la obtención del nombre de usuario si se utilizó la fuente sql. –

+0

Su respuesta (usando User! UserID) mostrará el nombre de usuario en el informe, pero no se almacenará en los registros de ejecución. Mi pregunta originalmente me preguntó cómo recuperar esa información en el registro de ejecución. Gracias por el tiempo invertido. –

Cuestiones relacionadas