Les attributs dynamiques sont des champs supplémentaires « évoluées ».
N’ayant pas de définition exacte de la part de Planisware, il faudra simplement retenir qu’un champ dynamique ou DA (dynamic attribute) est un attribut supplémentaire dont la valeur n’est pas sauvegardé en base et est créé depuis un script OJS dans lequel on a remplace son accesseur et mutateur.
En d’autres termes, la valeur retournée par ce champ dépendra d’un script OJS, et la valeur saisie dans ce champ sera traité là aussi par un script.

En OJS, il suffit d’instancier un nouvel objet de la classe objectAttribute :
var attr = new objectAttribute([TYPE], [NAME], [CLASS]);
attr.comment = [LIBELLE];
[TYPE]correspond au type de l'attribut. Ce peut être un type primitif comme NUMBER, BOOLEAN, STRING et DATE ou un type étendu tel que OpxProject, OpxResponsability ou d'autre class que vous auriez créé.
[NAME]représente le code Planisware de ce nouvel attribut. Comme bonne pratique, ajoutez le préfix "DA" pour signifier qu'il s'agit d'un attribut dynamique. Exemple : MY_PM_DA_XXXX.
[CLASS]définie la classe dans laquelle vous souhaitez ajouter l'attribut.
[LIBELLE]correspond au libelle/nom de votre attribut visible par les utilisateurs. La valeur peut correspondre à une clé texte pour permettre l'internationalisation de votre application Planisware:

Exemple :

var attr = new objectAttribute("String", "MY_PM_DA_CALC_PROJECT_NAME", "OpxProject");
attr.comment = "Nom du projet calculé";

En exécutant les lignes ci-dessus, un nouvel attribut de type “String” sera crée sur la classe “Projet”. Son libellé (définie sur la deuxième ligne du script) sera “Nom du projet calculé”.

Vous devez définir ensuite deux fonctions qui seront exécutées pour lire et pour modifier la valeur de votre attribut.

/**
 * Cette fonction est utilisée pour obtenir la valeur de l'attribut dynamique MY_PM_DA_CALC_PROJECT_NAME
 */
function get_CALC_PROJECT_NAME() {
    return this.CODE + "@" + this.MY_PM_AA_PROJECT_SUFFIX;
};
attr.reader = get_CALC_PROJECT_NAME; // Ici on remplace la méthode définie par défaut pour lire la valeur de l'attribut
/**
 * Cette fonction est utilisée pour modifier la valeur de l'attribut dynamique MY_PM_DA_CALC_PROJECT_NAME
 */
function set_CALC_PROJECT_NAME(input){

};
attr.modifier = set_CALC_PROJECT_NAME; // Ici on remplace la méthode définie par défaut pour modifier la valeur de l'attribut

Les quelques lignes ci-dessus vous permettent de redéfinir l’accesseur (méthode reader) et le mutateur (méthode modifier) de l’attribut. Cet attribut peut être ajouté dans un tableau ou sur un formulaire pour être manipulé par les utilisateurs.

Pour aller plus loin, il est possible de définir des arguments aux méthodes reader/modifier. Cela peut avoir son utilité si vous employer des méthodes génériques :
Soit les méthodes suivantes avec l’argument supplémentaire « type » :

function get_CALC_PROJECT_NAME(type){

}
function set_CALC_PROJECT_NAME(input, type){

};

Lors de l’affectation aux reader/modifier, vous devez employer la méthode « closure » afin de définir la valeur des attributs supplémentaires :
attr.reader = get_CALC_PROJECT_NAME.closure(“Mon argument”);
attr.modifier = set_CALC_PROJECT_NAME.closure(“Mon argument”);

Ainsi la valeur de l’attribut « type » sera « Mon argument ».

Dans un prochain article de la catégorie OJS, nous évoquerons les principes d’introspection offerts par Planisware…
Et comme à partir de demain débute la conférence utilisateurs Planiware, je vous souhaite à tous bonne conférence et au plaisir de vous y rencontrer.