Composants des fichiers de définition

Les définitions utilisées par le Centre de gestion pour déterminer le mode d'affichage d'objets tels que des outils, des objets métier ou des vues sont déterminées dans des fichiers XML de définition. Dans ces fichiers, chaque définition est constituée d'un ensemble d'éléments et d'attributs communs.

L'élément racine <Definitions> est présent dans chaque fichier XML de définition du Centre de gestion. Dans cet élément racine, chaque élément enfant direct est un élément de définition ou une déclaration d'image. Tous les autres types d'élément sont ignorés ou signalés comme erreur.

Les éléments de définition placés dans l'élément racine peuvent inclure différents sous-éléments et attributs afin de définir des informations pour afficher des outils, des objets métier, des vues, etc. Chaque définition doit être définie en tant qu'élément enfant direct de l'élément racine <Definitions>. Chaque élément de définition doit inclure l'attribut definitionName pour identifier la définition. Le nom d'élément de définition est le nom non qualifié de la définition de superclasse.

La valeur de l'attribut definitionName correspond au nom du module AMD qui génère la définition. La valeur definitionName et le nom de module AMD doivent inclure le chemin relatif du package et le nom simple de la définition. Par exemple, la valeur definitionName d'une propriété de case à cocher est "cmc/foundation/BaseCheckBox". "cmc/foundation" identifie le package de composants et "BaseCheckbox", le nom simple de la définition.

Avec l'attribut definitionName, les éléments et les attributs suivants peuvent être utilisés pour créer des définitions dans un fichier de définition.

Variables

Les variables sont définies dans une définition en incluant l'élément <variable>. Toutes les variables des définitions sont des variables d'instance. Si vous créez ou personnalisez une définition, vous pouvez définir des variables pour les définitions de classe et de singleton. Vous ne pouvez pas définir d'élément <variable> pour les définitions d'instance de classe. Lorsque vous déterminez une définition d'instance de classe, vous pouvez cependant préciser des valeurs pour des variables en configurant des attributs comme composants de l'élément de définition d'instance de classe. Le nom de l'attribut dans l'élément de définition d'instance de classe doit être identique au nom de variable.

Lorsque vous déterminez une définition de classe ou de singleton, vous pouvez préciser des valeurs pour des variables héritées, en configurant également des attributs comme composants de l'élément de définition. Le nom de l'attribut dans l'élément de définition doit être identique au nom de variable. Si vous placez la valeur d'attribut entre ${ et }, celle-ci est interprétée comme une expression. En cas de modification de la valeur de l'expression, la variable est automatiquement mise à jour. Vous ne pouvez pas utiliser la syntaxe de l'expression lors de la spécification des valeurs de variable pour les définitions d'instance de classe.

Lorsqu'une variable est référencée dans JavaScript, elle est accessible en tant que propriété d'une instance de définition (de classe ou de singleton). Si vous devez modifier la valeur d'une variable dans JavaScript, utilisez la méthode setVariable. Avec cette méthode, vous vous assurez que les événements se déclenchent correctement.

Les éléments <variable> ne peuvent pas avoir d'élément enfant et de corps. Les éléments <variable> peuvent inclure les attributs suivants :
Nom de l'attribut Description
name Nom de la variable.
type Type de la variable. Les variables peuvent être définies avec les types suivants :
  • string
  • boolean
  • number
  • expression
value Valeur de la variable. La valeur définie pour une variable dépend du type de cette variable.
initialValue Valeur initiale de la variable. Cette valeur n'est définie que lors de l'initialisation de la variable. Elle n'est pas mise à jour lorsque l'expression est modifiée.

Méthodes

Pour indiquer des méthodes dans des définitions, incluez l'élément <method>. Cet élément peut être déclaré comme élément enfant de définitions de classe ou de singleton. Vous ne pouvez pas inclure d'élément <method> dans une définition d'instance de classe.

Dans une sous-classe, vous pouvez remplacer une méthode en déclarant une méthode de même nom. Utilisez la syntaxe suivante pour appeler la méthode remplacée à partir de la méthode de remplacement. Les arguments transmis à la méthode remplacée sont les mêmes que ceux transmis à la méthode de remplacement.
this.inherited(arguments)
Le corps d'un élément <method> est le corps JavaScript de la méthode. Les éléments <method> ne peuvent pas avoir d'élément enfant, mais ils peuvent inclure les attributs suivants :
Nom de l'attribut Description
name Nom de la méthode.
args Liste (séparée par des virgules) de noms d'argument.

Gestionnaires

Les gestionnaires sont indiqués dans les définitions à l'aide de l'élément <handler>. L'élément <handler> peut être déclaré comme élément enfant de définitions de classe ou de singleton. Vous ne pouvez pas inclure d'élément <handler> dans une définition d'instance de classe.

Le corps d'un élément <handler> est le corps JavaScript du gestionnaire. Les éléments <handler> ne peuvent pas avoir d'élément enfant, mais ils peuvent inclure les attributs suivants :
Nom de l'attribut Description
name Nom de l'événement pour la variable. Toutes les variables sont associées à un nom d'événement. Le nom d'événement est "onVariableName", où VariableName représente le nom de la variable.
eventSource Expression identifiant la source d'événement. N'incluez pas cet attribut si la source d'événement est l'objet en cours.

Regroupements de ressources

Un regroupement de ressources est déclaré comme définition d'instance de classe. La définition de classe de base des regroupements de ressources est la définition de classe cmc/foundation/ResourceBundle.

Le fragment de code suivant montre comment déclarer un regroupement de ressources dans un fichier de définition :
<ResourceBundle baseName="com.ibm.commerce.foundation.client.lobtools.properties.FoundationLOB" 
definitionName="cmc/foundation/FoundationResources" singletonDefinition="true"/>
Lorsque vous référencez une chaîne de regroupement de ressources dans une définition, vous devez inclure le regroupement de ressources dans un élément de dépendance. L'exemple de code suivant montre comment définir un regroupement de ressources dans un élément de dépendance :
<dependency localName="pageLayoutResources" moduleName="cmc/pagelayout/PageLayoutResources"/>
Si vous déterminez des définitions de classe ou de singleton, faites référence aux chaînes de regroupement de ressources en identifiant d'abord le singleton de regroupement de ressources. Ensuite, indiquez l'instance de la clé de regroupement de ressources ainsi que la propriété de chaîne. Le code suivant montre comment faire référence à des chaînes de regroupement de ressources pour les définitions de classe et de singleton :
pageLayoutResources.Singleton.layoutSlotTooltip.string
Lorsque vous déterminez une définition d'instance de classe, vous pouvez préciser la valeur d'une variable héritée définie dans un regroupement de ressources en respectant la syntaxe simplifiée suivante : variableName="${<resourceBundleModuleLocalname>.<resourceBundleKeyName>}" Le code suivant montre comment définir une variable avec cette syntaxe :
promptText="${pageLayoutResources.pageLayoutAssignmentList}"
Remarque : Vous n'avez pas besoin de définir d'instance de ResourceBundleKey pour toutes les clés. Le servlet de service de module associé à la structure du Management Center recherche les clés dans le regroupement de ressources spécifié et inclut automatiquement les instances ResourceBundleKey dans le module AMD généré.

Eléments de définition enfant

Les définitions sont hiérarchiques. Vous pouvez déterminer pour une définition des définitions enfant implicitement créées en même temps que l'instance de définition de base (parent). Les éléments enfants de définition sont similaires aux éléments de définition. Le nom de l'élément doit être le nom d'une classe. Si la classe est introuvable dans le package par défaut, "cmc/foundation", l'attribut de package doit être indiqué pour identifier le package. D'autres attributs peuvent être utilisés pour fournir des valeurs pour les valeurs des variables héritées. Les éléments enfants d'un élément de définition enfant ne doivent pas comporter d'élément <dependency>. Toutes les dépendances doivent être spécifiées comme élément enfant direct de l'élément de définition de base.

N'indiquez pas l'attribut classDefinition ou singletonDefinition pour les éléments de définition enfant. Les attributs de variable associés aux éléments enfants de définition de classe ou de singleton suivent les mêmes règles que les éléments de définition de classe et de singleton.

Vous pouvez utiliser la syntaxe ${ } pour indiquer des valeurs d'expression pour les variables. Les attributs de variable associés aux éléments enfants de définition d'instance de classe suivent les mêmes règles que les éléments de définition d'instance de classe. Vous ne pouvez pas utiliser la syntaxe générale des expressions pour définir des variables, mais vous pouvez employer la syntaxe simplifiée des clés de regroupement de ressources.

Les éléments enfants de définition peuvent recevoir des noms à l'aide de l'attribut name. Cette variable appartient à l'instance de définition de base et peut être utilisée pour faire référence à des instances de définition enfant par leur nom. Le parent d'une instance de définition se trouve dans une propriété nommée "parent".

Par exemple, pour limiter la largeur d'une instance de définition à la largeur de l'instance de définition parent moins quatre pixels, déclarez width="${this.parent.width – 4}". Pour limiter la largeur d'une instance de définition à la largeur d'une autre instance de définition enfant nommée "a", déclarez width="${this.parent.a.width}".

Déclarations d'image

Les déclarations d'image sont utilisées dans les fichiers de définition pour associer des noms simples à des fichiers image (ou à des ensembles de fichiers image) pour représenter les différents états d'une image. Par exemple, une image peut posséder différents états selon le mode d'interaction du professionnel avec l'image (par exemple, mode normal, survol et sélection). Les déclarations d'image peuvent s'appliquer aux images dotées de l'extension de fichier .png, .gif ou .jpg.

Si l'image est constituée d'une image unique, l'élément <Image> peut être déclaré comme élément enfant de l'élément racine <Definitions> dans un fichier de définition. Les éléments <Image> incluent les attributs suivants :
Nom de l'attribut Description
src URL du fichier image.
name Nom de l'image. Ce nom doit identifier l'image de manière unique.
Si une image possède différents états (ce qui nécessite plusieurs images), <ImageSet> peut être utilisé pour inclure toutes les images. Cet élément doit inclure un attribut name qui définit l'ensemble d'images de manière unique. Dans l'ensemble d'images, chaque image doit être définie dans des éléments enfant <Image> distincts de l'élément <ImageSet>. Le Management Center utilise la variable currentImage pour sélectionner l'image appropriée à employer dans un ensemble d'images. Dans un ensemble d'images, le premier élément <Image> répertorié est considéré comme l'image "1". Vous n'avez pas besoin d'inclure un attribut name pour chaque image d'un ensemble d'images.

Modules AMD prédéfinis

Un certain nombre de zones de module AMD (Asynchronous Module Definition) sont disponibles pour utilisation dans des fichiers de définition. Ces modules sont directement codés en JavaScript et ne sont pas définis dans un fichier XML de définition. Ces modules peuvent vous aider à créer vos propres définitions dans des fichiers de définition.

Le module cmc/foundation/Node définit la classe de base de toutes les définitions. Vous pouvez utiliser les variables suivantes avec la classe Node :
Nom de variable Type Description
UID number Identificateur unique du module. Cette propriété est en lecture seule.
module object Objet du module. Cette propriété est en lecture seule.
moduleName string Nom du module. Cette propriété est en lecture seule.
id string Identificateur global unique permettant de créer une instance unique de ce noeud. Ne définissez cette variable que pour les définitions pouvant aboutir à une instance unique. L'objet peut être accessible par son nom en référençant la propriété nommée dans le module cmc/foundation/SingletonRegistry.
classroot Node Lorsqu'une définition de classe est instanciée, l'objet racine est accessible par tous les descendants déclarés via la propriété classroot. Cette propriété est en lecture seule.
name string Lorsqu'une définition enfant est instanciée, l'objet enfant est accessible sous la forme d'une propriété de l'objet parent via le nom spécifié.
defaultplacement string Nom d'une vue de définition enfant à laquelle les nouveaux enfants doivent être associés. Il s'agit d'un immediateParent de la nouvelle instance enfant.
initstage string Indication de la structure précisant le mode d'initialisation du noeud. Les valeurs suivantes sont reconnues par la structure :
  • normal (par défaut) – initialiser le nœud avec son parent
  • defer – initialiser le nœud uniquement sur l'appel explicite de la méthode completeInstantiation.
placement string Placement du noeud.
inited boolean Cette variable indique si le noeud est initialisé. Cette propriété est en lecture seule.
isinited boolean A l'instar de la variable inited, cette variable indique si le nœud est initialisé. Cette propriété est en lecture seule.
parent Node Noeud parent de l'instance.
immediateParent Node Noeud parent direct de l'instance.
childNodes Tableau de Node Tableau d'instances de noeud enfant.
Vous pouvez également utiliser les méthodes suivantes avec la classe Node :
Nom de la méthode Arguments Description
completeInstantiation Aucun Utilisez cette méthode pour terminer l'initialisation d'un nœud créé avec initStage="defer".
init Aucun Remplacez cette méthode afin de fournir une logique d'initialisation pour le noeud. Assurez-vous que la méthode de remplacement inclut un appel à this.inherited(arguments)
destroy Aucun Remplacez cette méthode pour libérer les ressources externes utilisées par le noeud. Assurez-vous que la méthode de remplacement inclut un appel à this.inherited(arguments)
setVariable variableName– le nom de la variable. value – la nouvelle valeur de la variable. Utilisez cette méthode pour définir les valeurs des variables de manière explicite en JavaScript. Avec cette méthode, vous pouvez vous assurer que les gestionnaires d'événements sont appelés correctement.