Abbiamo visto in Guide precedenti come aggiungere comandi a pagine e Viste. Nella maggior parte dei casi, quei comandi richiamano altre pagine ed altre Viste, costruendo così un percorso all'interno della nostra app. Abbiamo però anche già incontrato un caso in cui il comando avrebbe dovuto modificare una Entità, anche superando i permessi dell'Utente che lo clicca.
In questa Guida vediamo come costruire una procedura che esegue un comando cliccato dall'Utente. Una procedura di questo tipo è di solito formata almeno dai seguenti elementi:
| 1 | un Evento Endpoint access | predispone il link /eca/parametro1/parametro2 che, quando viene cliccato, attiva la procedura |
| 2 | una o più Azioni Request: Get URL query parameter | recuperano dal link uno o più argomenti, necessari alle Azioni e Condizioni successive. Gli argomenti sono scritti così nel link: /eca/parametro1/parametro2?argomento1=valore1&argomento2=valore2. |
| 3 | una serie di Azioni e Condizioni | realizzano il comando |
| 4 | un'Azione Reindirizza all'URL | al termine dell'esecuzione del comando, porta l'Utente su una specifica pagina della app. In assenza di questa Azione, all'Utente viene mostrato il messaggio di errore "Pagina non trovata". |
Come esempio, costruiamo per la app "Vicinato" il comando "Accetta una consegna", con cui un Utente accetta la Consegna dell'Attrezzo proposta da un altro Utente. In dettaglio al punto 3 questo comando deve:
- registrare nella Consegna il nominativo dell'utente che accetta la Consegna
- cambiare lo Stato della Consegna da "Bozza" a "Accettata"
- registrare nel Campo "Sede" dell'Attrezzo la nuova posizione dell'Attrezzo (presso il Proprietario, presso il Richiedente, presso una Sede)
- se con la Consegna l'Attrezzo è tornato al Proprietario, cambiare lo Stato della Richiesta e del Prestito in "concluso"; altrimenti, cambiare (o confermare) lo Stato della Richiesta e del Prestito in "in corso"
Vediamo come costruirla passo per passo:
| crea la procedura | In Configurazione - ECA clicca Add new model. Clicca l'icona ℹ️ e in Etichetta digita un nome per la procedura | |
| 1 | predisponi il link che attiva la procedura | Aggiungi l'Evento Endpoint access. In First path argument digita "consegna" ed in Second path argument digita "accettazione": la procedura sarà attivata quando un Utente clicca il link /eca/consegna/accettazione |
| 2 | recupera dal link l'argomento che identifica la Consegna | Aggiungi l'Azione Request: Get URL query parameter. In Name of token digita "id_consegna" per creare il Token omonimo in cui memorizzare l'argomento recuperato dal link. In Query parameter name digita "id" come nome dell'argomento da cercare nel link. La procedura si attende quindi che nel link vi sia un argomento "id" con associato il valore dell'identificativo della Consegna, es: /eca/consegna/accettazione?id=143 |
| 3 | Memorizza nei Token omonimi le diverse Entità su cui il comando deve intervenire: la Consegna, il Prestito corrispondente alla Consegna, la Richiesta richiamata nel Prestito e l'Attrezzo richiamato nella Richiesta | Aggiungi l'Azione Entity: load. In Name of Token digita "consegna" per creare il Token in cui memorizzare la Consegna. In Load entity from seleziona Type and ID per identificare l'Entità tramite il suo tipo e il suo identificativo. In Tipo di Entità seleziona Contenuto, perché la Consegna è di quel tipo. In ID Entità digita [id_consegna] perché l'identificativo della Consegna è l'argomento ricevuto attraverso il link. Aggiungi l'Azione Entity: load. In Name of Token digita "prestito" per creare il Token in cui memorizzare il Prestito. In Load entity from seleziona Type and ID. In Tipo di Entità seleziona Contenuto. Copia dalla gerarchia dei Token il Token corrispondente al Campo della Consegna che contiene l'identificativo del Prestito [node:field_prestito_consegna:target_id]. In ID Entità incolla quel Token e modificalo in [consegna:field_prestito_consegna:target_id] sostituendo "node" con "consegna" perché l'Entità da cui prelevare l'identificativo del prestito è memorizzata nel Token "consegna". Aggiungi l'Azione Entity: load. In Name of Token digita "richiesta" per creare il Token in cui memorizzare la Richiesta. In Load entity from seleziona Type and ID. In Tipo di Entità seleziona Contenuto. Copia dalla gerarchia il Token corrispondente al Campo del Prestito che contiene l'identificativo della Richiesta [node:field_richiesta_prestito:target_id]. In ID Entità incolla il Token e modificalo in [prestito:field_richiesta_prestito:target_id] Aggiungi l'Azione Entity: load. In Name of Token digita "attrezzo" per creare il Token in cui memorizzare l'Attrezzo. In Load entity from seleziona Type and ID. In Tipo di Entità seleziona Contenuto. Copia dalla gerarchia il Token corrispondente al Campo della Richiesta che contiene l'identificativo dell'Attrezzo [node:field_attrezzo_richiesta:target_id]. In ID Entità incolla il Token e modificalo in [richiesta:field_attrezzo_richiesta:target_id] |
| Memorizza nel Token "Sede" la Sede dove avviene la Consegna | Aggiungi l'Azione Entity: load. In Name of Token digita "sede". In Load entity from seleziona Type and ID. In Tipo di Entità seleziona Contenuto. Copia dalla gerarchia il Token corrispondente al Campo della Consegna che contiene l'identificativo della Sede [node:field_sede_consegna:target_id]. In ID Entità incolla il Token e modificalo in [consegna:field_sede_consegna:target_id] | |
| Memorizza nel Token "utente" l'Utente corrente | Aggiungi l'Azione Current user: load. In Name of token digita "utente" | |
| Assegna alla procedura i privilegi di Amministratore, per consentire all'Utente corrente di modificare lo Stato di Richiesta e Prestito su cui potrebbe non aver diritti di modifica. | Aggiungi l'Azione User: switch current account. In User ID digita "1", che è l'identificativo di Amministratore | |
| Scrivi nella Consegna l'Utente corrente come l'utente che sta accettando l'Attrezzo | Aggiungi l'Azione Entity: set field value. In Nome del Campo digita il nome del Campo che memorizza l'Utente che accetta l'Attrezzo "field_accettazione_consegna". In Valore del Campo digita "[utente]". In Entità digita "consegna". | |
| Cambia lo Stato della Consegna in "accettata" | Aggiungi l'Azione Entity: set field value. In Nome del Campo digita il nome del Campo che memorizza lo Stato "field_stato_consegna". In Valore del Campo digita "accettata", che è il nome interno dello stato. In Entità digita "consegna". | |
| Scrivi nell'Attrezzo la sua nuova sede | Aggiungi l'Azione Entity: set field value. In Nome del Campo digita il nome del Campo che memorizza la posizione dell'Attrezzo "field_dove_attrezzo". In Valore del Campo digita "[sede]". In Entità digita "attrezzo". | |
| Distingui il caso di Consegna al Proprietario dalla Consegna ad altri (al Richiedente o presso una Sede) | Aggiungi un gateway (rombo). Da qui partono due percorsi alternativi (3a) e (3b) | |
| 3a | Se la Consegna è al Proprietario, cambio lo Stato di Richiesta e Prestito in "concluso" | Dal gateway aggiungi una Azione. Sul connettore che va dal gateway a questa Azione aggiungi la Condizione Compare two scalar values. In First value digita il Token che contiene il titolo della Sede "[sede:title]". In Operatore di comparazione seleziona contiene. In Second value digita "Proprietario". In questo modo le Azioni che seguono sono eseguite solo se la Consegna è al Proprietario. Associa all'Azione la funzione Entity: set field value. In Nome del Campo digita il nome del Campo che memorizza lo Stato del Prestito "field_stato_prestito". In Valore del Campo digita "concluso". In Entità digita "prestito". Aggiungi l'Azione Entity: set field value. In Nome del Campo digita il nome del Campo che memorizza lo Stato della Richiesta "field_stato_richiesta". In Valore del Campo digita "conclusa". In Entità digita "richiesta". |
| 3b | Se la Consegna è altrove, cambio lo Stato di Richiesta e Prestito in "in corso" | Dal gateway aggiungi una Azione. Sul connettore che va dal gateway all'Azione aggiungi la Condizione Compare two scalar values. In First value digita "[sede:title]". In Operatore di comparazione seleziona contiene. In Second value digita "Proprietario". Attiva Nega la condizione. In questo modo le Azioni che seguono sono eseguite solo se la Consegna non è al Proprietario. Associa all'Azione la funzione Entity: set field value. In Nome del Campo digita "field_stato_prestito". In Valore del Campo digita "in_corso". In Entità digita "prestito". Aggiungi l'Azione Entity: set field value. In Nome del Campo digita "field_stato_richiesta". In Valore del Campo digita "in_corso". In Entità digita "prestito". |
| 4 | Ricongiungi i due percorsi | Aggiungi un gateway. Tira da entrambe le Azioni finali dei percorsi 3a e 3b un connettore al gateway, senza associarvi Condizioni. In questo modo, in entrambi i casi si va alla prossima Azione |
| Riporta l'Utente alla pagina della Richiesta, dove aveva cliccato il comando | Aggiungi l'Azione Reindirizza all'URL. In URL digita "/node/[richiesta:nid]", perché [node:nid] è il Token che contiene l'identificativo di un Contenuto e quindi [richiesta:nid] contiene l'identificativo della Richiesta memorizzata nel Token "richiesta". |