Comment faire pour obtenir l'identité de l'utilisateur qui a exécuté un rapport?
Lors de l'exécution d'un rapport dans MSCRM 2011, vous avez deux options pour les sources de données : SQL ou Chercher.
Dans SSRS les journaux d'exécution, l'utilisateur qui a exécuté le rapport est toujours le compte de service.
Lors de l'utilisation de récupérer, dans le rapport du journal de l'exécution, il y a un paramètre CRM_FullName contenant le nom complet de l'utilisateur qui a exécuté le rapport.
Lors de l'utilisation de SQL à la source, il n'y a pas de CRM_FullName paramètre. Comment puis-je savoir qui a couru le rapport? Il doit y avoir un moyen de savoir, depuis les vues Filtrées savoir qui je suis.
Vous devez vous connecter pour publier un commentaire.
Il n'ya vraiment pas moyen de trouver cette information. Lorsque vous créez un rapport pour MSCRM, vous utilisez un connecteur appelé "MSCRM Connecteur de Données". Ceci peut être vu dans la AdditionnalInfo colonne de la ExecutionLogs3 vue sur la SSR instance. Lors de l'utilisation de ce connecteur et en essayant de montrer un rapport, il vous sera demandé un nom d'utilisateur et mot de passe. C'est là que les choses deviennent intéressantes.
Le rapport n'est pas fait attendre un nom d'utilisateur/mot de passe! En fait, il s'attend à recevoir les systemuserid (guid) comme nom d'utilisateur et le organizationid (guid) comme mot de passe. Ensuite, il recherche dans la base de données MSCRM_CONFIG pour l'organisation paramètres de base de données. Ensuite, il va dans l'organisation de la base de données et il suffit de faire une
set context_info SYSTEMUSERID
. Enfin, la filteredviews sont l'appel d'une fonction nommée " [dbo].[fn_FindUserGuid] " qui récupère le context_info. C'est la façon dont les vues filtrées sont en bon état de marche, tout en étant connecté sous le compte de service.Que vous avez prévu, nous ne pouvons pas savoir à l'utilisateur qui a exécuté le rapport car le nom d'utilisateur et mots de passe dans les SSR sont jamais connecté n'importe où (pour des questions de sécurité, peut-être).
La meilleure option que j'ai trouvé pour le journal qui a couru un rapport est en fait de créer une procédure stockée qui va faire une instruction select sur les vues filtrées (ou toutes les tables, comme il est), puis ouvrez une session dans une table distincte de la déclaration, les paramètres de la procédure et de la context_info(). Puis, dans SSRS j'ai appeler cette fonction au lieu d'aller à l'vues filtrées directement.
Répondre modifié pour inclure l'obtention de l'utilisateur fullname si sql source est utilisée.
Enregistrer un paramètre, UserID, avec la valeur par défaut comme
=Utilisateur!UserID
Utiliser la requête suivante dans votre jeu de données
SÉLECTIONNEZ DomainName, FullName
DE SystemUserBase
OÙ (DomainName = @UserID)
Ensuite utiliser
=Champs!FullName.Valeur
dans votre rapport.
Dans le CRM les données utilisateur sont stockées dans le SystemUserBase table, et le Nom de la colonne est le de Domaine\nom d'utilisateur stockées dans de l'Utilisateur!Nom d'utilisateur du rapport.
Si vous préférez l'utilisation de points de vue, l'utilisation FilteredSystemUser vue au lieu de SystemUserBase table.
Pour fetchxml essayez les solutions suivantes:
L'opérateur opérateur='eq-userid' signifie l'égalité d'accès à l'utilisateur actuel.
Ensuite, dans votre rapport, vous pouvez utiliser le code suivant dans une expression pour obtenir les utilisateurs fullname
=Premier(Champs!user_fullname.Valeur, "GetUserData")
où le jeu de données est appelé GetUserData
Sera le nom d'utilisateur suffit-il? c'est à dire vous pouvez utiliser quelque chose comme
="Generated by " & User!UserID
?