Partager via


Personnaliser les vues

Les vues 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 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 avec une solution non gérée.

Une vue SavedQuery 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 de tables et les requêtes effectuant l’agrégation. Pour plus d’informations : Requêtes enregistrées

Vous pouvez également utiliser l’outil de personnalisation 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 la paramètre SavedQuery.QueryType.

Lorsque des vues sont définies pour une table spécifique, le paramètre SavedQuery.ReturnedTypeCode renvoie le nom logique de la table.

Type de vue Code de type Description
Public 0 - Occurrence: Tous
- 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 la colonne de recherche dans la liste.
Recherche 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 la colonne de recherche.

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 la table.

  • SavedQuery.FetchXml : consultez Interroger des données à l’aide de FetchXml.

  • 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’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>";
    
    var 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 = service.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’opportunité :

var 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)service.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’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)service.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)
};
service.Execute(ssreq);

Notes

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 le paramètre SavedQuery.FetchXml. Plus d’informations : Interroger des données à l’aide de FetchXml.

Conseil

Si vous n’êtes pas familier avec FetchXML les messages suivants peuvent être utilisés pour effectuer une conversion entre QueryExpression et FetchXML :QueryExpressionToFetchXmlRequest et FetchXmlToQueryExpressionRequest.

Modifier les colonnes

Les colonnes à afficher dans les vues peuvent être prises de la table ou des tables 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, 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.

Notes

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 paramètres, 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’une colonne dans une définition de vue du client web 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, voir Activation de langues supplémentaires et Installer ou mettre à niveau des modules linguistiques. 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 une colonne de type « 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 la colonne. 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 la colonne 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 chacune 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 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.

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).