Homepage > Formula Lotus , Lotus Notes Tutorial , Notes Designer > Formula Lotus Notes - Attivazione unico valore in funzione di elaborazione multipla con valore @ Transform

Lotus Notes Formula - Attivazione unico valore in funzione di elaborazione multipla con valore @ Transform

A co-sviluppatore recentemente ha avuto un elenco di ID di documento unico. Voleva cercare un valore da ciascuno dei documenti. Il suo primo pensiero era quello di utilizzare @ GetDocField, come in @ GetDocField (unidList: "Form"). ("Form" non era il campo che stava cercando, ma io lo uso come esempio). @ GetDocField funziona solo su un singolo valore, così è stato solo cercando il campo dal UNID primo della lista.

Non aveva mai usato @ Transform prima, ma questo è un uso perfetto per quella funzione. Si può trasformare qualsiasi funzione che si intende per "valore unico" trattamento in una funzione che fa "multi valore" di elaborazione. @ Transform ha tre parametri. Il primo è l'elenco dei valori. Il secondo è una stringa che finirà per essere il nome della variabile temporanea. La terza è la funzione per eseguire, utilizzando il parametro variabile secondo nome. Così, la sua funzione è stata riscritta:

@ Transform (unidList, "x"; @ GetDocField (x; "Form"))

La funzione scorre tutti gli elementi nella lista (primo parametro). Per ogni elemento nell'elenco, @ GetDocField viene eseguita. Si noti come la stringa "x" è usato. Questo è il secondo parametro, quindi questo è il nome della "variabile" all'interno della formula (terzo parametro). Il risultato della funzione è un elenco di valori "trasformato" - ogni elemento della lista (ogni UNID) è stato trasformato in qualcosa d'altro (il risultato del GetDocField @).

Dal momento che la formula viene elaborato per ogni elemento della lista di origine, la formula sta elaborando con un singolo valore ogni volta. È così che si accende il singolo valore limite di @ GetDocField in una formula che può ora elaborare i valori multipli.

Si noti che non sto facendo alcun controllo degli errori nella formula. Una versione più "robusto" della formula può essere:

@ Transform (unidList, "x"; @ If (@ IsError (@ GetDocField (x; "Form")); "errore"; @ GetDocField (x; "Form")))

Ma più complicata la formula diventa, tanto più difficile è quello di seguire e sostenere. Ecco perché ho iniziato con la semplice esempio - è più facile da spiegare.

Si potrebbe anche usare @ fare: la formula per eseguire più istruzioni. La chiave è che i risultati della formula in un valore, e che il valore finisce per sostituire il valore originale nella lista.

Qualsiasi funzione che opera solo su un singolo valore può analogamente essere aggiornato per una funzione che opera su più valori utilizzando la stessa tecnica.

Visto 8473 volte da 2708 spettatori

  1. Richard C
    10 aprile 2010 alle 01:23 | # 1

    Un paio di altre opzioni:

    Opzione 1: Utilizzare il @ Per (...) loop.

    ad esempio:

    @ Per (i: = 1; i <= @ Elements (unidList); i: = i + 1;
    @ Do (
    theData: = @ GetDocField (unidList [i]; "Form");
    theDataList: = theDataList: (@ If (@ IsError (theData), "errore"; theData))
    )
    );

    Opzione 2: Utilizzare @ DbLookup
    - Se avete una visione la cui prima colonna viene ordinata da @ Text (DocumentUniqueID) allora si potrebbe utilizzare il seguente:
    theDataList: = @ DbLookup ("Note": "ReCache"; "": ""; "vDocumentsByUNID"; unidList configurava, "");

  1. Nessun trackback ancora.