Tag Archivio per: #trigger

Ma effettivamente quando le nostre modifiche vengono salvate sul database?

Stavo facendo formazione ad un ragazzo che inizia a muoversi ora su Business Central e gli stavo spiegando le basi di inserimento e modifica dati sul database. Mentre lo facevo mi sono reso conto che, nel corso degli anni, si sono accumulati n livelli di complessità che hanno reso il salvataggio di un dato non esattamente una operazione che avviene in un solo punto e che, volendo tenere conto anche degli eventi sottoscrivibili, la risposta può essere molto articolata.

Perciò, visto che mi era stato chiesto di buttare giù due righe per il blog ho pensato che potesse essere un argomento utile da ripassare.
Per prima cosa va fatta una importante distinzione nell’affrontare l’argomento ovvero di quale versione di Business Central si stia parlando e che feature siano attive nella gestione funzionalità.

Nel caro vecchio Navision e nelle prime versioni di Business Central, infatti il dato veniva salvato all’uscita dalla pagina dove il record veniva modificato o allo spostamento su un record successivo. Per qualcosa come due decenni questa è stata una regola sacra di cui tenere conto. Tutti gli eventi legati alla modifica di un scattavano solo in quel momento.

Nell’ottobre del 2022 però, Microsoft ha introdotto un cambiamento radicale nella gestione del salvataggio dati su Business Central, una funzionalità che ha chiamato SAVE AS YOU TYPE.

Business Central salva immediatamente le modifiche ai singoli campi non appena si esce dal campo o si imposta lo stato attivo su un altro elemento della pagina, invece di salvare solo alla chiusura della pagina. Le modifiche vengono salvate nel database senza alcun impatto evidente sulle prestazioni.

Questa modifica ovviamente, ha stravolto dei flussi che erano attivi da anni e anni per moltissimi flussi ed ha avuto un impatto così dirompente che Microsoft ha dovuto rendere disabilitabile la funzionalità e addirittura non renderla attiva di default sugli ambienti preesistenti onde evitare problematiche non previste.

Aggiornamento: questa funzionalità viene controllata in Gestione funzionalità e potrebbe essere necessaria l’attivazione da parte dell’amministratore, poiché è disattivata per impostazione predefinita in tutti gli ambienti aggiornati al secondo ciclo di rilascio del 2022. In questo modo amministratori e partner hanno un maggiore controllo.


Tenendo a mente questa variazione, per spiegare bene il flusso di modifica di un dato ho creato una tabella molto semplice:

Un intero campo come chiave primaria e tre campi A B e C con il solo scopo di verificare il comportamento su campi multipli.

Quando si crea una nuova tabella c’è subito a disposizione un trigger di modifica:

Il codice all’intero di questa funzionalità viene eseguito solo se la modifica viene effettuata da una pagina o se il comando MODIFY viene eseguito con il parametro TRUE.

La tabella è estendibile e nella sua estensione sono definibili tre trigger aggiuntivi:

Creando una pagina editabile associata alla tabella stessa c’è la possibilità di avere un trigger:

il codice all’interno di questo trigger viene eseguito solo se la modifica è effettuata dall’interno di quella pagina.

Se la pagina è estendibile nella sua estensione è possibile aggiungere un ulteriore trigger:

il codice all’interno di questo trigger viene eseguito solo se la modifica è effettuata dall’interno di quella pagina.

È poi possibile sottoscrivere da una codeunit gli eventi onbefore:

e onafter:

È interessante notare come questi due eventi vengano cmq sempre eseguiti ma uno dei parametri (runtrigger) sia legato appunto al valore passato al comando MODIFY.

È poi possibile sottoscrivere l’evento modify sulla pagina specifica associata al record:

il codice in questo evento viene eseguito solo se la modifica avviene dall’interno della pagina.
A questi eventi sottoscritti si possono teoricamente aggiungere altri due eventi pubblicati in quella che era la vecchia codeunit 1 è che ora è stata scorporata in più codeunit.

In particolare, nella GlobalTriggerManagement si possono sottoscrivere:

Perchè questi due trigger scattino è necessario che la tabella da analizzare sia stata definita nell’evento OnAfterGetDatabaseTableTriggerSetup sempre nella global triggermanagement e va inoltre notato che, dato che il parametro è un generico recref, TUTTI i record configurati in questo modo eseguiranno il codice all’interno ed è quindi auspicabile che il codice verifichi chi è il mittente effettivo dell’esecuzione dell’operazione.

A parità di evento sottoscritto non c’è possibilità di sapere quale sia l’ordine di esecuzione, ma è invece molto chiara la sequenzialità con cui questi eventi vengono triggerati.


Supponiamo di avere una versione di Business Central dove la funzionalità SAVE AS YOU TYPE è disabilitata.

Dato un record

Supponendo di modificarlo dalla pagina in cui abbiamo inserito il trigger facendolo diventare:

La sequenza di esecuzione è la seguente:

Prima viene eseguito il codice sulla pagina, quello nella page extension e quello nella sottoscrizione dell’evento della pagina. Una volta finita la parte relativa alla gui si passa al codice legato alla tabella.

Scattano in sequenza i due eventi onbefore, prima sull’oggetto e poi sulla estensione.

Gli eventi modify prima sull’oggetto e poi sull’estensione.

Solo a questo punto il sistema sta per effettuare la modifica e viene scatenato l’evento globale.

Infine vengono scatenati i due eventi onafter: prima l’estensione e poi sulla tabella, in ordine opposto rispetto a quanto avviene sull’onbefore.

Supponendo di modificare tutti i 3 campi senza lasciare il record o uscire dalla pagina i trigger in esecuzione sarebbero i seguenti:

In pratica il flusso di modifica viene eseguito una sola volta.

Attivando la funzionalità SAVE AS YOU TYPE il sistema si comporta in modo diverso.
Se per la modifica di un solo campo non sembra esserci differenza:

Modificando i tre campi, pur senza uscire dal record o abbandonare la pagina:

L’intera sequenza di trigger viene eseguita per ogni singolo campo. Questo, ovviamente, ha un impatto sostanziale e bisogna tenerne conto in fase di scrittura del codice.

Se per esempio in fase di modifica di una testata ordine si vuole eseguire una operazione di ricalcolo di un valore sulle righe non va messo del codice in uno qualsiasi di questi trigger senza tenere conto di questa esecuzione multipla.

Oppure, se non è possibile adattare il codice a questa modalità di gestione del dato, in attesa che Microsoft aggiunga un evento che sostituisca la vecchia gestione, disabilitare la funzionalità.
Non c’è una risposta corretta per tutte le situazioni perché l’adeguamento non è immediato.


Marco Costanza
Senior Software Developer

 

9Ways | Cosa è il Real-Time Marketing?

Cosa è il Real-Time Marketing?

Credi che far innamorare i tuoi potenziali clienti del tuo marchio senza investire in campagne a pagamento sia alla tua portata? Con il Real Time Marketing di Microsoft Dynamics 365, puoi comunicare con i tuoi clienti e rendere più efficace la tua presenza online senza spendere troppo.

Il Real Time Marketing è un tipo di contenuto creato dinamicamente derivato dalle principali notizie o dalle tendenze prevalenti. È una delle strategie di content marketing che combinano arguzia, creatività e una rapida reazione agli eventi in corso.

L’utilizzo di un’immagine, video o testo breve (ad esempio tweet) come mezzo per creare una risposta rapida a un evento attuale o a una tendenza del consumatore è ciò che caratterizza il Real Time Marketing. In questo modo, modifichi la tua comunicazione e lanci il tuo marchio in un contesto particolare, quello di cui tutti parlano.

Dynamics 365 Real Time Marketing

Il 1° settembre 2023, i nuovi clienti di Dynamics 365 Marketing riceveranno solo funzionalità di Real Time Marketing.
Dynamics 365 Marketing non è più solo per gli esperti di marketing. Con l’intelligenza artificiale e l’assistenza per l’utilizzo del linguaggio naturale, gli utenti aziendali possono creare percorsi basati su eventi che raggiungono i clienti attraverso più punti di contatto, facendo crescere le relazioni dai potenziali clienti, attraverso le vendite e il supporto.

Le nuove funzionalità

Le funzionalità di Real Time Marketing di Dynamics 365 consentono alle organizzazioni di:

9Ways | Dynamics 365 Real Time Customer Journey

Coinvolgere i clienti in tempo reale:

  • Con i percorsi dei clienti basati su trigger che utilizzano e-mail, messaggi di testo o canali di notifica push, le organizzazioni possono attivare i percorsi dei clienti in tempo reale, scegliere il canale giusto per ogni individuo e reagire alle azioni guidate dal cliente nei momenti che contano.

Conquistare clienti e guadagna fedeltà più velocemente:

  • Lavorando su tutti i punti di contatto con i clienti, i customer journey in tempo reale sono davvero un’esperienza end-to-end.

Personalizzare le esperienze dei clienti con l’intelligenza artificiale:

  • Trasforma le informazioni in azioni pertinenti con consigli basati sull’intelligenza artificiale per contenuti, canali e analisi. L’integrazione del segmento e del profilo di Customer Insights consente alle organizzazioni di sfruttare senza problemi la profonda comprensione dei clienti in Customer Insights.

Crescere con una piattaforma unificata e adattabile:

  • Personalizza e connettiti facilmente con gli strumenti che già utilizzi.
    Gestisci in modo efficiente i requisiti di conformità e le linee guida per l’accessibilità.

Come interagire con i clienti nel Real Time Marketing

Quando raggiungi i tuoi clienti con il Real Time Marketing, ci sono 3 cose importanti da considerare: chi, cosa e quando.

  1. Chi è il tuo pubblico, a chi è rivolta questa comunicazione? In Dynamics 365 Marketing, il pubblico è definito da un segmento. Questo è un sottoinsieme dei tuoi contatti che soddisfano alcuni criteri. Ad esempio, potresti avere un segmento contenente clienti di età superiore ai 60 anni che vivono in Nord America, un segmento per i clienti che guadagnano più di $ 100.000 all’anno o un segmento generale con tutti i tuoi contatti attivi.
  2. Qual è il contenuto e la forma della tua comunicazione, cosa stai inviando? Nel Real Time Marketing, può trattarsi di un’e-mail, di una notifica push o di un messaggio di testo. Questi canali possono essere utilizzati separatamente o insieme in un’unica campagna.
  3. Il quando può essere semplice come un orario pianificato in cui si desidera inviare la comunicazione, ma con il Real Time Marketing, può anche essere un evento che innesca la comunicazione come parte di un journey. Puoi combinare e-mail, notifiche push e messaggi di testo in percorsi che possono operare su un segmento di contatti in un momento pianificato o che possono rispondere a un evento per raggiungere i clienti nei momenti che contano.

Per una panoramica delle funzionalità di Real Time Marketing, consulta la documentazione ufficiale Microsoft