Noms de mappe dans des expressions
Les noms de mappe dans les expressions qui sont utilisés dans les règles de mappe représentent des appels à des mappes fonctionnelles.
La syntaxe d'un appel de mappe fonctionnelle dans une expression est identique à la syntaxe d'une fonction :
FunctionalMapName ( argument1 , argument2 , ... argumentn )
Au moment de l'exécution, lorsqu'une règle appelle une mappe fonctionnelle, cette dernière écrit la sortie, au format défini par son type de carte en sortie, directement dans la sortie de la mappe exécutable. La mappe fonctionnelle place également les informations concernant le type ou les types qu'elle génère dans le fichier de travail en sortie de la mappe exécutable, si nécessaire. Ainsi, le type généré par la mappe fonctionnelle est le type de la carte en sortie de la mappe fonctionnelle, lequel doit correspondre au type en sortie de la règle sur laquelle l'appel de la mappe fonctionnelle est placé.
Lorsque le type en sortie de la mappe fonctionnelle est un groupe, l'analyse de compilation de mappe vérifie si le type de la carte en sortie de la mappe fonctionnelle correspond au type en sortie de la règle sur laquelle l'appel est placé. Lorsque le type en sortie de la mappe fonctionnelle est un élément, l'analyse de compilation de mappe vérifie si les classes d'élément correspondent, mais elle n'exige pas que le type de la carte en sortie de la mappe fonctionnelle soit exactement le même que le type en sortie de la règle sur laquelle l'appel de la mappe fonctionnelle est placé. En raison du mode de fonctionnement de l'analyse de compilation de mappe, les mappes fonctionnelles peuvent se comporter plus comme des sous-routines. Vous pouvez utiliser la même mappe fonctionnelle pour générer divers objets en sortie partageant tous les mêmes caractéristiques, à condition que vous ne tentiez pas de faire référence aux objets en sortie des règles d'appel dans les règles à venir.
Une mappe fonctionnelle ne se comporte pas comme une fonction car à l'issue du traitement de la mappe fonctionnelle les données en sortie sont déjà écrites dans la sortie de la règle d'appel. Cette règle d'appel ne peut pas accéder aux données générées par la mappe fonctionnelle. Ce comportement est différent de celui d'un appel de fonction, lequel renvoie la valeur produite par la fonction au point d'appel. La règle d'appel peut manipuler la valeur renvoyée par une fonction. Elle ne peut pas manipuler la valeur produite par une mappe fonctionnelle.
Lorsque la sortie d'une mappe fonctionnelle est un élément, vous pouvez utiliser la fonction générale ASFUNCTION pour renvoyer la sortie vers la règle de mappe d'appel et non vers la carte en sortie.
Le type généré par la mappe fonctionnelle étant le type de la carte en sortie de la mappe fonctionnelle, les dernières références faites au type en sortie de la règle, dans les règles suivantes, ne peuvent pas fonctionner correctement sauf si le type de la carte en sortie de la mappe fonctionnelle correspond exactement au type en sortie de la règle. Si la règle est basée sur un certain type, par exemple A, et que le type en sortie de la mappe fonctionnelle est d'un type différent, par exemple B, l'objet reflété dans le fichier de travail pour la règle est B. Si une règle suivante tente de référencer l'instance de type A, cette référence renvoie la valeur NONE.
Les exemples suivants illustrent deux façons (l'une valide et l'autre non valide) de spécifier des règles de mappe qui utilisent des noms de mappe dans les expressions. Dans les deux exemples, les noms des mappes fonctionnelles portent le préfixe F_.
Exemple valide :
=IF (A > 10, F_BigMap (X), F_LittleMap (Y))Cet exemple est valide car la règle compare un élément, puis appelle l'une des deux mappes fonctionnelles, laquelle envoie les résultats directement à la sortie de la mappe exécutable. Si la valeur de A est supérieure à 10, la règle appelle la mappe fonctionnelle F_BigMap. Sinon, la règle appelle la mappe fonctionnelle F_LittleMap.
Exemple non valide :
=IF (F_Map (A) > 10, F_BigMap (X), F_LittleMap (Y))Cet exemple n'est pas valide, car la règle tente d'utiliser la sortie de la mappe fonctionnelle F_Map dans une comparaison. La règle appelle la mappe fonctionnelle F_Map, puis, à l'issue du traitement de F_Map, écrit les résultats directement dans la sortie de la mappe exécutable. La valeur générée par F_Map n'est pas disponible pour la règle d'appel. Par conséquent, la règle ne peut pas effectuer de comparaison.