Etapes Modifier les données

Les étapes Modifier les données fournissent une zone de texte de format libre dans laquelle vous pouvez spécifier des commandes pour contrôler le traitement du script.

Entrez les commandes de script dans le champ Texte de modification de données. Cliquez sur l'icône adjacente afin d'ouvrir une fenêtre offrant plus de place pour la définition de l'étape Modifier les données.

En général, la syntaxe disponible dans les zones de modification des données simule les commandes disponibles dans les types d'étape explicites. Toutefois, certaines commandes sont disponibles uniquement dans les zones de modification de données. Par exemple, les deux commandes structurées : For et If.

Remarque :
Tous les types d'étape APT ne sont pas pris en charge avec la syntaxe de modification des données. Pour plus d'informations sur les commandes de modification des données et pour des exemples, voir les détails ci-dessous.

Les rubriques de cette section fournissent des détails sur la syntaxe prise en charge dans le type d'étape Modifier les données.

Commentaires

Vous pouvez placer des commentaires dans un script ; pour ce faire, placez une double barre oblique (//) dans les deux premiers caractères de l'étape de modification de données. Exemple :

// 
// quit with error
//
if ("not(customer/securityEnabled)")
terminate with error (8000, 1001 %1="customer/id" %2='not allowed');
end-if;

Variables temporaires

Des variables temporaires peuvent être déclarées dans tous les types de script. Il y est fait référence avec un signe dollar comme premier caractère ("$"). Cependant, elles ne fonctionnent pas de la même façon dans tous les types de script :

  • Dans les scripts APT, les variables temporaires persistent d'un script APT à l'autre (voir Exécution de script et transfert de contrôle) ; vous pouvez donc les utiliser pour faire communiquer des scripts APT.

  • Les variables temporaires ne peuvent pas être transmises d'un script APT à un script de service ou de plug-in. Seuls des éléments de zone de données peuvent être transmis entre ces types de script.

  • Dans les scripts de service et de plug-in, les variables temporaires ne persistent que pour la durée du script où elles sont déclarées. Par conséquent, des variables temporaires ne peuvent pas être transmises entre des scripts de plug-in et des scripts de service ; seules des variables globales, des variables de contexte et des éléments de zone de données peuvent l'être.

Déclaration, initialisation, attribution de valeurs par défaut à des variables temporaires

Avant toute utilisation, une variable temporaire doit être déclarée ou initialisée avec la valeur appropriée. La méthode classique de déclaration d'une variable consiste à y transférer des données à l'aide de l'instruction move, par exemple.

move "0" to $index;
Documentation de référence :
Pour plus d'informations sur la déclaration implicite d'une variable temporaire à l'aide d'une instruction move, voir Transfert à l'aide d'une variable temporaire.

Pour les scripts APT, comme indiqué ci-dessus, des variables temporaires peuvent être transmises d'un script APT à l'autre. De ce fait, il est souvent fait référence dans un script APT à une variable temporaire qui doit avoir été initialisée dans un script APT précédent. Cependant, si pour une raison quelconque la variable n'a pas été initialisée dans un script APT précédent, y faire référence engendre une erreur. C'est pourquoi il est judicieux d'utiliser l'instruction default pour initialiser les variables temporaires qui n'ont pas encore été créées/initialisées.

  • L'instruction ci-dessous initialise la variable temporaire $InputAction, mais uniquement si elle n'a pas encore été initialisée :

    default $InputAction;
  • L'instruction ci-dessous affecte à la variable temporaire $InputAction la valeur "read", mais uniquement si elle n'a pas encore été initialisée :

    default $InputAction as 'read';
Remarque :
Vous devez veiller à ne pas utiliser de mots-clés réservés pour définir les variables dans les scripts. Le tableau ci-dessous donne la liste des mots-clés réservés.
Mot-clé
add
as
asError
bpa
branch
data
declareBO
declareBS
declareDA
declareMap
declareSS
default
delete
edit
element
else
end-edit
end-for
end-if
error
escape
evaluate
fastAdd
fastUpdate
for
goto
if
in
invokeBO
invokeBS
invokeMap
invokeSS
label
map
move
navigate
navigateAndReloadDashboard
null
page
performScript
popup
read
readWithoutVersion
replace
suppress
target
terminate
to
transferControl
update
using
warn
with

Variables de contexte

Les variables de contexte ne sont disponibles que dans les scripts de service. Elles y restent disponibles pour toute la durée du script de service et de tout ce qu'il appelle. Par conséquent, vous pouvez les utiliser pour communiquer des informations à un schéma ou un script de service de niveau inférieur. Il y est fait référence avec un double signe dollar comme premiers caractères ("$$").

Remarque :
Les variables de contexte étant disponibles pour les scripts de niveau inférieur, on les appelle parfois variables globales ou variables d'environnement global. Il ne faut toutefois pas les confondre avec les variables globales.

Déclaration, initialisation, attribution de valeurs par défaut à des variables de contexte

Avant toute utilisation, une variable de contexte doit être déclarée ou initialisée avec la valeur appropriée. La méthode classique de déclaration d'une variable consiste à y transférer des données à l'aide de l'instruction move, par exemple.

move 'context variable' to $$contextVariable;
Documentation de référence :
Pour plus d'informations, voir Transfert à l'aide d'une variable de contexte.

Instruction move

L'instruction de transfert, move, copie une valeur source dans une cible. Le tableau ci-dessous présente les différentes options prises en charge dans l'instruction move.

Instruction Description de l'exemple Exemples de syntaxe
Transfert dans un élément

move "xpath" to "xpath";

Remarque :
Une expression XPath est encadrée par des guillemets.
Instruction move avec référence XPath simple.
move "acct/totalBalance" to 
"parm/formattedValue";
Instruction move avec fonction de concaténation XPath.
move "concat(person/firstName, ',', 
person/lastName)" 
to "parm/fullName";
Instruction move avec fonction substring-before XPath.
move "substring-before(parm/fullName,',')" 
to "person/firstName";
Instruction move avec fonction substring-after XPath.
move "substring-after(parm/fullName,',')" 
to "person/lastName";
Instruction move avec fonction substring XPath.
move "substring(parm/date,1,4)" 
to "parm/year";
Transfert dans un élément

move 'literal' to "xpath";

Remarque :
Une valeur littérale est encadrée par des apostrophes.
Instruction move avec utilisation d'une chaîne littérale.
move 'okay for mailing' 
to "account/preferences[type="mail"]/text";
Transfert dans un élément

move 'Boolean' to "xpath";

Instruction move avec utilisation d'une valeur booléenne comme chaîne littérale.
if ("account/balance > 0") 
  move 'true' 
  to "account/hasDebitBalance"; 
end-if;
Transfert d'une expression avec un résultat booléen. A noter que le filtre dans l'exemple se trouve dans un noeud de groupe.
<schema>
  <account>
    <hasDebitBalance type="boolean"/>
    <balance/>
  </account>
</schema>

move "boolean(account[balance>0])" 
to "account/hasDebitBalance";
Transfert dans un groupe

move "xpath" to "xpath";

Transfert d'un ensemble d'éléments d'un groupe à l'autre.

Le système fait correspondre le niveau initial de noms d'élément et les noms de groupe/liste entre le schéma source et le schéma cible. Pour les listes et les groupes, le comportement par défaut consiste à déplacer tous les éléments du groupe/de la liste source vers le groupe/la liste cible (même s'ils ne sont pas définis dans le groupe/la liste cible).

Vous pouvez utiliser le service fonctionnel F1-MoveByName pour un contrôle plus granulaire du déplacement (sans avoir à définir chaque instruction move individuelle).

move "account/custInfo" to "person";

Cette instruction équivaut à la suivante :

move "account/custInfo/*" to "person/*";

Transfert à l'aide d'une variable temporaire

Lorsque le transfert s'effectue à destination de la variable temporaire, celle-ci n'est pas mise entre guillemets.

move "xpath" to $variable;

move "count(Person/names/personName) 
+ count(Person/ids/personId)" 
to $PersonChildCount;
Lorsque le transfert s'effectue à partir de la variable temporaire, celle-ci est mise entre guillemets.

move "$variable" to "xpath";

move "$AccountBalance" 
to "parm/formattedValue";

Transfert à l'aide d'une variable de contexte

move "xpath" to $$variable;

move $$variable to "xpath";

Les références aux variables de contexte, source ou cible, ne prennent pas de guillemets.
move 'context value' 
to $$contextVariable;
// 
// here, we move from a context variable.
move $$contextVariable 
to "MarketMessage/sender";
Transfert à l'aide d'un emplacement dynamique

move "xpath" | 'literal' to evaluate("xpath" | $variable);

move evaluate("xpath" | $variable) to "xpath" | $variable;

L'instruction evaluate permet de dériver dynamiquement l'emplacement source ou cible d'une variable ou d'un emplacement d'élément de schéma.
move 'literal' 
to evaluate("schemaLocation"); 
//
move "schemaLocation" 
to evaluate($Variable);
move evaluate("schemaLocation") 
to $Variable;
// 
move evaluate($Variable) 
to "schemaLocation";
Transfert avec échappement

move escape("xpath" | $variable) to "xpath" | $variable;

Le transfert avec échappement n'est disponible que pour les scripts de service et les scripts de plug-in. L'instruction escape recherche du contenu HTML dans la valeur de texte source et effectue un échappement, autrement dit remplace les caractères de type HTML par des caractères spéciaux qui ne sont pas interprétés comme du HTML. Ainsi, quand le texte est affiché dans le cadre d'un élément HTML, il apparaît en tant que texte ordinaire.
Remarque :
Vous ne devez utiliser cette fonction que si le texte doit être affiché dans le cadre d'un élément HTML et qu'il est susceptible de contenir des caractères de type HTML ou même du HTML malveillant qui ne doivent pas être interprétés comme du HTML. Les caractères d'échappement spéciaux, s'ils sont à tort affichés à l'aide d'un élément non HTML, sont visibles dans le texte. Pour plus d'informations sur la définition d'un élément pour l'affichage d'un contenu HTML, voir Attributs et fonctions de matrice IU.
move escape("schemaLocation") 
to $Variable;
// 
move escape($Variable) 
to "schemaLocation";
Transfert de la valeur NULL

move null to "xpath";

La syntaxe spéciale move null permet d'enlever des informations du document d'instance XML. A noter que vous pouvez indiquer dans l'expression XPath un nom de noeud ou un nom de groupe. Si vous indiquez un nom de groupe, le groupe et tous ses éléments enfant seront éliminés du traitement.

Enlever un noeud et tous ses noeuds enfant :

if ("boolean(customer/securityEnabled)")
  goto updateInfo;
else
  move null to "customer"; 
end-if;   

Enlever tous les noeuds enfant d'un noeud de groupe avec le suffixe "/*" :

if ("boolean(customer/securityEnabled)")
  move null to "customer/*";
end-if;

Instruction goto

L'étape de modification des données prend en charge une fonctionnalité analogue au type d'étape Aller à. La syntaxe est la suivante : goto label;, l'étiquette (label) représentant un autre emplacement dans le champ de texte de modification de données (identifié par cette étiquette) ou une autre étape dans le script.

L'exemple ci-dessous illustre le passage à un autre emplacement de la même étape, identifié par l'étiquette addSpouse.

if ("string(parm/spouse/name) != $BLANK")
  goto addSpouse;
end-if;
addSpouse: invokeBO 'Person' using "parm/spouse" for add;

L'exemple ci-dessous illustre le passage à une autre étape dans le même script. Le numéro de séquence de l'étape est utilisé comme étiquette.

if ("string(parm/spouse/name) != $BLANK")
  goto 110;
end-if;
.
.
.
110: invokeBO 'Person' using "parm/spouse" for add;

Instruction de branchement conditionnel

L'étape de modification des données prend en charge une fonctionnalité analogue au type d'étape Branchement conditionnel. La syntaxe est la suivante : branch ("xpath") goto label else label; où :

  • La condition XPath de l'instruction branch doit avoir un résultat booléen : True ou False.

  • Les cibles des instructions goto et else sont des étiquettes représentant un autre emplacement dans le champ de texte de modification de données (identifié par cette étiquette) ou une autre étape dans le script.

L'exemple ci-dessous utilise les étiquettes addSpouse et addAccount

branch ("string(parm/spouse/name) != $BLANK") goto addSpouse else addAccount;

Instruction if

L'instruction if est similaire à l'instruction de branchement conditionnel. L'une ou l'autre peut être utilisée pour structurer la logique du script. L'instruction if peut éventuellement être accompagnée d'une instruction else ; elle doit obligatoirement se conclure par une instruction end-if.

Remarque :
Cette instruction est un exemple d'instruction non représentée en tant que type d'étape distinct. Elle n'est disponible que dans le texte de modification de données.

La syntaxe est la suivante : if ("xpath") else end-if;. La condition XPath doit avoir un résultat booléen : True ou False. Ci-dessous figurent quelques exemples.

Exemple avec XPath contenant une condition logique simple.

if ("string(parm/spouse/name) != $BLANK")
  //
  // Create spouse since spouse name present
  goto addSpouse;
else
  //
  // Create account without spouse
  goto addAccount;
end-if;

Exemple avec XPath contenant une condition complexe.

if ("string(parm/spouse/name) != $BLANK and string(parm/hasSpouse) = true or boolean(parm/requireSpouse)")
  //
  // Create spouse since spouse name present
  goto addSpouse;
end-if;

Exemple d'une succession d'instructions visant à traiter les différentes valeurs possibles d'un champ.

if ("parm/rowCount = 0")
  //
  // no rows found
  goto quit;
end-if;
if ("parm/rowCount = 1")
  //
  // one row found
  goto process;
end-if;
if ("parm/rowCount > 1")
  //
  // more than one row found
  goto quit;
end-if;
quit: terminate;

Le XPath ci-dessous affiche une valeur booléenne selon l'existence du noeud. Dans cet exemple, si le noeud existe dans le document d'instance XML en cours de traitement, le résultat de l'évaluation de l'instruction est True. Si aucun élément n'est trouvé, le résultat de l'évaluation de l'instruction est False.

Remarque :
Attention, lorsque des noeuds XPath sont traités comme des variables booléennes, le résultat de l'évaluation pour un noeud vide est True. Seul un noeud manquant renvoie False.
if ("boolean(parm/spouse/name)")
  goto addSpouse;
else
  //
  // Create account without spouse
  goto addAccount;
end-if;
 
if ("not(parm/spouse/name)")
  //
  // Create account without spouse
  goto addAccount;
else
  goto addSpouse;
end-if;

Instruction for

L'instruction for crée une liste de noeuds ou de valeurs en fonction de l'expression XPath. Si vous spécifiez un noeud de liste, chaque noeud enfant de la liste, ainsi que son contenu, sera disponible dans la boucle. Si vous spécifiez directement un noeud enfant, seule une liste de valeurs sera disponible dans la boucle.

Remarque :
Pour plus d'informations sur la création de nouvelles entrées dans une liste, voir l'exemple de création d'une nouvelle instance de liste.
Remarque :
Cette instruction est un exemple d'instruction non représentée en tant que type d'étape distinct. Elle n'est disponible que dans le texte de modification de données.

La syntaxe est la suivante : for ($variable in "xpathList") end-for;. La condition XPath doit avoir un résultat booléen : True ou False.

Les exemples qui suivent sont basés sur le schéma ci-dessous :

<schema>
  <SAList type="list">
    <id/>
    <balance/>
  </SAList>
  <SAContributor type="list">
    <id/>
  </SAContributor>
</schema>

Exemple où un noeud de liste est spécifié dans l'expression XPath et où tous les noeuds enfant sont disponibles pour traitement.

move "0" to $AccountBalance;
move "0" to $index;
for ($SAList in "SAList")
    move "$SAList/balance + $AccountBalance" to $AccountBalance;
    //
    // keep track of each SA contributing to the balance in the SA Contributor list
    move "1 + $index" to $index;
    move "$SAList/id" to "SAContributor[$index]/id";
end-for; 

Exemple où un noeud enfant est spécifié dans le noeud de liste dans l'expression XPath. Seules les valeurs de ce noeud sont disponibles pour traitement.

move "0" to $AccountBalance;
for ($SABalance in "SAList/balance")
    move "$SABalance + $AccountBalance" to $AccountBalance;
end-for;

Exemple illustrant l'utilisation d'un filtre pour limiter les lignes sélectionnées par la boucle for.

move "0" to $AccountDebitBalance;
for ($SAList in "SAList[Balance>0]")
    move "$SAList/balance + $AccountDebitBalance" to $AccountDebitBalance;
end-for; 

Exemple illustrant l'utilisation d'un filtre avec la spécification de noeuds enfant.

move "0" to $AccountCreditBalance;
for ($SABalance in "SAList[Balance<0]/balance")                 
    move "$SABalance + $AccountCreditBalance" to $AccountCreditBalance;                
end-for;

Traitement des listes

Cette section fournit des détails sur le traitement des listes. Les exemples de la section s'appuient sur le schéma suivant :

<schema>
  <parm type="group">
    <name/>
  </parm>
  <Person type="group">
    <names type="list">
      <type/>
      <name/>
    </names>
  </Person>
</schema>

Référence à un élément de liste. Vous pouvez transférer une valeur dans une instance de liste particulière en faisant référence à un noeud d'identification de la liste dans un filtre. La syntaxe est la suivante : move "xpath" to "xpathList[filter]/element"; Exemple :

move "parm/name" to "Person/names[type='main']/name";

Création d'une nouvelle instance de liste. Une notation spéciale est utilisable dans la partie cible d'une instruction move pour signifier qu'une nouvelle instance de liste doit être créée. Le "+" indique au processeur de script qu'une nouvelle instance de liste doit être créée pour l'élément cible. La syntaxe est la suivante : move "xpath" to "+xpathList"; Exemple :

move "parm/name" to "Person/+names/name";

Suppression d'une instance de liste. Une entrée de liste XML peut être supprimée dans la base de données en transférant l'attribut d'action "delete" dans le nom de l'élément. Pour qu'une entrée de liste soit supprimée dans la base de données, l'attribut action="delete" doit être présent dans le noeud cible et il doit y avoir ensuite une interaction de mise à jour d'objet métier. La syntaxe est la suivante : move 'delete' to "xpathList@action"); Exemple :

if ("parm/action = 'd'") 
    move "0" to $index;
    for ($CCList in "CCList")
        move "1 + $index" to $index;
        if ("$CCList/id = parm/id")
            move 'delete' to "CCList[$index]@action";
            goto update;
        end-if;
    end-for;
end-if;

Le XML résultant est le suivant :

<root>
  <CCList>
    <id>9876538976</id>
    <balance>309.98</balance>
  </CCList>
  <CCList action="delete">
    <id>4321125899</id>
    <balance>87.45</balance>
  </CCList>
</root>
Remarque :
L'utilisation de l'attribut d'action pour supprimer une instance de liste est risquée si des interactions d'objet métier itératives sont requises. Le document XML contenant l'instance de liste à supprimer ne sera pas modifié après une interaction d'objet métier réussie, ce qui signifie qu'il continuera à contenir l'instance de liste bien que celle-ci n'existe plus. Pour résoudre ce problème, il est impératif de relire l'objet métier après toute mise à jour d'objet métier où l'attribut d'action "delete" a été utilisé.
Remarque :
Il existe une alternative à l'utilisation de l'attribut "delete" décrite ici : l'utilisation de l'action d'objet métier replace. Cette alternative évite le problème mentionné ci-dessus d'informations périmées dans les documents de requête après une mise à jour d'objet métier.

Fonctions de traitement de liste

XPath offre plusieurs fonctions utiles pour le traitement des listes, notamment count, sum et last.

Les exemples qui suivent sont basés sur le document XML ci-dessous :

<xml>
  <ft>
    <type>bill</type>
    <date>20100101</date>
    <amt>30.30</amt>
    <cat>tax</cat>
  </ft>
  <ft>
    <type>adj</type>
    <date>20100301</date>
    <amt>20.20</amt>
    <cat>int</cat>
  </ft>
  <ft>
    <type>bill</type>
    <date>20100201</date>
    <amt>10.10</amt>
    <cat>tax</cat>
  </ft>
</xml>

Exemple de fonction sum. La syntaxe est la suivante : move "sum(xpathList/element)" to $variable; Cet exemple fait la somme du solde total.

move "sum(ft/amt)" to $TotalBalance;

Exemple de fonction sum avec un filtre pour obtenir un sous-total. Cet exemple fait la somme du solde des entrées dont la catégorie est "tax".

move "sum(ft[cat='tax']/amt)" to $TaxBalance;

Exemple de fonction count. La syntaxe est la suivante : move "count(xpathList)" to $variable; Cet exemple compte les entrées FT de la liste.

move "count(ft)" to $TranCount;

Exemple de fonction last, permettant de trouver la dernière entrée. La syntaxe est la suivante : move "last(xpathList)" to $variable; Cet exemple trouve le dernier montant dans la liste FT.

move "ft[last()]/amt" to $LastAmount;

Déclaration et appel d'objets basés sur schéma

Vous pouvez appeler un objet métier, un service fonctionnel ou un script de service dans l'étape de modification de données. Pour que l'appel dynamique soit pris en charge, un nom de zone de données dynamique peut être déclaré.

Le schéma déclaré peut être un schéma d'objet métier (BO), un schéma de service fonctionnel (BS), un schéma de script de service (SS), un schéma de zone de données (DA) ou un schéma de matrice IU. L'instruction de déclaration varie selon le type du schéma, mais la syntaxe est analogue.

  • declareBO 'BO Name' | $variable | "xpath" as 'DynamicDataArea';

  • declareBS 'BS Name' | $variable | "xpath" as 'DynamicDataArea';

  • declareSS 'SS Name' | $variable | "xpath" as 'DynamicDataArea';

  • declareDA 'DA Name' | $variable | "xpath" as 'DynamicDataArea';

  • declareMap 'Map Name' | $variable | "xpath" as 'DynamicDataArea';

Lors de l'appel d'un objet métier, d'un service fonctionnel ou d'un script de service, le nom de l'objet peut être spécifié sous forme de littéral ou il peut s'agir d'une valeur contenue dans un élément ou une variable. Pour chaque appel (invoke), vous devez fournir une référence XPath à un nom de groupe.

Lors de l'appel d'un objet métier, une action doit être indiquée. La syntaxe est la suivante : invokeBO 'BO Name' | $variable | "xpath" using "xpath" for action;. Les actions valides sont les suivantes :

  • read. Cette action lit la vue actuelle des données de l'objet métier.

  • add. Cette action ajoute l'objet, puis lit et renvoie la vue résultante de l'objet métier.

  • fastAdd. Cette action ajoute l'objet, mais n'effectue pas ensuite de lecture pour renvoyer la vue résultante de l'objet métier. Cette option est préférable à un ajout pour améliorer les performances s'il n'y a pas de raison de lire à nouveau l'enregistrement.

  • update. Cette action met à jour l'objet, puis lit et renvoie la vue résultante de l'objet métier. Elle effectue une fusion des informations spécifiées dans le document XML de requête de l'instruction invoke avec les données existantes de l'objet métier. Avec cette action, le script peut se contenter d'indiquer les éléments modifiés.

  • fastUpdate. Cette action met à jour l'objet, mais n'effectue pas ensuite de lecture pour renvoyer la vue résultante de l'objet métier. Cette option est préférable à une mise à jour pour améliorer les performances s'il n'y a pas de raison de lire à nouveau l'enregistrement.

  • delete. Cette action supprime l'objet.

  • replace. Cette action est une alternative à l'action update. Elle remplace complètement les données existantes de l'objet métier par les informations figurant dans le document de requête. En général, l'action replace est utilisée lorsque l'objet métier contient une liste car il est plus simple de remplacer toutes les instances d'une liste que de tenter une fusion, ce qui nécessite une logique spéciale pour supprimer une instance de liste explicitement.

    Remarque :
    L'action replace doit être utilisée lorsque la fonctionnalité de matrice IU est utilisée pour importer un fichier CSV.
    Remarque :
    L'action Replace n'est pas prise en charge à l'heure actuelle pour un objet de maintenance tenu à jour dans une page "fixe" qui utilise une métaphore de liste pour afficher simultanément tous les enregistrements dans la page. Devise est un exemple de ce type de page.

Exemples :

invokeBO 'BusinessObject' using "dataArea" for fastAdd;
 
invokeBO $variableBO using "dataArea" for fastUpdate;
 
invokeBO "daName/boElement" using "dataArea" for replace;

Pour les services fonctionnels et les scripts de service, la syntaxe de l'instruction invoke est similaire. Le service fonctionnel/script de service est spécifié ainsi que la référence XPath au nom de groupe :

  • invokeBS 'BS Name' | $variable | "xpath" using "xpath";

  • invokeSS 'SS Name' | $variable | "xpath" using "xpath";

Les exemples présentés utilisent l'instruction invokeBS ; ils seraient similaires avec l'instruction invokeSS.

invokeBS 'BusinessService' using "dataArea";
 
invokeBS $variableBS using "dataArea";
 
invokeBS "daName/bsElement" using "dataArea";

Avertissements sur objets métier A noter que dans le cas des scripts APT, les instructions invoke peuvent également définir le traitement des avertissements.

Syntaxe Description Exemples

with warn asError

Indique que les avertissements doivent être traités comme des erreurs affichées dans la matrice IU. Le texte asError est facultatif.

invokeBO 'BusinessObject' using "dataArea" for add with warn asError;

invokeSS 'ServiceScript' using "dataArea" with warn;

with warn popup

Indique que les avertissements doivent être présentés dans une fenêtre contextuelle Framework standard. Avec ce scénario, des boutons standard OK et Annuler sont présentés à l'utilisateur. Si l'utilisateur clique sur OK, cela signifie que le processus doit se poursuivre. Si l'utilisateur clique sur Annuler, le processus doit s'interrompre. Il s'agit du paramètre recommandé.

invokeBS "daName/bsElement" using "dataArea" with warn popup;

with warn suppress

Indique que les avertissements doivent être supprimés. Il s'agit de la valeur par défaut lorsqu'aucune syntaxe relative aux avertissements n'est ajoutée à l'instruction invoke.

invokeBS "daName/bsElement" using "dataArea" with warn suppress;

invokeSS 'ServiceScript' using "dataArea";
Remarque :
Dans le cas des scripts de service, tous les objets appelés à partir du script héritent du niveau d'avertissement. Par conséquent, si le script de service est appelé avec with warn, toutes les instructions invoke imbriquées comportent également with warn.

Dans le cas des scripts APT, une logique doit suivre l'appel, afin de traiter les erreurs et les avertissements (si with warn as popup est utilisé). La variable système $WARNING est définie sur true si l'utilisateur a cliqué sur le bouton Annuler dans la fenêtre contextuelle d'avertissement. Si une matrice a été affichée, la logique doit réafficher la matrice (où le message d'avertissement sera réaffiché) Cela permet à l'utilisateur d'apporter éventuellement des modifications et de les enregistrer à nouveau. Si aucune matrice n'a été affichée avant l'avertissement, la logique doit se terminer.

La variable système $ERROR indique qu'une erreur a été reçue. Si une matrice a été affichée avant l'erreur, la logique doit réafficher la matrice où l'erreur sera affichée. Si aucune matrice n'a été affichée, le produit fournit un script APT F1-HandleErr qui doit être utilisé pour afficher l'erreur. Ci-dessous figure un exemple de logique classique de traitement d'erreur.

invokeBO "F1-DetermineBo/output/bo" using "boSchema" for update with warn popup;
if ("$WARNING")
   if ("map_schema/action = 'DEL'")  
     terminate;
   else
     goto maintMap;   
   end-if;
end-if;
if ("$ERROR")
  if ("map_schema/action != 'DEL'")
    goto maintMap;
  else
    transferControl 'F1-HandleErr';
  end-if;
end-if;

Variables système et globales

Les tableaux ci-dessous présentent les variables système et globales disponibles pour l'écriture de scripts.

Variables système - Tous les types de script

Les variables système ci-dessous sont utilisables dans tous les types de script (scripts de service, scripts de plug-in et scripts APT).

Variable Description Exemple
$BLANK Représente un noeud vide.
if ("string(parm/spouse/name) != $BLANK")
  goto addSpouse;
end-if;
$CURRENT-DATE Représente la date actuelle.

Pour les scripts APT, il s'agit de la date du navigateur.

Pour les scripts serveur, il s'agit de la date du serveur (affectée par la logique de substitution de date système).

move "$CURRENT-DATE" to $tempDate;
$CURRENT-STD-DTTM Représente la date/heure actuelle exprimée en heure standard (c'est-à-dire sans les ajustements d'heure d'été).
move "$CURRENT-STD-DTTM" to $tempDateTime;
$DEVICE-OS Représente le système d'exploitation de l'appareil de l'utilisateur.
move "$DEVICE-OS" to $tempDeviceOs;
$DEVICE-BROWSER Représente le navigateur de l'appareil de l'utilisateur.
move "$DEVICE-BROWSER" to $tempDeviceBrowser;
$DEVICE-DISPLAY-TYPE Représente le type d'affichage écran de l'appareil de l'utilisateur : taille de poste de travail, ou taille moyenne ou petite. Les valeurs renvoyées peuvent être similaires à oraDesktop, oraTablet et oraPhone.
move "$DEVICE-DISPLAY-TYPE" to $tempDeviceDisplayType;
$DEVICE-INFO Combinaison des trois propriétés d'appareil (DEVICE-OS, DEVICE-BROWSER et DEVICE-DISPLAY-TYPE), chaque valeur de propriété étant séparée de la suivante par un point-virgule.
move "$DEVICE-INFO" to $tempDeviceInfo;

Variables système - Scripts APT uniquement

Les variables suivantes ne sont utilisables/applicables que dans les scripts APT.

Variable Description Exemple
$DOUBLE_​QUOTE Représente un guillemet.
move "$DOUBLE_QUOTE" to $tempField;
$SINGLE_​QUOTE Représente une apostrophe.
move "$SINGLE_QUOTE" to $tempField;
$SPACE Contient un espace.
move "$SPACE" to $tempField;
$SYSTEM-DATE Représente la date du serveur. A noter que cette date est affectée par la logique de substitution de date système.
move "$SYSTEM-DATE" to $tempDate;

Variables système - Scripts serveur uniquement

Les variables suivantes ne sont utilisables/applicables que dans les scripts de service et les scripts de plug-in.

Variable Description Exemple
$ADDITIONAL-IP-INFO Une requête HTTP contient un champ d'en-tête "adresse IP supplémentaire". Il peut être renseigné par une implémentation lorsque des informations sont disponibles sur le serveur proxy ou l'équilibreur de charge, comme l'adresse IP d'origine.
move "$ADDITIONAL-IP-INFO" to "parm/request/headerIpAddress";
$CURRENT-DTTM Représente la date/heure actuelle.
move "$CURRENT-DTTM" to $tempDateTime;
$F1-INSTALLATION-TIMEZONE Représente le code de fuseau horaire défini dans les options d'installation.
move "$F1-INSTALLATION-TIMEZONE" to $timeZone;
$LANGUAGE Représente le code de langue utilisé par le script. En général, il s'agit de la langue par défaut de l'utilisateur.
move "$LANGUAGE" to $tempLanguage;
$PROCESS-DATE Représente la date du processus. La date du processus diffère de la date actuelle car elle reste la même tout au long de l'exécution du processus. Par exemple, dans le cas d'un script de service stockant plusieurs objets métier, la date du processus est initialisée au début de l'exécution du script et la même date de processus est attribuée par défaut à chaque objet métier. Quant à la date actuelle, et plus particulièrement à la date/heure actuelle, elle reflète l'heure réelle du traitement.
move "$PROCESS-DATE" to $tempDate;
$PROCESS-DTTM Représente la date/heure du processus. A noter que la date/heure du processus est initialisée au début du processus et ne reflète pas la date/heure exacte d'une mise à jour.
move "$PROCESS-DTTM" to $tempDateTime;
$REQUESTING-IP-ADDRESS Représente l'adresse IP provenant de la requête HTTP. A noter que si la requête est acheminée via un serveur proxy ou un équilibreur de charge, cette adresse IP est celle du proxy ou de l'équilibreur de charge et non celle de l'utilisateur final. Pour des informations, voir la variable $ADDITIONAL-IP-INFO.
move "$REQUESTING-IP-ADDRESS" to "parm/request/systemIpAddress";
$USER Représente l'ID utilisateur de l'utilisateur qui exécute le script.
move "$USER" to $tempUser;

Pour les scripts APT qui doivent connaître l'ID d'utilisateur de l'utilisateur en cours, voir Conseils et astuces utiles.

Variables globales

Les scripts APT et les scripts de service ont accès aux valeurs définies dans l'environnement global.

Lorsqu'un script APT est lancé à partir de l'interface utilisateur, ces variables sont initialisées automatiquement. Il est possible d'y faire référence en faisant précéder leur nom d'un signe dollar. Par exemple, si PER_​ID est une variable globale prise en charge, il est possible d'y faire référence dans le script APT en utilisant $PER_​ID.

move "$PER_ID" to "schema/customerId";

Les scripts de service ne peuvent faire référence aux variables globales que s'ils ont été appelés directement à partir d'un script APT ou d'une zone d'un portail. Un script de service appelé à partir d'un script APT ou d'une zone de portail a accès à l'ensemble des variables d'environnement global renseignées dans la session IU. Pour les scripts de service, le nom des variables globales doit être précédé de deux signes dollar (au lieu d'un dans les scripts APT). Par exemple, si PER_​ID est une variable d'environnement global prise en charge, il est possible d'y faire référence dans le script de service en utilisant $$PER_​ID.

move $$PER_ID to "schema/customerId";
Remarque :
Comme indiqué dans Variables de contexte, un script de service peut déclarer des variables de contexte utilisant la même syntaxe avec deux signes dollar.

Instructions d'exécution de script et de transfert du contrôle

L'étape de modification des données prend en charge des fonctionnalités analogues aux types d'étape Exécuter un script et Transférer le contrôle. Toutes deux ne sont applicables qu'aux scripts APT.

Syntaxe Valeurs valides Commentaires

performScript

'Nom de script APT' Le script à exécuter est spécifié explicitement.
$Variable Le script à exécuter est spécifié via une variable.
"XPath" Le script à exécuter est spécifié dans un élément auquel il est fait référence par son XPath.

transferControl

Analogue à l'instruction performScript
Remarque :
Lorsque le script désigné dans l'instruction performScript est terminé, le contrôle repasse au script APT appelant. Lorsque le script désigné dans l'instruction transferControl est terminé, le contrôle ne repasse pas au script appelant, il passe entièrement au script destinataire du transfert.

Instruction navigate

L'étape de modification des données prend en charge une fonctionnalité analogue au type d'étape Accéder à une page. Ceci ne s'applique qu'aux scripts APT.

Syntaxe Valeurs valides Commentaires

navigate

'Code de navigation' L'option de navigation est spécifiée explicitement.
$Variable L'option de navigation est spécifiée via une variable.
"XPath" L'option de navigation est spécifiée dans un élément auquel il est fait référence par son XPath.

L'étape de modification des données permet également d'indiquer que la barre latérale doit être actualisée lors de la navigation. Ceci ne s'applique qu'aux scripts APT.

Syntaxe Valeurs valides

navigateAndReloadDashboard

Analogue à l'instruction navigate

Déclaration d'un objet métier avec un groupe d'objets métier

Cette instruction est spécifique des scripts APT qui prévoient d'utiliser le script de base Traitement de la maintenance de l'objet métier principal (F1–MainProc) pour les instructions de génération de matrice d'édition. Ce script s'attend à ce que les données utilisées pour l'affichage dans la matrice se trouvent dans une balise boGroup.

Syntaxe Valeurs valides Commentaires

declareBOWithBOGroup

'Nom d'objet métier' L'objet métier est spécifié explicitement.
$Variable L'objet métier est spécifié via une variable.
"XPath" L'objet métier est spécifié dans un élément auquel il est fait référence par son XPath.

Le tableau ci-dessous présente le complément de syntaxe de cette instruction.

Syntaxe Valeurs valides

as

'Nom de schéma dynamique'

Exemples :

declareBOWithBOGroup 'BusinessObject' as 'newMapSchema';
 
declareBOWithBOGroup $variableBO as 'newMapSchema';
 
declareBOWithBOGroup "daName/boElement" as 'newMapSchema';

Instruction d'appel de matrice

L'étape de modification des données prend en charge une fonctionnalité analogue au type d'étape Appeler une matrice. Ceci ne s'applique qu'aux scripts APT.

Syntaxe Valeurs valides Commentaires

invokeMap

'Nom de matrice' La matrice IU est spécifiée explicitement.
$Variable La matrice IU est spécifiée via une variable.
"XPath" La matrice IU est spécifiée dans un élément auquel il est fait référence par son XPath.

Le tableau ci-dessous présente le complément de syntaxe de cette instruction.

Syntaxe Valeurs valides Commentaires

using

"Nom de groupe de zone de données"

Indique la zone de données à transmettre vers et depuis le serveur lors du rendu du formulaire HTML associé à la matrice.

target

bpa

page

popup

Voir le type d'étape Appeler une matrice pour plus d'informations sur les valeurs de target.

Si la matrice IU est configurée pour renvoyer une valeur, celle-ci peut être évaluée à l'aide de la variable $MAP-VALUE.

invokeMap 'UI Map' using "dataArea";
 
invokeMap $variableMap using "dataArea";
 
invokeMap "daName/mapElement" using "dataArea" target bpa;
 
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
    goto 300;
else
    terminate;
end if;

Instructions de génération de matrice d'édition

Les instructions de génération de matrice d'édition permettent de générer dynamiquement et de lancer une matrice d'édition IU basée sur une définition de schéma. Le schéma utilisé peut être un schéma d'objet métier, de service fonctionnel, de script de service ou de zone de données. Ceci ne s'applique qu'aux scripts APT. L'instruction de génération varie selon le type du schéma, mais la syntaxe est analogue.

Syntaxe

generateBOEditMap

generateBSEditMap

generateSSEditMap

generateDAEditMap

Le code d'objet métier, de service fonctionnel, de script de service ou de zone de données peut être spécifié à l'aide d'un littéral (entre apostrophes), sous forme de variable temporaire ou en faisant référence à un emplacement de schéma XPath (entre guillemets).

Le tableau ci-dessous présente le complément de syntaxe de cette instruction.

Syntaxe Valeurs valides Commentaires

using

"Nom de groupe de zone de données"

Indique la zone de données à transmettre vers et depuis le serveur lors du rendu du formulaire HTML associé à la matrice.

target

bpa

page

popup

Les valeurs cible précisent où la matrice générée doit être affichée, comme indiqué dans le type d'étape Appeler une matrice. Si la matrice IU est configurée pour renvoyer une valeur, celle-ci peut être évaluée à l'aide de la variable $MAP-VALUE.

Les exemples présentés utilisent l'instruction generateBOEditMap ; ils seraient similaires avec les instructions correspondant aux autres types de schéma.

generateBOEditMap 'BO Name' using "dataArea";
 
generateBOEditMap $variableMap using "dataArea";
 
generateBOEditMap "daName/mapElement" using "dataArea" target bpa;
 
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
    goto 300;
else
    terminate;
end if;

Instruction terminate

L'étape de modification des données prend en charge une fonctionnalité analogue au type d'étape Terminer.

L'exemple ci-dessous présente une étape terminate simple qui arrête le script.

if ("not(parm/spouse/name)")
  terminate;
else
  goto addSpouse;
end-if;

L'instruction terminate with error n'est disponible que dans un script de service.

Remarque :
Pour générer une erreur à partir d'un script APT, voir Conseils et astuces utiles.
Syntaxe Attributs Commentaires

terminate with error (x, y %n= element= )

'x' représente la catégorie de message Obligatoire.
'y' représente le numéro de message Obligatoire.
%n="XPath élément" ou %n='littéral' Indiquez les paramètres de substitution pris en charge par le message à l'aide de valeurs littérales ou de références XPath. Lorsque la valeur à remplacer est un élément de liste, utilisez le XPath de l'élément de la liste qualifié par l'occurrence de la liste.
element='XPath élément' ou element=$variable (Facultatif) Indiquez le nom de l'élément de la matrice IU à mettre en évidence dans le cadre de l'erreur. Lorsque l'élément en erreur se trouve dans une liste, utilisez le XPath de l'élément de la liste qualifié par l'occurrence de la liste.

Exemple de champ simple :

if ("string(customer/lastName) = $BLANK")
  terminate with error (8000, 1001 %1="customer/lastName" %2='Last name required' element='customer/lastName');
end-if;

Exemple de terminate lorsque l'élément à marquer figure dans une liste :

for ($list in "parm/hard/newBusinessObject/listName") 
  if //** check some condition for elementName
      terminate with error (11000, 11000 %1="$list/elementName" element='$list/elementName');
  end-if;
end-for;
Documentation de référence :
Pour plus d'informations sur la présentation des erreurs dans une matrice IU, voir Afficher des erreurs.

Appel de code Groovy

Si vous disposez d'un script de module d'extension ou d'un script de service qui mélange génération de script XPath et de script Groovy, l'étape de modification des données prend en charge la possibilité d'appeler du code Groovy à l'aide de la syntaxe invokeGroovy 'méthode'; où "méthode" est le nom d'une méthode définie dans une étape de type Membres Groovy dans le script. Seules les méthodes ne recevant pas d'arguments et ne retournant rien peuvent être appelées de cette manière. Cependant, la méthode appelée par l'étape de modification des données peut être prise en charge par un code Groovy supplémentaire dans d'autres types d'étape Membres Groovy.

Exemple d'étape de type Modifier les données :

invokeGroovy 'invoke';

Exemple d'étape de type Membres Groovy :

void invoke() {
  initParms()
  readBO()
  initConfig()
  retrieve()
  updateBO()
}
Remarque :
Comme indiqué dans Utiliser Groovy dans des scripts, s'il s'agit d'un script de plug-in et que le code est uniquement Groovy, vous devez utiliser la version du moteur de script Groovy plutôt que la technique ci-dessus. En effet, elle est considérée comme plus efficace car elle évite la conversion des données vers et depuis l'interface XML.

Débogage d'un script APT

Lorsque la hauteur d'un script APT est supérieure à zéro, des noeuds sélectionnés de la zone de données du script peuvent être affichés à l'exécution. Les données XML sont affichées durant l'exécution du script dans la zone d'affichage de celui-ci. Indiquez le XPath d'un noeud XML de l'une des zones de données du script APT entre les caractères : '%+' et '+%'.

Par exemple, la totalité du contenu d'un noeud de groupe de schéma nommé 'input' et le contenu particulier de l'élément de schéma nommé 'output/status' seront affichés dans la zone d'affichage du script APT. Le texte de débogage doit être saisi dans la zone de texte du script APT et non dans le champ de modification de données du script. Du texte de débogage peut être déclaré pour toute étape explicite du script.

display input: %+input+% , and output status: %+output/status+%

Conseils et astuces utiles

Cette section fournit des suggestions sur la façon d'implémenter une logique commune.

Rechercher l'utilisateur connecté dans un APT

Pour les scripts basés sur le serveur, la variable $USER est renseignée avec l'utilisateur actuellement connecté. Cette variable n'est pas disponible pour les scripts APT. L'APT peut appeler le script de service F1-GetUser si ces informations sont nécessaires.

Emettre une erreur à partir d'un script APT

Pour les scripts basés sur le serveur, vous utilisez l'instruction terminate with error pour renvoyer un message d'erreur à afficher à l'utilisateur. L'APT peut afficher cette erreur en transférant le contrôle à F1-HandleErr, comme décrit dans la section Déclaration et appel d'objets basés sur schéma. Ceci n'est pas pris en charge dans un script APT. Pour émettre une erreur, un APT peut appeler le service fonctionnel F1-RethrowError en transmettant les détails de l'erreur. Ce service fonctionnel renseigne les champs d'erreur système appropriés nécessaires à l'émission de l'erreur. Puis, il transfert le contrôle à F1-HandleErr.

  if ("string($assignedToUser) != string(F1-GetUser/user)")
    declareBS 'F1-RethrowError' as 'errorMsg';
    move '11010' to "errorMsg/messageCategory";
    move '11511' to "errorMsg/messageNumber";
    move "$toDoEntryId" to "errorMsg/messageParameters/+parameters/parameterValue";
    invokeBS 'F1-RethrowError' using "errorMsg";
    transferControl 'F1-HandleErr';  
  end-if;