Lotus Notes Formule - Mise seule fonction de traitement de valeur en valeur multiple avec @ Transform
Une co-développeur a récemment eu une liste de document unique ID. Il voulait rechercher une valeur de chacun des documents. Sa première pensée fut d'utiliser @ GetDocField, comme dans @ GetDocField (unidList; «Formulaire»). ("Form" n'était pas le terrain, il a été levant les yeux, mais je vais l'utiliser ici comme un exemple). @ GetDocField ne fonctionne que sur une seule valeur, de sorte qu'il a été seulement de la recherche du champ de la UNID premier dans la liste.
Il n'avait jamais utilisé @ Transformer avant, mais c'est une utilisation parfaite pour cette fonction. Il peut transformer n'importe quelle fonction qui fait "valeur unique" de traitement dans une fonction qui fait "la valeur multi" de traitement. @ Transform a trois paramètres. La première est la liste des valeurs. Le second est une chaîne qui va finir par être le nom de la variable temporaire. La troisième est la fonction à exécuter, en utilisant le paramètre nom de la variable seconde. Ainsi, sa fonction a été réécrit:
@ Transform (unidList; "x"; @ GetDocField (x; «Formulaire»))
La fonction boucle dans tous les éléments dans la liste (premier paramètre). Pour chaque élément dans la liste, @ GetDocField est effectuée. Remarquez comment la chaîne "x" est utilisé. C'est le second paramètre, de sorte que c'est le nom de la «variable» à l'intérieur de la formule (troisième paramètre). Le résultat de la fonction est une liste de «transformer» les valeurs - chaque élément dans la liste (chaque UNID) a été transformé en quelque chose d'autre (le résultat de la GetDocField @).
Puisque la formule est traitée pour chaque élément dans la liste des sources, la formule est le traitement avec une seule valeur à chaque fois. C'est comme ça que vous tournez la limitation à une seule valeur de @ GetDocField dans une formule qui peut maintenant traiter plusieurs valeurs.
Notez que je ne fais pas de contrôle d'erreur dans la formule. Un plus «robuste» version de la formule pourrait être:
@ Transform (unidList; "x"; @ Si (@ IsError (@ GetDocField (x; «Formulaire»)); "erreur"; @ GetDocField (x; «Formulaire»)))
Mais le plus compliqué votre formule vieillit, plus il est difficile de suivre et de soutenir. C'est pour ça que j'ai commencé avec l'exemple simple - il est plus facile à expliquer.
Vous pouvez également utiliser @ Do dans votre formule d'effectuer des déclarations multiples. L'essentiel est que les résultats de la formule dans une valeur, et cette valeur se termine par remplacer la valeur d'origine dans la liste.
Toute fonction qui ne fonctionne que sur une seule valeur peut également être mis à jour à une fonction qui opère sur plusieurs valeurs en utilisant la même technique.
Vu 8445 fois par 2704 spectateurs














Un couple d'autres options:
Option 1: Utilisez le @ Pour (...) en boucle.
par exemple:
@ Pour (i: = 1; i <= @ Elements (unidList); i: = i + 1;
@ Do (
thedata: = @ GetDocField (unidList [i]; «Formulaire»);
theDataList: = theDataList: (@ Si (@ IsError (donnees); "erreur"; donnees))
)
);
Option 2: Utiliser @ DbLookup
- Si vous avez une vue dont la première colonne est triée par @ Text (DocumentUniqueID) alors vous pouvez utilisez la commande suivante:
theDataList: = @ DbLookup ("Notes": "ReCache"; "": ""; "vDocumentsByUNID"; unidList »; LaFeuille");