Administration spécialisée > Personnalisation des objets métier > Gestion des types et des attributs > Utilisation de l'utilitaire Gestion d'attributs et de types > Gestion des types > Page d'informations d'un type > Onglet Attributs > Création d'un attribut > Formules d'attributs calculés
  
Formules d'attributs calculés
Les attributs calculés utilisent des formules pour dériver leurs valeurs à partir de celles d'autres attributs. Ces formules peuvent recourir à des valeurs littérales et à des valeurs d'attribut pour calculer ou générer une valeur d'attribut dérivée.
Vous pouvez saisir la formule dans le champ Formule lors de l'étape Définir les propriétés relative à la création de l'attribut calculé, ou en modifiant le champ Formule de la page d'informations de l'attribut, une fois ce dernier créé.
* 
Si un attribut affectant un attribut calculé est modifié lors de la création ou de la modification d'un objet, la formule n'est pas immédiatement réévaluée. Une fois l'action de création ou de modification traitée, la formule est réévaluée, et la valeur d'attribut calculée est mise à jour.
Pour plus d'informations sur la façon dont les attributs calculés sont affichés lorsqu'ils sont inclus dans les schémas d'attributs, consultez la section Affichage des attributs.
La localisation des résultats numériques d'un attribut calculé utilise les paramètres régionaux du navigateur.
Types de données des formules
Les formules prennent uniquement en charge les attributs qui présentent les types de données suivants : Chaîne, Nombre entier, Nombre réel, Nombre réel avec unités, Lien hypertexte, Date et heure et Booléen. Le résultat de la formule doit correspondre au type de données défini pour l'attribut calculé. Vous pouvez néanmoins utiliser des attributs de différents types de données dans la formule elle-même.
Lorsque des attributs présentant différents types de données sont utilisés dans la formule, le système convertit ces types en un seul et même type, celui que requiert l'opération ou la fonction utilisée dans la formule, avant l'exécution de l'opération ou de la fonction. Le résultat de la formule apparaît dans le même type de données. La conversion des types de données suit l'ordre de priorité suivant :
1. Chaîne : si au moins un argument de la formule présente le type de données Chaîne, tous les arguments sont convertis de manière à présenter le type de données Chaîne. (Les types Lien hypertexte et Date et heure sont automatiquement convertis en type Chaîne.)
2. Nombre réel avec unités : si au moins un argument de la formule présente le type de données Nombre réel avec unités, tous les arguments sont convertis de manière à présenter le type de données Nombre réel avec unités.
3. Nombre réel : si au moins un argument de la formule présente le type de données Nombre réel, tous les arguments sont convertis de manière à présenter le type de données Nombre réel.
4. Nombre entier : si au moins un argument de la formule présente le type de données Nombre entier, tous les arguments sont convertis de manière à présenter le type de données Nombre entier.
5. Booléen.
Par exemple, dans la formule attrA + attrB, si attrA correspond au type de données Chaîne et que attrB correspond au type de données Nombre réel, attrB est converti afin de correspondre au type de données Chaîne et d'être concaténé avec attrA. Si attrA a la valeur Résultat : et que attrB a la valeur 1,5, le résultat de la formule sera Résultat : 1,5.
De même, dans la formule attrC * attrD, si attrC correspond au type de données Nombre entier et que attrD correspond au type de données Nombre réel, attrC est converti afin de correspondre au type de données Nombre réel et le résultat correspond lui aussi au type de données Nombre réel.
Le système évalue la formule saisie lorsque l'attribut calculé est enregistré. Si le type de données du résultat de la formule ne correspond pas au type de données de l'attribut calculé, une erreur survient et la formule n'est pas enregistrée. Le type de données du résultat de la formule peut être converti, via la conversion du mode de spécification de la formule. Dans l'exemple suivant, <formule> correspond à la formule d'origine dont le type de données est converti.
Pour convertir une formule ayant pour résultat la conversion d'un type de données Booléen, Nombre entier, Nombre réel ou Nombre réel avec unités vers le type de données Chaîne, indiquez ce qui suit dans le champ Formule :
""+(<formule>)
Pour convertir une formule ayant pour résultat la conversion d'un type de données Booléen, Nombre entierou Nombre réel vers le type de données Nombre réel avec unités, indiquez ce qui suit dans le champ Formule :
unit("1.0000000000000")*(<formule>)
(Vous devez indiquer au moins 13 zéros pour conserver la précision du résultat d'origine).
Pour convertir une formule ayant pour résultat la conversion d'un type de données Booléen ou Nombre entier vers le type de données Nombre réel, saisissez ce qui suit dans le champ Formule :
1.0*(<formule>)
Pour convertir une formule ayant pour résultat la conversion d'un type de données Booléen vers un type de données Nombre entier, indiquez ce qui suit dans le champ Formule :
1*(<formule>)
Exemple : Calcul d'une valeur numérique
Utilisez les opérateurs et les noms internes des attributs pour générer des formules permettant de calculer la valeur d'attribut souhaitée. (Dans une formule, vous devez utiliser le Nom interne et non le Nom affiché d'un attribut).
Supposons que vous disposiez de l'attribut Coût total, qui correspond à la valeur de l'attribut Quantité multipliée par celle de l'attribut Coût unitaire, plus celle de l'attribut Frais de gestion. Vous pourriez alors appliquer la formule ci-après pour calculer la valeur de l'attribut Coût total :
(quantity*unitCost)+fee
Exemple : Combinaison de valeurs d'attribut non numériques
Les formules peuvent également servir à combiner des valeurs d'attribut non numériques.
Par exemple, si vous créez un attribut calculé appelé ID, vous pouvez combiner les valeurs des attributs Nom et Numéro relatifs au type en tant que valeur de l'attribut ID, en appliquant la formule suivante :
name+"("+number+")"
Cette opération donne lieu à une valeur du type MyDocument (0001A) pour l'attribut ID.
Fonctions prises en charge
* 
Il n'existe aucune fonction à valeurs multiples actuellement prise en charge pour les attributs calculés.
Les fonctions suivantes sont prises en charge :
Fonction
Description
isNull( )
Vérification des valeurs Null
unit( )
Convertir le type de données Chaîne en Nombre réel avec unités
str( )
Convertir le numéro en type de données Chaîne
abs( )
Valeur absolue ou grandeur
avg( )
Moyenne d'une liste de valeurs
sum( )
Somme d'une liste de valeurs
min( )
Valeur minimale d'une liste de valeurs
max( )
Valeur maximale d'une liste de valeurs
round()
Convertit un nombre à une décimale (nombre réel) en un nombre entier.
Lorsque la décimale est ,5, le nombre est arrondi au chiffre pair (par exemple, 30,5 est arrondi à 30 et 31,5 est arrondi à 32).
Pour les autres décimales, le nombre est arrondi au chiffre le plus proche (par exemple, 30,8 est arrondi à 31 et 33,4 est arrondi à 33).
mod()
Renvoie le reste d'un nombre divisé par un autre nombre. (Types de données Entier uniquement)
${}
Encapsule les noms internes d'attribut qui incluent des caractères spéciaux, afin qu'ils puissent être utilisés dans la formule. Tous les noms internes d'attribut peuvent être encapsulés, mais ceux qui incluent un tiret (-), le signe dollar ($) ou des crochets ([ ]) doivent l'être impérativement lorsqu'ils sont utilisés dans des formules. Par exemple, les attributs pourvus des noms internes my-attribute ou my[very$complex]-attribute peuvent être utilisés dans une formule lorsqu'ils sont encapsulés comme suit :
${my-attribute}
${my[very$complex]-attribute}
Si les attributs utilisés dans la section Exemple : Calcul d'une valeur numérique avaient des noms internes incluant des caractères spéciaux, la formule de l'attribut Coût total pourrait être la suivante :(${item-quantity}*${unit-cost})+${handling-fee}
Opérateurs pris en charge
Les opérateurs suivants sont pris en charge :
Opérateur
Description
+
Addition ; peut également être utilisé pour concaténer des chaînes
-
Soustraction
*
Multiplication
/
Division
( )
Parenthèses ouverte et fermée, qui indiquent une priorité différente dans l'ordre des opérations (celles qui sont entre parenthèses doivent être exécutées en premier)
" "
Guillemets doubles, qui indiquent que le contenu des guillemets est une chaîne littérale A l'exception des numéros, les caractères n'étant pas entourés de guillemets sont traités comme un nom d'attribut.
>
Supérieur à
<
Inférieur à
>=
Supérieur ou égal à
<=
Inférieur ou égal à
==
Egal à
!=
Différent de
^
Puissance ou exposant
&
ET
|
Ou
~
Excepté
^*
Ou exclusif
&&
ET
||
Ou
!
Excepté
? :
Opérateur conditionnel, qui indique le résultat lorsque la condition spécifiée est vraie ou fausse :
(condition) ? valeur en cas de condition vraie : valeur en cas de condition fausse
Par exemple, supposons qu'un type présente des attributs de longueur, de largeur et de forme, l'attribut de forme correspondant à un attribut calculé d'après la formule suivante :
(length>width) ? "longer" : "wider"
Si la valeur de l'attribut de longueur est plus importante que la valeur de l'attribut de largeur, l'attribut de forme se voit affecter une valeur longer. Si la valeur de l'attribut de longueur n'est pas plus importante que la valeur de l'attribut de largeur, l'attribut de forme se voit affecter une valeur wider.
%
Reste