Étendue et portée des variables
Chaque variable a un élément d’entrée compute-when (voir la capture d’écran ci-dessous), qui vous permet de contrôler l’étendue de la variable. Ceci signifie que vous pouvez contrôler quand et combien de fois la valeur de variable est calculée quand le mappage est exécuté. Vous ne devez pas connecter cette entrée dans de nombreux cas, mais il peut ête essentiel d’écraser le contexte par défaut ou d’optimiser la performance de mappage.
Les termes suivants sont pertinents pour la discussion sur l’étendue et le contexte des variables : subtree et variable value. Une sous-arborescence est un ensemble d’items/nœuds dans un composant cible et tous ses descendants : par exemple, un élément <Person> avec ses éléments enfant <FirstName> et <LastName>.
Une valeur variable signifie les données qui sont disponibles du côté sortie du composant variable.
•Pour des variables simples, il s'agit d'une séquence de valeurs atomiques dont le type de données est spécifié dans les propriétés de composant.
•Pour les variables complexes, il s'agit d'une séquence de nœuds de racine (du type spécifié dans les propriétés de composant), chacune incluant tous ses nœuds descendants.
La séquence des valeurs atomiques (ou nœuds) peut contenir un ou plusieurs éléments zéro. Cela dépend de ce qui est connecté du côté entrée de la variable, et des items de parents dans les composants source et cible.
« Compute-when » n'est pas connecté (défaut)
Si l'item d'entrée compute-when n'est pas connecté vers un nœud de sortie d'un composant de source, la valeur de variable est calculée à chaque fois qu'il est utilisé la première fois dans une sous-arborescence de cible soit directement par le biais d'un connecteur depuis le composant de variable vers un nœud dans le composant de cible, ou indirectement par le biais des fonctions. La même valeur de variable est aussi utilisée pour tous les nœuds enfants de cible dans la sous-arborescence.
La valeur de variable réelle dépend des connexions entre les items de parent des composants de source et de cible. Ce comportement par défaut est le même que celui des sorties complexes des fonctions régulières définies par l’utilisateur et les appels de fonction de service Web. Si la sortie de variable est connectée à plusieurs nœuds de cible non-liés, la valeur de variable est calculée séparément pour chacun d'entre eux. Cela peut produire des résultats différents dans chaque cas, parce que plusieurs connexions de parent influent sur le contexte dans lequel la valeur de la variable est évaluée.
« Compute-when » est connecté
En connectant un connecteur de sortie d'un composant source vers compute-when, la variable est calculée à chaque fois que cet item source est utilisé la première fois dans une sous-arborescence cible.
La variable agit comme si elle était un item enfant de l'item connecté à compute-when. Cela permet de lier la variable à un item de source spécifique. Concrètement, lors du runtime, la variable est réévaluée lorsqu'un nouvel item est lu depuis la séquence dans le composant de source. Cela est lié aux règles générales qui gouvernent les connexions dans MapForce : Pour chaque item source, un item cible est créé. Dans ce cas, compute-when donne l’instruction à MapForce de calculer la valeur variable pour chaque item source. Pour plus d’information, voir Règles et stratégies de mappage.
« Compute-once »
Si nécessaire, vous pouvez choisir de calculer la valeur de variable une fois avant chaque composants de cible, rendant la variable essentiellement une constante globale pour le reste du mappage. Pour ce faire, cliquer avec la touche de droite sur l'item compute-when et sélectionner Calculer une fois depuis le menu contextuel :
Lorsque vous changez l'étendue d'une variable vers compute-when=once, le connecteur d'entrée est supprimé de l'item compute-when, puisqu'une telle variable est uniquement évaluée une fois. Dans une fonction définie par l'utilisateur, la variable compute-when=once est évaluée à chaque fois que la fonction est appelée avant que le résultat de fonction réel soit évalué.
Parent-context
Ajouter un item parent-context peut être nécessaire, par exemple si votre mappage utilise plusieurs filtres et que vous nécessitez un nœud de parent supplémentaire pour les itérations. Pour plus de détails, voir Exemple :. Changer le contexte Parent. Pour ajouter un parent-context, cliquez avec la touche de droite sur le nœud racine (dans cet exemple, PersonList) et sélectionnez Ajouter parent- context depuis le menu contextuel. Cela ajoute un nouveau nœud, parent-context, à la hiérarchie existante.
Le contexte parent ajoute un nœud parent virtuel à la hiérarchie dans le composant. Cela vous permet d'itérer sur un nœud supplémentaire dans le même composant de source ou dans un composant de source différent.