Script e modelli JavaScript :headding-anchor:javascript-scripts-and-templates

Gli script consentono di calcolare i valori, scambiare dati tra diverse attività nel processo ed eseguire operazioni specifiche utilizzando chiamate SOAP.

Gli script sono onnipresenti in un diagramma di flusso di lavoro:

  • Tutte le attività dispongono di script di inizializzazione. Uno script di inizializzazione viene eseguito quando l’attività viene attivata e può essere utilizzato per inizializzare le variabili e modificare le proprietà.

  • L’attività "Codice JavaScript" viene semplicemente utilizzata per eseguire uno script.

  • L’attività "Test" valuta le espressioni JavaScript per attivare la transizione appropriata.

  • La maggior parte dei campi di testo sono modelli di JavaScript: le espressioni JavaScript possono essere incluse tra <%= e %>. Questi campi offrono un pulsante che apre un elenco a discesa per facilitare l’immissione di espressioni.

Oggetti esposti :headding-anchor:objects-exposed

Gli script Java eseguiti nel contesto di un flusso di lavoro accedono a una serie di oggetti globali aggiuntivi.

  • istanza: rappresenta il flusso di lavoro in esecuzione. Lo schema di questo oggetto è xtk:workflow.
  • attività: rappresenta le attività in esecuzione. Lo schema di questo oggetto è xtk:workflowTask.
  • event: rappresenta gli eventi che hanno attivato l'attività in esecuzione. Lo schema di questo oggetto è xtk:workflowEvent. Questo oggetto non è inizializzato per attività di tipo AND-join attivate da più transizioni.
  • eventi: rappresenta l'elenco degli eventi che hanno attivato l'attività corrente. Lo schema di questo oggetto è xtk:workflowEvent. Questa tabella contiene in genere un elemento, ma può contenere diverse attività di tipo AND-join attivate in base a diverse transizioni.
  • attività: rappresenta il modello dell'attività in esecuzione. Lo schema di questo oggetto dipende dal tipo di attività. Questo oggetto può essere modificato dallo script di inizializzazione, in altri script, modifiche con effetti indeterminabili.

Le proprietà disponibili per questi oggetti possono essere visualizzate in un elenco a discesa facendo clic sul pulsante a destra della barra degli strumenti dello script.

CAUTION
Le proprietà di questi oggetti sono di sola lettura, ad eccezione delle sottoproprietà della proprietà vars.
La maggior parte di queste proprietà viene aggiornata solo dopo l’esecuzione di un’attività elementare o quando l’istanza viene passivata. I valori letti non corrispondono necessariamente allo stato corrente ma a quello precedente.

Esempio

In questo esempio e negli esempi seguenti creare un flusso di lavoro che includa un'attività JavaScript code e un'attività End come illustrato nel diagramma seguente.

Fare doppio clic sull'attività Codice JavaScript e inserire lo script seguente:

logInfo("Label: " + instance.label)
logInfo("Start date: " + task.creationDate)

La funzione logInfo(message) inserisce un messaggio nel registro.

Fai clic su OK per chiudere la procedura guidata di creazione, quindi avvia il flusso di lavoro utilizzando i pulsanti di azione in alto a destra nell'elenco dei flussi di lavoro. Al termine dell’esecuzione, consulta il registro. Dovresti visualizzare due messaggi corrispondenti allo script: uno visualizza l’etichetta del flusso di lavoro, l’altro visualizza la data in cui lo script è stato attivato.

Variabili :headding-anchor:variables

Le variabili sono le proprietà libere degli oggetti instance, task e event. I tipi di JavaScript autorizzati per queste variabili sono string, number e Date.

Variabili dell’istanza :headding-anchor:instance-variables

Le variabili di istanza (instance.vars.xxx) sono paragonabili alle variabili globali. Sono condivise da tutte le attività.

Variabili attività :headding-anchor:task-variables

Le variabili dell'attività (task.vars.xxx) sono paragonabili alle variabili locali. Vengono utilizzati solo dall'attività corrente. Queste variabili vengono utilizzate dalle attività persistenti per conservare i dati e talvolta vengono utilizzate per scambiare dati tra i diversi script di una stessa attività.

Variabili di evento :headding-anchor:event-variables

Le variabili evento (vars.xxx) consentono lo scambio di dati tra le attività elementari di un processo di workflow. Queste variabili vengono passate dall'attività che ha attivato l'attività in corso. È possibile modificarli e definirne di nuovi. Vengono quindi passate alle seguenti attività.

CAUTION
Nel caso di attività di tipo AND-join, le variabili vengono unite ma se viene definita due volte la stessa variabile, si verifica un conflitto e il valore rimane indeterminato.

Gli eventi sono le variabili utilizzate più di frequente e devono essere utilizzati al posto delle variabili di istanza.

Alcune variabili evento vengono modificate o lette dalle varie attività. Si tratta di tutte variabili di tipo stringa. Ad esempio, un'esportazione imposta la variabile vars.filename con il nome completo del file appena esportato. Tutte queste variabili lette o modificate sono documentate in Informazioni sulle attività, nelle sezioni Parametri di input e Parametri di output delle attività.

Casi d’uso :headding-anchor:example

NOTE
Altri casi di utilizzo del flusso di lavoro sono disponibili in questa sezione.

Esempio 1

In questo esempio, viene utilizzata una variabile di istanza per calcolare dinamicamente la percentuale divisa da applicare a una popolazione.

  1. Crea un flusso di lavoro e aggiungi un’attività Start.

  2. Aggiungi e configura un’attività di codice JavaScript per definire una variabile di istanza.

    Esempio: instance.vars.segmentpercent = 10;

  3. Aggiungi un’attività Query e indirizza i destinatari in base alle tue esigenze.

  4. Aggiungi un’attività Split e configurala per eseguire un campionamento casuale della popolazione in ingresso. La percentuale di campionamento può essere qualsiasi cosa a tua scelta. In questo esempio è impostato su 50%.

    È questa percentuale che viene aggiornata dinamicamente grazie alla variabile di istanza definita in precedenza.

  5. All’interno della sezione Script di inizializzazione della scheda Avanzate dell’attività Dividi, definisci una condizione JS. La condizione JS seleziona la percentuale di campionamento casuale della prima transizione proveniente dall’attività Split e la aggiorna a un valore impostato dalla variabile di istanza creata in precedenza.

    code language-none
    activity.transitions.extractOutput[0].limiter.percent = instance.vars.segmentpercent;
    

  6. Assicurati che il complemento sia generato in una transizione separata dell’attività Split e aggiungi le attività End dopo ciascuna delle transizioni in uscita.

  7. Salva ed esegui il flusso di lavoro. Il campionamento dinamico viene applicato in base alla variabile dell’istanza.

Esempio 2

  1. Prendi il flusso di lavoro dell'esempio precedente e sostituisci lo script dell'attività Codice JavaScript con lo script seguente:

    code language-none
    instance.vars.foo = "bar1"
    vars.foo = "bar2"
    task.vars.foo = "bar3"
    
  2. Aggiungi lo script seguente allo script di inizializzazione dell'attività End:

    code language-none
    logInfo("instance.vars.foo = " + instance.vars.foo)
    logInfo("vars.foo = " + vars.foo)
    logInfo("task.vars.foo = " + task.vars.foo)
    
  3. Avvia il flusso di lavoro, quindi controlla il registro.

    code language-none
    Workflow finished
    task.vars.foo = undefined
    vars.foo = bar2
    instance.vars.foo = bar1
    Starting workflow (operator 'admin')
    

Questo esempio mostra che l'attività che segue JavaScript Code accede alle variabili di istanza e alle variabili di evento, ma le variabili di attività non sono accessibili dall'esterno ('undefined').

Chiamata di una variabile di istanza in una query :headding-anchor:calling-an-instance-variable-in-a-query

Dopo aver specificato una variabile di istanza in un’attività, puoi riutilizzarla in una query del flusso di lavoro.

Per chiamare una variabile instance.vars.xxx = "yyyy" in un filtro, immettere $(instance/vars/xxx).

Ad esempio:

  1. Creare una variabile di istanza che definisce il nome interno di una consegna tramite JavaScript code: instance.vars.deliveryIN = "DM42".

  2. Crea una query le cui dimensioni di targeting e filtro sono i destinatari. Nelle condizioni, specifica che desideri trovare tutti i destinatari a cui è stata inviata la consegna specificata dalla variabile.

    Come promemoria, queste informazioni vengono memorizzate nei registri di consegna.

    Per fare riferimento alla variabile di istanza nella colonna Value, immettere $(instance/vars/@deliveryIN).

    Il flusso di lavoro restituirà i destinatari della consegna DM42.

Funzioni avanzate :headding-anchor:advanced-functions

Oltre alle funzioni standard di JavaScript, sono disponibili funzioni speciali per la manipolazione di file, la lettura o la modifica di dati nel database o l'aggiunta di messaggi al registro.

Diario :headding-anchor:journal

logInfo(message) è stato descritto negli esempi precedenti. Questa funzione aggiunge un messaggio informativo al giornale di registrazione.

logError(message) aggiunge un messaggio di errore al registro. Lo script interrompe l’esecuzione e il flusso di lavoro passa allo stato di errore (per impostazione predefinita, l’istanza viene messa in pausa).

Script di inizializzazione :headding-anchor:initialization-script

In determinate condizioni, puoi modificare una proprietà di un’attività al momento dell’esecuzione.

La maggior parte delle proprietà delle attività può essere calcolata dinamicamente utilizzando un modello di JavaScript o perché le proprietà del flusso di lavoro consentono esplicitamente di calcolare il valore tramite uno script.

Per altre proprietà, tuttavia, è necessario utilizzare lo script di inizializzazione. Questo script viene valutato prima dell’esecuzione dell’attività. La variabile activity fa riferimento all'attività corrispondente all'attività. Le proprietà di questa attività possono essere modificate e influiranno solo su questa attività.

Argomenti correlati
Esempi di codice JavaScript nei flussi di lavoro

recommendation-more-help
cffff7e4-091f-472e-87ca-52087599f99d