Indice

ECA attivate a tempo

Procedure eseguite ad una scadenza temporale
Aggiornata il:
Stato: 🟩Pronta

Oltre alle procedure attivate da attività dell'Utente (salvataggio di una Entità, click su un comando), nella costruzione di app possono risultare utili procedure attivate automaticamente da Drupal stesso, senza alcun intervento dell'Utente. Un caso comune sono le procedure che provvedono periodicamente a fare manutenzione della app: in questo caso, l'Evento che attiva la procedura è una scadenza temporale.

Una procedura di questo tipo è di solito formata almeno da questi elementi:

1un Evento Cron Eventiattiva la procedura quando scatta una scadenza temporale 
2una serie di Azioni e Condizioni, tipicamente su più Entità selezionate con Views: Execute queryrealizzano la procedura
3eventualmente un'Azione Log Message memorizza nel log di Drupal le conseguenze delle azioni svolte

Come esempio, costruiamo per la app "Vicinato" una procedura che una volta al mese elimina le Richieste più vecchie di tre mesi cui non è stato concesso un Prestito. Ecco il disegno risultante (sono due percorsi perché è richiesto un ciclo di eliminazione sulle Richieste vecchie):

 crea la proceduraIn Configurazione - ECA clicca Add new model. Clicca l'icona ℹ️ e in Etichetta digita un nome per la procedura
1attiva la procedura una volta al meseAggiungi l'Evento Cron Eventi. In Frequency digita "0 1 1 * *" per eseguire la procedura al minuto 0 dell'ora 1 del giorno 1 di ogni mese di ogni anno, cioè il primo di ogni mese alla 1 di notte.
2cerca le Richieste da eliminare e memorizzale nel Token "richieste"

Come abbiamo visto, prepariamo a parte una Vista da richiamare nella procedura per cercare le Richieste da eliminare. La Vista elenca le Richieste con due Filtri: Stato = "emessa" (quindi senza Prestito); Creato il minore di "-3 month"

Nella procedura aggiungi l'Azione Views: Execute query. In Name of token digita il nome del Token che conterrà la lista delle Richieste restituite dalla Vista, es. "richieste". In Visualizza seleziona la Vista che cerca le Richieste.

per ogni Richiesta elencata in "richieste" esegui la procedura di eliminazioneAggiungi l'Azione Trigger a custom event (entity-aware). In  Event ID digita il nome della procedura che provvederà ad eliminare ogni Richiesta, es. "Elimina_Richiesta_Vecchia". In Entità digita il contenuto del Token "richieste" cioè "[richieste]"
3al termine delle eliminazioni, scrivi nel log di Drupal la lista delle Richieste eliminateAggiungi l'Azione Log Message. In Tipo digita "Eliminazione Richieste Vecchie". In Rilevanza seleziona Avviso. In Messaggio digita "Eliminate le Richieste [richieste]" 

L'eliminazione vera e propria è eseguita dalla procedura "Elimina_Richiesta_Vecchia", disegnata nello stesso foglio della precedente:

1attiva la procedura quando richiamata dalla precedenteAggiungi l'Evento Custom event (entity aware). In Event ID digita "Elimina_Richiesta_Vecchia". La Richiesta da eliminare è memorizzata nel Token entity.
2elimina la Richiesta ricevutaAggiungi l'Azione Entity: Delete. In Entità digita entity