Appian, struttura rule e funzioni essenziali.

In Precedenza abbiamo visto le caratteristiche del linguaggio Appian che lo caratterizzano, in questo articolo ne approfondiamo il tema della struttura delle rule e illustriamo le funzioni essenziali che ne permettono l’operatività.

Nel primo paragrafo rivedremo brevemente gli aspetti essenziali del linguaggio utilizzato, mentre nel secondo vedremo la struttura di una rule appian e le funzioni essenziali che vengono utilizzate tutti i giorni da ogni appian developer.

Caratteristiche principali del linguaggio SAIL

Abbiamo già illustrato che Appian ha un suo linguaggio proprietario, SAIL, che di fatto punta ad essere un linguaggio fortemente espressivo e flessibile: questi pregi vengono bilanciati da un neo come la totale mancanza di un sistema di cattura e gestione delle eccezioni all’interno di Sail.

Considerato quanto evidenziato possiamo dire che un buon codice appian deve avere queste caratteristiche:

  • Essere breve, conciso, pena un design rivedibile.
  • Deve prevedere una batteria di test per i casi più comuni.

I mattoncini principali per costruire gli script Sail sono :

  1. Variabili
  2. Costanti
  3. Le funzioni

Ogni istruzione è separata dalla virgola ed ogni oggetto si denota con un’espressione del tipo prefisso!nome_oggetto

Il prefisso dell’oggetto non è altro che il prefisso di dominio ed è utilizzato per disambiguare la tipologia di oggetto richiamata: un oggetto può essere una variabile, una rule appian, una funzione esterna o nativa.

Struttura e funzioni principali da utilizzare nelle rule

Elementi principali della struttura di una rule

Illustriamo i primi costrutti utili della struttura di una rule.

Abbiamo già visto i commenti, in Appian che si scrivono un po’ come Java e C#, si scrivono utilizzando la notazione slash e asterisco.

/* questo è un commento monolinea */

/* questo è un commento
Multilinea, ma carino */

Essendo un linguaggio funzionale, di fatto ogni nostro mattoncino nel software sarà funzione, in questo senso in appian non vediamo la differenza tra interfacce, rule e componenti per la comunicazione verso sistemi terzi (chiamati anche integrazioni): sono tutte rule e pertanto per richiamarle da un qualsiasi contesto dobbiamo utilizzare il dominio “rule”.

Le rule hanno degli input, chiamati Rule Inputs hanno prefisso di dominio “ri” e sono impostabili nel riquadro a destra da un qualunque editor di codice.

Funzioni essenziali

Ora che conosciamo la struttura delle rule, Illustriamo le funzioni essenziali che permettono l’operatività in appian: le funzioni possono originarsi dal sistema (funzioni di sistema) da eventuali plugin, da altre rule create.

Le funzioni di sistema hanno due domini, un dominio “a” e un dominio “fn”. La caratteristica principale del dominio “fn” è che possiamo ometterne la dichiarazione in fase di utilizzo, vale a dire scrivere if è la stessa cosa che scrivere fn!if.

Abbiamo già visto la funzione if come funzionei di sistema che permette di effettuare un calcolo in base a un valore booleano in ingresso. if(condizione, espressione se condizione vera, espressione se condizione falsa).
Ciò che ci restituisce l’if è dettato dalla prima espressione se la condizione è vera, dalla seconda se questa è falsa.

In questo contesto vediamo una nuova rule, fondamentale, ed è la localvariables.

Il dominio di questa funzione è “a” (pertanto per usarla dobbiamo indicarla come “a!localvariables“, tale funzione viene utilizzata per creare blocchi in cui dichiarare al proprio interno delle variabili con visibilità limitata al blocco, per dichiararle si utilizza il dominio “local”.

Facciamo un breve passo indietro, ed osserviamo un esempio di variabile come local!miaVariabile: il fatto che prima di ! ci sia “local” ci fa’ capire subito che ci si riferisce ad una variabile, nel caso in cui volessimo invocare la rule “miaRule” basterà scrivere rule!miaRule().

Un’altra funzione fondamentale è la funzione foreach, ha come dominio “a” ed è utilizzata per effettuare delle iterazioni su un array di dati. La funzione restituisce un array il cui il contenuto alla riga i-esima è quanto elaborato alla i-esima iterazione, eccovi un esempio:

All’interno del ciclo, possiamo utilizzare il dominio “fv” per avere accesso a due elementi importanti:

  • fv!index : che avrà come valore l’indice dell’iterazione corrente
  • fv!item : che avrà come valore l’elemento contenuto all’interno dell’iterazione i-esima.

Per chi viene dal mondo della programmazione (come il sottoscritto) troverà dolorosa l’assenza del ciclo for in Sail, tuttavia ci viene in soccorso la funzione fn!enumerate che non fa’ altro che creare un array da 0 a n-1 unico parametro di input.

Pertanto l’esempio riportato sopra si può riscrivere in questo modo:

qui abbiamo un’altra chicca del linguaggio: la somma viene effettuata su tutti gli elementi dell’array creando implicitamente un foreach.

Pertanto per ottenere lo stesso risultato basterà scrivere fn!enumerate(4)+2.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *