Script e modelli JavaScript

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

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

  • Tutte le attività dispongono di script di inizializzazione. Viene eseguito uno script di inizializzazione 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 JavaScript: Le espressioni JavaScript possono essere incluse tra <%= e %>. Questi campi offrono un pulsante che consente di aprire un elenco a discesa per facilitare l’immissione di espressioni.

Oggetti esposti

JavaScript 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à eseguite. Lo schema di questo oggetto è xtk:workflowTask.
  • evento: Rappresenta gli eventi che hanno attivato l'attività in esecuzione. Lo schema di questo oggetto è xtk:workflowEvent. Questo oggetto non è inizializzato per le attività di tipo AND-join che sono state 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 di solito contiene un elemento ma può contenere diversi per le attività di tipo AND-join che sono state 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, le 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 script.

ATTENZIONE

Le proprietà di questi oggetti sono di sola lettura, ad eccezione delle proprietà secondarie 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 allo stato precedente.

Esempio

In questo esempio e negli esempi seguenti, crea un flusso di lavoro che include un'attività Codice JavaScript e un'attività End come mostrato nel diagramma seguente.

Fai doppio clic sull'attività Codice JavaScript e inserisci il seguente script:

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 situati in alto a destra dell’elenco dei flussi di lavoro. Al termine dell'esecuzione, consultare il registro. Dovresti visualizzare due messaggi corrispondenti allo script: una visualizza l’etichetta del flusso di lavoro, l’altra visualizza la data in cui lo script è stato attivato.

Variabili

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

Variabili di istanza

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

Variabili di attività

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 evento

Le variabili evento (vars.xxx) abilitano lo scambio di dati tra le attività elementari di un processo di flusso di lavoro. 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à.

ATTENZIONE

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

Gli eventi sono le variabili più utilizzate e devono essere utilizzati in preferenza per le variabili di istanza.

Alcune variabili di evento vengono modificate o lette dalle varie attività. Sono 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

NOTA

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

Esempio 1

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

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

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

    Ad esempio: instance.vars.segmentpercent = 10;

  3. Aggiungi un’attività Query e target a seconda delle tue esigenze.

  4. Aggiungi un’attività Split e configurala per eseguire un campionamento casuale della popolazione in arrivo. La percentuale di campionamento può essere qualsiasi cosa di vostra scelta. In questo esempio viene 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à Split, 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.

    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 transizione in uscita.

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

Esempio 2

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

    instance.vars.foo = "bar1"
    vars.foo = "bar2"
    task.vars.foo = "bar3"
    
  2. Aggiungi il seguente script allo script di inizializzazione dell'attività End :

    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 osserva il registro.

    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 Codice JavaScript accede alle variabili di istanza e di evento, ma le variabili di attività non sono accessibili dall'esterno ('non definito').

Chiamata di una variabile di istanza in una query

Una volta specificata una variabile di istanza in un’attività, puoi riutilizzarla in una query del flusso di lavoro.

Quindi, per chiamare una variabile instance.vars.xxx = "yyy" in un filtro, immetti $(instance/vars/xxx).

Ad esempio:

  1. Crea 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, immetti $(instance/vars/@deliveryIN).

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

Funzioni avanzate

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

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 cambia in stato di errore (per impostazione predefinita, l’istanza viene sospesa).

Script di inizializzazione

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

La maggior parte delle proprietà delle attività può essere calcolata dinamicamente, utilizzando un modello JavaScript o perché le proprietà del flusso di lavoro consentono esplicitamente di calcolare il valore da 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 avranno effetto solo su questa attività.

In questa pagina