Indice

ECA attivate da link

Procedure che eseguono comandi cliccati dall'Utente
Aggiornata il:
Stato: 🟩Pronta

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:

1un Evento Endpoint accesspredispone il link /eca/parametro1/parametro2 che, quando viene cliccato, attiva la procedura
2una o più Azioni Request: Get URL query parameterrecuperano 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
3una serie di Azioni e Condizionirealizzano il comando
4un'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 proceduraIn Configurazione - ECA clicca Add new model. Clicca l'icona ℹ️ e in Etichetta digita un nome per la procedura
1predisponi il link che attiva la proceduraAggiungi 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
2recupera dal link l'argomento che identifica la ConsegnaAggiungi 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
3Memorizza 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 sedeAggiungi 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)
3aSe 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".

3bSe 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".

4Ricongiungi i due percorsiAggiungi 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 comandoAggiungi 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".