Personnaliser les vues d’entité

Les vues d’entités sont des requêtes enregistrées spéciales qui récupèrent des données à l’aide d’un filtre spécifique. Elles contiennent également des informations sur la façon dont les données de la vue doivent être affichées dans l’application. Les vues d’entités sont des enregistrements SavedQuery que vous pouvez créer par programme. Vous pouvez également les définir en tant que fichiers XML et les importer dans Dynamics 365 for Customer Engagement avec une solution non gérée.

Une vue d’entité est différente de UserQuery. Une requête utilisateur, appelée Vue enregistrée dans l’application, appartient à un utilisateur particulier, peut être affectée et partagée avec d’autres utilisateurs, peut être affichée par d’autres utilisateurs selon les privilèges d’accès de la requête. Elle convient aux requêtes fréquemment utilisées qui présentent les types d’entités et les requêtes effectuant l’agrégation. Pour plus d’informations, voir : Entité UserQuery (vue sauvegardée)

Vous pouvez également utiliser l’outil de personnalisation de Dynamics 365 pour personnaliser les vues. Pour plus d′informations : Créer et modifier des vues

Types de vues

Le tableau suivant répertorie les types de vues prises en charge pour la personnalisation. Le code de type d’une vue est enregistré dans l’attribut SavedQuery.QueryType. Notez qu’il existe des valeurs valides pour l’attribut QueryType non répertoriées ici, car cette entité est également utilisée pour stocker les filtres et les modèles Office Outlook. Pour plus d'informations, voir Filtres et modèles hors connexion et Outlook.

Lorsque des vues sont définies pour une entité spécifique, l’attribut SavedQuery.ReturnedTypeCode renvoie le nom logique de l’entité.

Type de vue Code de type Description
///Public 0 - Occurrence : Plusieurs
- Actions : Créer, supprimer, mettre à jour
- Commentaires : vous pouvez définir une de ces vues comme vue publique par défaut en attribuant à SavedQuery.IsDefault la valeur true.
Recherche avancée 1 - Occurrence : 1
- Actions : Mise à jour uniquement.
- Commentaires : par défaut, cette vue est affichée lorsque les résultats sont affichés dans Recherche avancée.
Vue associée 2 - Occurrence : 1
- Actions : Mise à jour uniquement,
- Commentaires : Par défaut, cette vue est affichée lorsqu’une grille de l’enregistrement associé s’affiche dans le volet de navigation d’un enregistrement.
Recherche rapide 4 - Occurrence : 1
- Actions : Mise à jour uniquement.
- Commentaires: Cette vue définit les colonnes qui font l′objet d′une recherche d′enregistrements en utilisant le champ de recherche dans la liste.
Rechercher 64 - Occurrence : 1
- Actions : Mise à jour uniquement.
- Commentaires : Il s’agit de la vue par défaut qui permet de rechercher un enregistrement lorsqu’aucune autre vue n’a été configurée pour le champ de recherche.

Affichage de tâches

Comme les vues sont des enregistrements SavedQuery, vous pouvez créer, mettre à jour, extraire, supprimer et désactiver ces enregistrements. En outre, vous pouvez modifier les critères de filtre ou configurer le tri, modifier les colonnes ou définir une vue en tant que vue par défaut.

Créer des vues

Pour créer une vue publique, spécifiez les propriétés suivantes :

  • SavedQuery.Name : Identificateur unique pour la requête enregistrée.

  • SavedQuery.ReturnedTypeCode : Correspond au nom logique de l’entité.

  • SavedQuery.FetchXml : voir Utiliser FetchXML pour créer une requête.

  • SavedQuery.LayoutXml : voir l’élément layoutxml dans le Schéma du fichier de solutions de personnalisation pour les éléments valides.

  • SavedQuery.QueryType: Doit toujours correspondre à zéro (0).

    L’exemple suivant crée une nouvelle vue publique pour l’entité opportunité :

    
    
                        System.String layoutXml =
    @"<grid name='resultset' object='3' jump='name' select='1' 
        preview='1' icon='1'>
        <row name='result' id='opportunityid'>
        <cell name='name' width='150' /> 
        <cell name='customerid' width='150' /> 
        <cell name='estimatedclosedate' width='150' /> 
        <cell name='estimatedvalue' width='150' /> 
        <cell name='closeprobability' width='150' /> 
        <cell name='opportunityratingcode' width='150' /> 
        <cell name='opportunitycustomeridcontactcontactid.emailaddress1' 
            width='150' disableSorting='1' /> 
        </row>
    </grid>";
    
                        System.String fetchXml =
                        @"<fetch version='1.0' output-format='xml-platform' 
        mapping='logical' distinct='false'>
        <entity name='opportunity'>
        <order attribute='estimatedvalue' descending='false' /> 
        <filter type='and'>
            <condition attribute='statecode' operator='eq' 
            value='0' /> 
        </filter>
        <attribute name='name' /> 
        <attribute name='estimatedvalue' /> 
        <attribute name='estimatedclosedate' /> 
        <attribute name='customerid' /> 
        <attribute name='opportunityratingcode' /> 
        <attribute name='closeprobability' /> 
        <link-entity alias='opportunitycustomeridcontactcontactid' 
            name='contact' from='contactid' to='customerid' 
            link-type='outer' visible='false'>
            <attribute name='emailaddress1' /> 
        </link-entity>
        <attribute name='opportunityid' /> 
        </entity>
    </fetch>";
    
                        SavedQuery sq = new SavedQuery
                        {
                            Name = "A New Custom Public View",
                            Description = "A Saved Query created in code",
                            ReturnedTypeCode = "opportunity",
                            FetchXml = fetchXml,
                            LayoutXml = layoutXml,
                            QueryType = 0
                        };
                        
                        _customViewId = _serviceProxy.Create(sq);
                        Console.WriteLine("A new view with the name {0} was created.", sq.Name);
    
    

Mettre à jour les vues

Si la propriété gérée SavedQuery.IsCustomizable permet la mise à jour de la vue, vous pouvez utiliser la méthode IOrganizationService.Update ou le message UpdateRequest pour mettre à jour la vue.

Supprimer des vues

Vous ne devez supprimer que les requêtes enregistrées que vous avez créées. Un composant de solution ou partie de l’application peut dépendre d’une requête enregistrée spécifiques. Si vous ne souhaitez pas voir apparaître certaines requêtes dans l’application, désactivez-les.

Extraire des vues

Utilisez RetrieveMultipleRequest ou IOrganizationService.RetrieveMultiple pour extraire des enregistrements de requête enregistrés.

L’exemple suivant extrait toutes les vues publiques pour l’entité opportunité :



        QueryExpression mySavedQuery = new QueryExpression
        {
            ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
            EntityName = SavedQuery.EntityLogicalName,
            Criteria = new FilterExpression
            {
                Conditions =
{
    new ConditionExpression
    {
        AttributeName = "querytype",
        Operator = ConditionOperator.Equal,
        Values = {0}
    },
    new ConditionExpression
    {
        AttributeName = "returnedtypecode",
        Operator = ConditionOperator.Equal,
        Values = {Opportunity.EntityTypeCode}
    }
}
            }
        };
        RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };

        RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveSavedQueriesRequest);

        DataCollection<Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;

        //Display the Retrieved views
        foreach (Entity ent in savedQueries)
        {
            SavedQuery rsq = (SavedQuery)ent;
            Console.WriteLine("{0} : {1} : {2} : {3} : {4} : {5},", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
        }

Désactiver des vues

Si vous ne souhaitez pas voir apparaître une vue publique dans l’application, vous pouvez la désactiver. Vous ne pouvez pas désactiver une vue publique qui est définie comme vue par défaut. L’exemple suivant désactive la vue Opportunités fermées au cours de l’exercice actuel pour l’entité opportunité :



System.String SavedQueryName = "Closed Opportunities in Current Fiscal Year";
QueryExpression ClosedOpportunitiesViewQuery = new QueryExpression
{
    ColumnSet = new ColumnSet("savedqueryid", "statecode", "statuscode"),
    EntityName = SavedQuery.EntityLogicalName,
    Criteria = new FilterExpression
    {
        Conditions =
        {
            new ConditionExpression
            {
                AttributeName = "querytype",
                Operator = ConditionOperator.Equal,
                Values = {0}
            },
            new ConditionExpression
            {
                AttributeName = "returnedtypecode",
                Operator = ConditionOperator.Equal,
                Values = {Opportunity.EntityTypeCode}
            },
                            new ConditionExpression
            {
                AttributeName = "name",
                Operator = ConditionOperator.Equal,
                Values = {SavedQueryName}
            }
        }
    }
};

RetrieveMultipleRequest retrieveOpportuntiesViewRequest = new RetrieveMultipleRequest { Query = ClosedOpportunitiesViewQuery };

RetrieveMultipleResponse retrieveOpportuntiesViewResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveOpportuntiesViewRequest);

SavedQuery OpportunityView = (SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
_viewOriginalState = (SavedQueryState)OpportunityView.StateCode;
_viewOriginalStatus = OpportunityView.StatusCode;


SetStateRequest ssreq = new SetStateRequest
{
    EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, (Guid)OpportunityView.SavedQueryId),
    State = new OptionSetValue((int)SavedQueryState.Inactive),
    Status = new OptionSetValue(2)
};
_serviceProxy.Execute(ssreq);

Note

L’état de la vue, actif ou inactif, n’est pas inclus avec la vue lorsqu’elle est ajoutée à une solution. Par conséquent, lorsque la solution est importée dans une organisation cible, le statut est défini sur actif par défaut.

Modifier les critères de filtre ou configurer le tri

Pour modifier le filtre ou modifier le mode de tri des données, vous devez définir l’attribut SavedQuery.FetchXml. Pour plus d’informations, voir Génération de requêtes avec FetchXML.

Pourboire

Si vous n’êtes pas familiarisé avec FetchXML, les messages suivants peuvent être utilisés pour convertir entre QueryExpression et FetchXML :QueryExpressionToFetchXmlRequest et FetchXmlToQueryExpressionRequest.

Modifier les colonnes

Les colonnes à afficher dans les vues peuvent être prises de l’entité ou des entités associées. Pour plus d’informations sur la manière de spécifier les colonnes à afficher, voir l’élément layoutxmldans le Schéma du fichier de solutions de personnalisation.

Ajouter des images personnalisées avec l’info-bulle pour une colonne

Vous pouvez ajouter l’icône personnalisée avec un texte d’info-bulle à afficher dans une colonne selon la valeur de colonne ; vous pouvez également spécifier le texte localisé d’info-bulle. Cette opération s′effectue en ajoutant des images personnalisées comme des ressources Web d′image dans votre instance Dynamics 365, puis en utilisant une ressource Web JavaScript pour ajouter du code JavaScript pour une colonne pour afficher les icônes en fonction de la valeur de colonne.

Note

Cette fonctionnalité a été introduite avec la mise à jour de décembre 2016 pour Dynamics 365 (en ligne et local). L′ajout d′images personnalisées avec l′info-bulle est pris en charge uniquement pour les grilles en lecture seule ; cette fonctionnalité n′est pas prise en charge pour les grilles modifiables. Pour plus d’informations sur les grilles modifiables, voir Utiliser des grilles modifiables.

Deux nouveaux attributs, imageproviderwebresource et imageproviderfunctionname, sont ajoutés à l’élément cell de layoutxml de savedquery qui vous permet de spécifier le nom d’une ressource Web et un nom de fonction JavaScript pour afficher des icônes personnalisées et du texte d’info-bulle pour une colonne. Le code JavaScript s'exécute lorsque la page se charge.

Vous pouvez également utiliser les nouveaux champs Ressource web et Nom de fonction dans la page Propriétés de colonne tout en modifiant la propriété d’un attribut (colonne) dans une définition de vue du client web Dynamics 365 pour définir le nom de la ressource web et le nom de fonction de JavaScript.

L′exemple de code suivant montre comment spécifier par programme une ressource Web et un nom de fonction JavaScript pour ajouter des icônes personnalisées et une info-bulle pour la colonne opportunityratingcode dans layoutxml :

System.String layoutXml =  
@"<grid name='resultset' object='3' jump='name' select='1'  
  preview='1' icon='1'>  
  <row name='result' id='opportunityid'>  
    <cell name='name' width='150' />  
    <cell name='customerid' width='150' />  
    <cell name='estimatedclosedate' width='150' />  
    <cell name='estimatedvalue' width='150' />  
    <cell name='closeprobability' width='150' />  
    <cell name='opportunityratingcode' width='150' imageproviderwebresource='new_SampleWebResource'  
          imageproviderfunctionname='displayIconTooltip' />  
    <cell name='opportunitycustomeridcontactcontactid.emailaddress1'  
        width='150' disableSorting='1' />  
  </row>  
</grid>";  

La fonction JavaScript permettant d′afficher des images personnalisées et des info-bulles textuelles prévoit les deux arguments suivants : l′objet de ligne entier spécifié dans layoutxml et l′ID de paramètres régionaux (LCID) de l′utilisateur appelant. Le paramètre de LCID vous permet de spécifier le texte de l’icône dans plusieurs langues. Pour plus d’informations sur les langues prises en charge par CRM, voir Activation de langues supplémentaires et Installation ou mise à niveau de modules linguistiques pour Microsoft Dynamics 365 Customer Engagement. Pour obtenir la liste des valeurs de l’ID de paramètres régionaux (LCID) que vous pouvez utiliser dans votre code, voir ID de paramètres régionaux assignés par Microsoft.

Si vous ajoutez des icônes personnalisées pour un type d’attribut défini par une option, qui possède un ensemble limité d’options prédéfinies, vérifiez que vous utilisez la valeur d’entier des options plutôt que le libellé afin d’éviter de casser le code avec des modifications dans la chaîne d’étiquette localisée. Par ailleurs, dans votre fonction JavaScript, spécifiez simplement le nom d’une ressource web d’image que vous souhaitez utiliser comme icône pour une valeur dans l’attribut. L’image doit être d’une taille de 16 x 16 pixels ; les plus grandes images seront automatiquement réduites à la taille de 16 x 16 pixels.

L’exemple de code suivant illustre différentes icônes et info-bulles basées l’une des valeurs (1 : Très intéressé, 2 : Intéressé, 3 : Peu intéressé) dans l’attribut opportunityratingcode (Rating). Cet exemple de code explique également comment afficher le texte d’info-bulle localisé. Pour que cet exemple fonctionne, vous devez créer trois ressources Web d’images avec des images 16 x 16 (Bouton d′évaluation Très intéressé, Symbole d′évaluation Intéressé et Bouton d′évaluation Peu intéressé) dans votre instance Dynamics 365 avec les noms suivants respectivement : new_Hot, new_Warm et new_Cold.

function displayIconTooltip(rowData, userLCID) {      
    var str = JSON.parse(rowData);  
    var coldata = str.opportunityratingcode_Value;  
    var imgName = "";  
    var tooltip = "";  
    switch (coldata) {  
        case 1:  
            imgName = "new_Hot";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Hot";  
                    break;  
                default:  
                    tooltip = "Opportunity is Hot";  
                    break;  
            }  
            break;  
        case 2:  
            imgName = "new_Warm";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Warm";  
                    break;  
                default:  
                    tooltip = "Opportunity is Warm";  
                    break;  
            }  
            break;  
        case 3:  
            imgName = "new_Cold";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Cold";  
                    break;  
                default:  
                    tooltip = "Opportunity is Cold";  
                    break;  
            }  
            break;  
        default:  
            imgName = "";  
            tooltip = "";  
            break;  
    }  
    var resultarray = [imgName, tooltip];  
    return resultarray;  
}  

Cela entraîne l’affichage des valeurs dans la colonne Rating contenant les icônes appropriées en fonction de la valeur, et le texte d’info-bulle d’icône lorsque vous pointez la souris sur des icônes.

Icônes personnalisées affichées pour une colonne dans une vue.

Définir comme valeur par défaut

Une seule vue publique active peut être définie en tant que vue par défaut. Pour faire d’une vue la vue par défaut, définissez la propriété IsDefault sur true.

Voir aussi

Exemple : Utiliser les vues
Génération de requêtes avec FetchXML
Étendre le modèle de métadonnées pour Microsoft Dynamics 365 Customer Engagement
Personnaliser les formulaires d’entité dans Microsoft Dynamics 365 Customer Engagement
Personnaliser les groupes d’options globaux dans Microsoft Dynamics 365 Customer Engagement
Personnaliser Dynamics 365 Customer Engagement