Personnaliser les vues dans les applications basées sur des modèles

Personnalisez les vues dans les applications basées sur des modèles par programmation pour contrôler les utilisateurs de données qui récupèrent et comment l’application l’affiche. Les vues sont SavedQuery des enregistrements qui utilisent des filtres et des paramètres d’affichage spécifiques. Vous pouvez les créer dans du code ou les définir en tant que code XML et les importer avec une solution non managée.

Une vue SavedQuery est différente de UserQuery. Une requête utilisateur, appelée vue enregistrée dans les applications basées sur des modèles, appartient à un utilisateur individuel, peut être affectée et partagée avec d’autres utilisateurs et peut être consultée par d’autres utilisateurs en fonction des privilèges d’accès de la requête. Ce type d’affichage est approprié pour les requêtes fréquemment utilisées qui couvrent les types de tables et les requêtes qui effectuent l’agrégation. Pour plus d’informations, consultez Requêtes enregistrées.

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

Types de vues

Le tableau suivant répertorie les cinq types de vues que vous pouvez personnaliser. Le code de type d’une vue est enregistré dans la paramètre SavedQuery.QueryType.

Lorsque vous définissez des vues pour une table spécifique, le SavedQuery.ReturnedTypeCode paramètre retourne le nom logique de la table.

Type de vue Code de type Description
Public 0 - Occurrence: Tous
- Actions: Créer, supprimer, mettre à jour
- Commentaires : définissez l’une de ces vues comme vue publique par défaut en définissant la valeur SavedQuery.IsDefault 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 sont recherchées lorsqu’un utilisateur recherche des enregistrements à l’aide de la colonne de recherche dans un affichage de liste.
Recherche 64 - Occurrence : 1
- Actions: Mise à jour uniquement.
- Commentaires : il s’agit de la vue par défaut utilisée pour rechercher un enregistrement lorsqu’aucune autre vue n’est configurée pour la colonne de recherche.

Gérer les vues en tant que composants de solution

Les vues sont des composants de solution. Lorsque vous créez, mettez à jour ou supprimez des composants de solution, vous appliquez la modification à la solution qui les contient. Si vous ne spécifiez pas explicitement de solution, les modifications sont définies sur la solution préférée de la personne qui exécute votre code. Si cette personne n’a pas de solution préférée, les modifications vont à l’une des solutions par défaut.

En tant que développeur, utilisez le SolutionUniqueName paramètre facultatif pour associer explicitement ces modifications de données à une solution non managée spécifique.

Créer des vues

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

Propriété Description
Name Identificateur unique de la requête enregistrée.
ReturnedTypeCode Correspond au nom logique de la table.
FetchXml Modifiez les critères de filtre ou configurez le tri. Consultez les données de requête à l’aide de FetchXml.
LayoutXml Consultez l’élément dans le layoutxmlschéma du fichier solutions de personnalisation pour les éléments valides.
QueryType Doit toujours être zéro (0).

L’exemple suivant crée une vue publique pour la table Opportunité :

Cet exemple utilise la méthode IOrganizationService.Execute avec la classe CreateRequest et le SolutionUniqueName paramètre facultatif.

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

var request = new CreateRequest
{
   Target = sq
};
request["SolutionUniqueName"] = "< Your Solution Unique Name >";

var response = (CreateResponse)service.Execute(request);
_customViewId = response.id;
Console.WriteLine("A new view with the name {0} was created.", sq.Name);

En savoir plus sur le Kit de développement logiciel (SDK) Dataverse pour .NET

Mettre à jour les vues

Si la IsCustomizable propriété gérée autorise la mise à jour de la vue, utilisez le message de classe UpdateRequest pour mettre à jour la vue. Mettez toujours à jour les vues dans le contexte d’une solution. Utilisez le SolutionUniqueName paramètre facultatif pour associer la modification à une vue avec une solution.

Pour obtenir un exemple de mise à jour, consultez Désactiver les vues

Supprimer des vues

Vous devez uniquement supprimer les requêtes enregistrées que vous avez créées. Un composant de solution ou une partie de l’application peut dépendre d’une requête enregistrée spécifique. S’il existe des requêtes que vous ne souhaitez pas afficher dans l’application, désactivez-les. Supprimez toujours des vues dans le contexte d’une solution. Utilisez le SolutionUniqueName paramètre facultatif pour associer la suppression d’une vue à une solution.

Extraire des vues

Les exemples suivants récupèrent toutes les vues publiques de la table Opportunité :

Cet exemple utilise une classe RetrieveMultipleRequest avec la méthode IOrganizationService.Execute pour récupérer les enregistrements de requête enregistrés.

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);
}

En savoir plus sur le Kit de développement logiciel (SDK) Dataverse pour .NET

Désactiver des vues

Si vous ne souhaitez pas qu’une vue publique apparaisse dans l’application, désactivez-la. Vous ne pouvez pas désactiver une vue publique définie comme vue par défaut.

La désactivation est une opération de mise à jour. Mettez toujours à jour les vues dans le contexte d’une solution. Utilisez le SolutionUniqueName paramètre facultatif pour associer la modification à une vue avec une solution.

L’exemple suivant désactive l’affichage Opportunités fermées dans l’année fiscale actuelle pour la table Opportunité :

Cet exemple utilise la méthode IOrganizationService.Execute avec la classe UpdateRequest et le SolutionUniqueName paramètre facultatif.

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

var updateRequest = new UpdateRequest
{
  Target = new SavedQuery
  {
    Id = OpportunityView.Id,
    StateCode = new OptionSetValue(1), // Inactive
    StatusCode = new OptionSetValue(2) // Inactive
  }
};
updateRequest["SolutionUniqueName"] = "< Your Solution Unique Name >";

service.Execute(updateRequest);

En savoir plus sur le Kit de développement logiciel (SDK) Dataverse pour .NET

Note

État d’affichage : active ou inactive n’est pas inclus dans la vue lorsque vous l’ajoutez à une solution. Par conséquent, lorsque vous importez la solution dans une organisation cible, l’état est défini sur actif par défaut.

Modifier les colonnes

Vous pouvez sélectionner des colonnes à afficher dans les vues 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 icônes personnalisées et des info-bulles pour afficher les colonnes

Vous pouvez ajouter une icône personnalisée avec du texte d’info-bulle à afficher dans une colonne en fonction de la valeur de colonne. Vous pouvez également spécifier du texte d’info-bulle localisé. Ajoutez les icônes personnalisées en tant que ressources web d’image dans votre instance, puis utilisez une ressource web JavaScript pour ajouter du code JavaScript pour une colonne afin d’afficher les icônes en fonction de la valeur de la colonne.

Note

Vous pouvez ajouter des icônes personnalisées avec des info-bulles uniquement aux 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 et imageproviderfunctionname, imageproviderwebresource sont ajoutés à l’élément cell du layoutxml de savedquery. Ces paramètres vous permettent 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 vous pouvez spécifier par programmation une ressource web et un nom de fonction JavaScript pour ajouter des icônes personnalisées et des info-bulles pour la opportunityratingcode colonne dans 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, consultez les options régionales et linguistiques de votre environnement. 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 .

En supposant que vous ajoutez des icônes personnalisées pour un type de colonne de choix, car elle a un ensemble limité d’options prédéfinies, utilisez la valeur entière des options au lieu de l’étiquette pour éviter de briser le code en raison des modifications apportées à la chaîne d’étiquette localisée. 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 de 16 x 16 pixels. Les images plus volumineuses sont automatiquement mises à l’échelle jusqu’à 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’image chacune avec des images 16x16 ( , et ) dans votre instance avec les noms suivants respectivement : new_Hot, new_Warmet new_Cold.

function displayIconTooltip(rowData, userLCID) {
  var str = JSON.parse(rowData);
  var coldata = str.opportunityratingcode_Value;
  var imgName = "";
  var tooltip = "";
  switch (parseInt(coldata, 10)) {
    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.

Capture d’écran des icônes personnalisées affichées dans la colonne Évaluation d’une vue.

Définir une vue publique comme vue par défaut

Vous ne pouvez définir qu’une seule vue publique active comme vue par défaut. Pour afficher l’affichage par défaut, définissez la IsDefault propriété sur true.

Outils de la communauté

Il existe plusieurs outils de communauté qui utilisent ces API pour gérer les vues :

Note

Ces outils de communauté ne sont pas un produit de Dataverse, et Microsoft ne fournit pas de support pour les outils de la communauté. Si vous avez des questions sur un outil, contactez l’éditeur. Plus d’informations : Outils de la communauté