Attributs calculés et attributs de report

Les attributs calculés et de rapport sont essentiels, car ils dispensent l’utilisateur de devoir exécuter manuellement des calculs ; l’utilisateur peut ainsi se concentrer sur son travail. Désormais, les administrateurs systèmes peuvent facilement définir un champ pour contenir la valeur de la plupart des calculs courants sans avoir à collaborer avec un développeur. Les développeurs peuvent aussi mettre à profit les fonctionnalités de la plateforme pour effectuer ces calculs plutôt qu’au sein de leur propre code.

Vidéo : Champs cumulatifs et calculés dans Microsoft Dynamics CRM 2015

Éléments communs et fonctionnalités

Les attributs calculés et de report partagent certains éléments communs et fonctionnalités, par exemple :

  • Ils sont en lecture seule.

  • Ils ne sont pas spécifiques à l’utilisateur. Comme le calcul est effectué avec un compte d’utilisateur système, les valeurs peuvent être basées sur les enregistrements pour lesquels l’utilisateur ne possède pas autrement les privilèges d’affichage, comme les attributs dont la sécurité est activée au niveau du champ.

    Tous les attributs qui héritent de AttributeMetadata ont une propriété SourceType pouvant contenir les valeurs affichées dans le tableau suivant.

active Description
null Type d’attribut non valide pour être un attribut calculé ou un attribut de report.
0 Attribut unique. L’attribut n’est pas défini comme attribut calculé ou attribut de report.
1 Attribut calculé
2 Attribut de report

Les attributs calculés et de report sont basés sur les types d’attributs existants qui héritent de AttributeMetadata. Les types d’attributs suivants ont de nouvelles propriétés :

Propriété Définition
FormulaDefinition Contient la définition XAML de la formule utilisée pour effectuer le calcul ou le report. La seule façon prise en charge de modifier cette valeur consiste à utiliser l’éditeur de formule d’application.

Pour plus d’informations sur la configuration des formules de ces attributs, consultez les rubriques suivantes dans le Guide de personnalisation : Définition des champs de report et Définition des champs calculés.
SourceTypeMask La valeur de masque de bits de cette propriété en lecture seule décrit les types sources utilisés dans la formule de l’attribut calculé ou si la formule d’un attribut calculé ou de report n’est pas valide.

- 0: Undefined. Valeur par défaut des attributs simples et de report.
- 1 : Simple. L’attribut calculé fait référence à un attribut dans le même enregistrement.
- 2 : Association. L’attribut calculé fait référence à un attribut d’un enregistrement associé.
- 4 : Logical. L'attribut calculé fait référence à un attribut du même enregistrement qui est stocké dans une autre table de base de données. Pour plus d'informations : Attributs logiques
- 8 : Calculated. L'attribut calculé fait référence à un autre attribut calculé.
- 16 : Rollup. L’attribut calculé fait référence à un attribut de report.
- 32 : Invalid. Le champ calculé ou cumulatif n’est pas valide.
Généralement, il s’agit d’un champ qui fait référence à un attribut qui n’existe plus. Remarque : une ou plusieurs de ces conditions peuvent être vraies pour n’importe quel champ calculé ou cumulatif. Comme il s’agit d’une valeur de masque de bits, vous pouvez trouver utile d’utiliser l’Énumération SourceTypeMasks lors de l’exécution d’opérations au niveau du bit.

Attributs calculés

Les attributs calculés en temps réel quand ils sont récupérés. Les attributs calculés peuvent être composée en utilisant différents types de données. Par exemple, un attribut Integer calculé peut référencer les valeurs des attributs Decimal ou Currency. Pour plus d'informations : Définir des champs calculés.

Les valeurs d'attributs calculés sont disponibles dans le pipeline du plug-in de récupération. La post-image de la mise à jour ou de la création d’un enregistrements d’entité contient la valeur d’attribut calculé de l’étape 40. Pour plus d’informations : Pipeline d’exécution des événements

Limitations

Vous ne pouvez pas utiliser les valeurs des attributs calculés qui font référence à une entité associée, à un autre attribut calculé ou à une valeur logique de la même entité pour trier les données renvoyées par une requête. Bien que votre requête puisse spécifier que les résultats doivent être classés à l’aide d’un attribut calculé, le sens du tri est ignoré et ne lève aucune erreur. Si l’attribut calculé référence seulement les valeurs simples du même enregistrement, le tri fonctionne normalement. Vous pouvez déterminer les sources utilisées dans un champ calculé à l'aide de la propriété d'SourceTypeMask des métadonnées d'attribut. Pour plus d'informations : Attributs logiques

Seuls les attributs d'une entité parente immédiate peuvent être utilisés dans un attribut calculé.

Les requêtes, graphiques et visualisations enregistrés peuvent comporter un maximum de 10 champs calculés uniques.

Les attributs calculés peuvent faire référence à d’autres attributs calculés dans leur formule, mais ils ne peuvent pas faire référence à eux-mêmes.

Les attributs calculés ne disposent pas de valeurs lorsqu'un utilisateur avec Dynamics 365 for Outlook est en mode hors connexion.

Les propriétés de métadonnées MaxValue et MinValue ne peuvent pas être définies sur les attributs calculés.

Pour plus d’informations : Restrictions supplémentaires

Attributs de report

Comme les attributs de report demeurent dans la base de données, ils peuvent être utilisés pour filtrer ou trier comme les attributs réguliers. Tout type de processus ou de plug-in utilise la valeur calculée de l’attribut la plus récente. Les valeurs d’attribut de report sont calculées de façon asynchrone par les tâches système planifiées. Les administrateurs définissent à quel moment une tâche est exécuté ou suspendue. Par défaut, chaque attribut est mis à jour toutes les heures. Pour plus d'informations : Définir des champs cumulatifs.

Lorsqu'un attribut de report est créé ou mis à jour, une tâche Champs cumulatifs calculés en masse est planifiée pour s'exécuter en 12 heures. Le délai de 12 heures est conçu pour exécuter cette opération sollicitant de nombreuses ressources pendant une période qui affecte le moins les utilisateurs. Une fois la tâche terminée, sa prochaine exécution est planifiée 10 années plus tard. Si un problème survient lors du calcul, il sera déclaré avec la tâche système. Recherchez la tâche système dans Paramètres>Tâches système pour rechercher les éventuelles erreurs avec les champs de report.

Pourboire

Comme développeur testant une solution dans un environnement de développement, vous ne pouvez peut-être pas attendre 12 heures. Vous pouvez faire en sorte que cela se déroule plus rapidement. Dans la liste Tâches système, utilisez la vue Tâches système récurrentes pour filtrer la liste et rechercher la tâche Calculer en masse les champs cumulatifs. La tâche étant sélectionnée, utilisez Autres actions>Reporter, puis définissez la date avec une valeur plus proche.

Si vous souhaitez déclencher la création d’une tâche Calculer en masse les champs cumulatifs par programmation, extrayez AttributeMetadata pour l’attribut de report à l’aide de RetrieveAttributeRequest et UpdateAttributeRequest pour mettre à jour l’attribut sans apporter de réelle modification.

La tâche Calculer en masse les champs cumulatifs se produit immédiatement quand une solution contenant un attribut de report est importée. Cela suppose que vous installiez une solution pendant une période qui n’impactera pas défavorablement les utilisateurs.

Chaque attribut de report d’une entité contient aussi deux attributs de prise en charge pour l’attribut de report :

  • <attribute SchemaName>_Date : DateTime – dernière date de calcul du report.

  • <attribute SchemaName>_State : Integer – état du calcul du report. Pour plus d’informations : Valeurs d’état du report

Valeurs de l'état du report

L’état d’un calcul de champ cumulatif est disponible dans l’attribut <attribut SchemaName>_State correspondant et dans la propriété CalculateRollupFieldResponse. Propriété FieldState. Les valeurs qui indiquent l’état sont répertoriées dans le tableau suivant.

Valeur de l’état Description
0 NotCalculated : la valeur de l’attribut reste à calculer.
1 Calculated : la valeur de l’attribut a été calculée conformément à la dernière date de mise à jour dans l’attribut <attribut SchemaName>_Date.
2 OverflowError : le calcul de la valeur d’attribut a conduit à une erreur de dépassement de la capacité.
3 OtherError : le calcul de la valeur d’attribut a échoué en raison d’une erreur interne ; la prochaine série de calculs la résoudra probablement.
4 RetryLimitExceeded : le calcul de la valeur d’attribut a échoué, car le nombre maximal de nouvelles tentatives pour calculer la valeur a été dépassé en raison du nombre élevé de conflits de simultanéité et de verrouillage.
5 HierarchicalRecursionLimitReached : le calcul de la valeur d’attribut a échoué, car la limite maximale de détail de la hiérarchie du calcul a été atteinte.
6 LoopDetected : le calcul de la valeur d’attribut a échoué, car une boucle récursive a été détectée dans la hiérarchie de l’enregistrement.

Extraire immédiatement une valeur calculée de champ de report

Les attributs de report prennent en charge un message CalculateRollupField que les développeurs peuvent utiliser pour calculer une valeur d’attribut de report à la demande. La demande et la réponse, ainsi que des membres, sont illustrées dans le tableau suivant.

Demande/réponse Membres
CalculateRollupFieldRequest Target : EntityReference pour l’enregistrement.

FieldName : chaîne représentant le nom logique de l’attribut.
CalculateRollupFieldResponse Entity : Entity contenant l’attribut de report et les attributs de prise en charge <attribut SchemaName>_Date et <attribut SchemaName>_State.

Ce message est une opération synchrone uniquement pour l’attribut identifié dans la requête. Si la valeur de cet enregistrement est incluse comme composante d’autres champs cumulatifs, les valeurs de ces champs ne prendront pas en compte l’éventuelle modification de valeur provoquée par cette méthode avant que ne se produisent les travaux asynchrones régulièrement planifiés exécutant ces calculs.

Limitations

Les attributs de report ne peuvent pas être utilisés comme événement de workflow ou condition d’attente. Ces attributs ne déclenchent pas l’événement pour déclencher des workflows.

Les attributs ModifiedBy et ModifiedOn de l’entité ne sont pas mis à jour lorsque l’attribut de report est mis à jour.

Un maximum de 100 attributs de report peut être défini dans une organisation. Chaque entité ne peut pas avoir plus de 10 attributs de report.

Une formule d’attribut de report ne peut pas faire référence à un autre attribut de report.

Une formule d’attribut de report ne peut pas faire référence à des attributs calculés complexes. Seuls les attributs calculés qui référencent des attributs simples du même enregistrement peuvent être utilisés avec les reports.

Une formule d’attribut de report ne peut pas contenir des enregistrements de relations plusieurs-à-plusieurs (N:N). Elle peut uniquement contenir des enregistrements de relations un-à-plusieurs (1:N).

Les formules d’attribut de report ne peuvent pas utiliser les relations un-à-plusieurs (1:N) avec l’entité ActivityPointer ou ActivityParty.

Pour plus d’informations : Restrictions supplémentaires

Énumération SourceTypeMasks

La propriété SourceTypeMask des attributs qui prennent en charge les champs calculés et les champs de report contient une valeur de masque de bits. Pour extraire les informations pertinentes de la valeur, il est utile d’avoir une énumération lors de l’exécution d’opérations au niveau du bit. Utilisez l’énumération SourceTypeMasks suivante lors de la comparaison de la valeur de propriété SourceTypeMask.

 public enum SourceTypeMasks  
{  
    /// <summary>  
    /// Undefined: 0 - The default value for simple and rollup attributes.  
    /// </summary>  
    Undefined = 0,  
    /// <summary>  
    /// Simple: 1 - The calculated attribute refers to an attribute in the same record.  
    /// </summary>  
    Simple = 1,  
    /// <summary>  
    /// Related: 2 - The calculated attribute refers to an attribute in a related record.  
    /// </summary>  
    Related = 2,  
    /// <summary>  
    /// Logical: 4 - The calculated attribute refers to a logical attribute.  
    /// </summary>  
    Logical = 4,  
    /// <summary>  
    /// Calculated: 8 - The calculated attribute refers to another calculated attribute.  
    /// </summary>  
    Calculated = 8,  
    /// <summary>  
    /// Rollup: 16 - The calculated attribute refers a rollup attribute.   
    /// </summary>  
    Rollup = 16,  
    /// <summary>  
    /// Invalid: 32 - The calculated or rollup attribute is invalid.  
    /// Typically this would be where a field refers to an attribute that no longer exists.   
    /// </summary>  
    Invalid = 32  
}  

Restrictions supplémentaires

Ces restrictions supplémentaires s’appliquent à la fois aux attributs cumulatifs et calculés.

Une couche active, dans une solution, sur un champ calculé ou un champ de cumul ne peut pas être supprimée à l’aide de Supprimer les personnalisations actives. Cependant, les modifications de couche active peuvent être supprimées en suivant les étapes ci-dessous.

  1. Ouvrez les Couches de solution d’un champ.

  2. Ouvrez la Couche active et choisissez Supprimer les personnalisations actives. Cela ne supprimera pas la couche active mais supprimera toutes les modifications qui y sont apportées.

  3. Ouvrez le champ et accédez à la page Concepteur de formules en utilisant le bouton Éditer/Modifier à côté du menu déroulant Type de champ.

  4. Apportez quelques modifications à la formule et enregistrez-la. Mettez à jour la formule à l’original et enregistrez-la. Le système régénérera le champ avec la dernière définition et le champ fonctionnera comme prévu.

Voir aussi

Vidéo : Champs cumulatifs et calculés dans Dynamics 365 Customer Engagement (on-premises)
Présentation des attributs d’entité
Définition de champs calculés
Définition de champs cumulatifs