7

Quando si esegue un report in MSCRM 2011, sono disponibili due opzioni per le origini dati: SQL o Fetch.Come ottenere l'identità dell'utente che ha eseguito un report?

Nel log di esecuzione SSRS, l'utente che ha eseguito il rapporto è sempre l'account di servizio.

quando si usa recuperare, nel log di esecuzione dei report, v'è un parametro CRM_FullName contenente il nome completo dell'utente che ha eseguito il report.

Quando si utilizza SQL fonte, non esiste un parametro CRM_FullName. Come posso sapere chi ha eseguito il rapporto? Ci deve essere un modo per sapere, dal momento che le viste filtrate sanno chi sono.

risposta

6

In realtà non esiste alcun modo per trovare queste informazioni. Quando si crea un report per MSCRM, si utilizza un connettore denominato "MSCRM Data Connector". Questo può essere visto nella colonna AdditionnalInfo della vista ExecutionLogs3 sull'istanza di SSRS. Quando si utilizza questo connettore e si tenta di mostrare un report, verrà richiesto nome utente e password. Ecco dove le cose si fanno interessanti.

Il rapporto non è in realtà in attesa di un nome utente/password! In effetti, si aspetta di ricevere il systemuserid (guid) come username e l'organizationid (guid) come password. Quindi cerca nel database MSCRM_CONFIG per le impostazioni del database dell'organizzazione. Quindi, entra nel database dell'organizzazione e fa semplicemente un set context_info SYSTEMUSERID. Infine, le immagini filtrate chiamano una funzione chiamata '[dbo]. [Fn_FindUserGuid]' che recupera context_info. Questo è il modo in cui le viste filtrate funzionano correttamente, mentre è connesso come account di servizio.

Come ci si potrebbe aspettare, non possiamo conoscere l'utente che ha eseguito il rapporto perché il nome utente e la password richiesti in SSRS non vengono mai registrati ovunque (per questioni di sicurezza, forse).

L'opzione migliore che ho trovato per registrare chi ha eseguito un report è in realtà creare una stored procedure che effettuerà un'istruzione select sulle viste filtrate (o su qualsiasi tabella, così com'è) e quindi effettuerà il log in una tabella separata la dichiarazione, i parametri della procedura e context_info(). Quindi, in SSRS, richiamo quella funzione invece di andare direttamente alle viste filtrate.

0

Il nome di accesso dell'utente è sufficiente? Ad esempio, puoi semplicemente usare qualcosa come ="Generated by " & User!UserID?

5

risposta modificato per includere la ricevendo il fullname utente se si utilizza sorgente SQL.

  1. Registrare un parametro, UserID, con valore di default come

    = User! UserID

  2. utilizzare la seguente query nel set di dati

    SELEZIONA NomeDominio, FullName

    DA SystemUserBase

    WHE RE (NomeDominio = @UserID)

  3. Quindi utilizzare

    = Fields! FullName.Value

nel rapporto.

Nel CRM i dati utente sono memorizzati nella tabella SystemUserBase e la colonna DomainName è il dominio Dominio \ Nome utente memorizzato in User! UserID del report. Se si preferisce utilizzare le viste, utilizzare la vista FilteredSystemUser anziché la tabella SystemUserBase.

Per FetchXML prova i seguenti: L'operatore operatore = 'eq-userid' significa uguale all'utente corrente.

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

Poi nel report è possibile utilizzare il seguente codice in un'espressione per ottenere gli utenti FULLNAME

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

dove la dataset si chiama GetUserData

+0

La domanda riguardava l'utilizzo di SQL Source. Come indicato nella domanda, so che viene registrato quando si utilizza FetchXML. –

+0

Sì, sei corretto, ho modificato la risposta per includere il recupero del nome utente se è stata utilizzata l'origine sql. –

+0

La tua risposta (utilizzando User! UserID) mostrerà il nome utente nel report, ma non verrà memorizzato nei log di esecuzione. La mia domanda originariamente chiedeva come recuperare tali informazioni nel registro di esecuzione. Grazie però per il tempo investito. –