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:
| 1 | un Evento Cron Eventi | attiva la procedura quando scatta una scadenza temporale |
| 2 | una serie di Azioni e Condizioni, tipicamente su più Entità selezionate con Views: Execute query | realizzano la procedura |
| 3 | eventualmente 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 procedura | In Configurazione - ECA clicca Add new model. Clicca l'icona ℹ️ e in Etichetta digita un nome per la procedura | |
| 1 | attiva la procedura una volta al mese | Aggiungi 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. |
| 2 | cerca 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 eliminazione | Aggiungi 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]" | |
| 3 | al termine delle eliminazioni, scrivi nel log di Drupal la lista delle Richieste eliminate | Aggiungi 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:
| 1 | attiva la procedura quando richiamata dalla precedente | Aggiungi l'Evento Custom event (entity aware). In Event ID digita "Elimina_Richiesta_Vecchia". La Richiesta da eliminare è memorizzata nel Token entity. |
| 2 | elimina la Richiesta ricevuta | Aggiungi l'Azione Entity: Delete. In Entità digita entity |