macro sc_changed

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Rispondi
maxcam
Messaggi: 32
Iscritto il: 20 nov 2016, 20:07

macro sc_changed

Messaggio da maxcam » 14 ott 2022, 16:42

Salve, vorrei esporvi una necessità che ho in un progetto che sto facendo .
Ho una tabella con parecchi campi. Dovrei creare una tabella storico di tutte le variazioni sui vari record.
In sostanza ad ogni modifica del record i dati precedenti vanno inseriti in una tabella storico.
Il problema è che non sono riuscito a trovare una macro che con un’unica istruzione mi dice se il record è stato variato.
Al momento ho risolto con la macro sc_changed che nell’evento onBeforeUpdate mi restituisce se ho variato un campo. La macro la eseguo su tutti i singoli campi, che in questo caso sono tanti.
C’è una macro che mi restituisce se il record è stato variato?
Vi ringrazio anticipatamente.
Massimo

Fabio
Messaggi: 439
Iscritto il: 20 feb 2014, 11:43

Re: macro sc_changed

Messaggio da Fabio » 14 ott 2022, 19:04

Salve Massimo,
ho trovato questa guida che suggerisce un approccio lato database al problema:
https://www.guillermocava.com/is-there- ... o-records/

maxcam
Messaggi: 32
Iscritto il: 20 nov 2016, 20:07

Re: macro sc_changed

Messaggio da maxcam » 14 ott 2022, 20:50

Grazie per la rapida risposta.
Io utilizzo oracle come database.
Nella mia procedura, prima di aggiornare memorizzo i valori precedenti e in caso di variazioni vanno a popolare una tabella storico. Per verificare se cambiano i valori utilizzo appunto la macro sc_changes.
Funziona tutto, ma pensavo ci fosse un’istruzione che mi restituisse un flag , record modificato si/no.
Quando programmavo in ambiente oracle con plsql era presente una istruzione che verificava se il record era cambiato , evitavo di testare ogni campo.
Era piu rapido forse perché utilizzavo un linguaggio proprietario di oracle.
Vedrò se a livello di database è possibile semplificare la procedura.
Grazie
Massimo

rino
Messaggi: 622
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: macro sc_changed

Messaggio da rino » 20 ott 2022, 11:19

con l uso del trigger risolvi tutto a livello di db e con una banale istruzione sia in mariadb che oracle .
il motore del db è già prediposto per gestire queste condizioni , non devi testare nulla ma solo vincolare all'operazioe a insert update o delete e lo stato in after o before . i valori colonne li trovi in new.field o old.field
puoi anche creare nuovi tracciati con nuove colonne

cambia il carico del server ma si gestisce .

la macro sc serve per gestire situazioni all interno del app come per esempio richieste di campi diversi in caso di cambi valore o test logici .
il linguaggio nei trigger è sql e ovviamente puoi operare anche su db diversi
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

maxcam
Messaggi: 32
Iscritto il: 20 nov 2016, 20:07

Re: macro sc_changed

Messaggio da maxcam » 25 ott 2022, 08:23

Grazie per il supporto.
Si lo so, i trigger a livello di database li utilizzo anche per testare la corretta immissione del dato sui vari campi (esempio range di valori ammessi). Utilizzo il plsql su oracle.
Il trigger su db before update l'ho creato e funziona, ma ho sempre dovuto scrivere tante if per testare se il precedente valoro (old) è diverso dal nuovo (new) e anche testare se i valori precedenti o nuovi sono nulli, altrimenti non funziona. Le mia tabelle ha molti campi .
Quando programmavo con la suite Developer 2000 di oracle era presente un'istruzione che testava se il record era cambiato , molto più rapido, ma utilizzavo un tool di sviluppo proprietario di oracle.
In scriptcase non è presente, ma non c'è problema, si risolve lato db o lato scriptcase. Le istruzioni me le sono montate con l'ausilio di excel .
Grazie a tutti per il supporto.

rino
Messaggi: 622
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: macro sc_changed

Messaggio da rino » 25 ott 2022, 13:55

Scusa ma sono molto curioso.
Se sei in aggiornamento a cosa ti serve conoscere il valore della singola colonna? agsci su tutto il record e via.
Comunque SC ha un log che permette di menorizzare le variazioni di ogni campo e agisce nei tre eventi Update Inser Delete
salva su tracciato libero testo i valori dei singoli campi ante e post. Ovviamente è un tracciato libero per cui trovi le azioni nel cmapo decrizione ma puoi relizzare un parser senza grandi sforzi e gestire la storicità dei cambiamenti su igni record .
tutto questo sotto sicuezza sc
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

maxcam
Messaggi: 32
Iscritto il: 20 nov 2016, 20:07

Re: macro sc_changed

Messaggio da maxcam » 25 ott 2022, 17:13

I motivi sono diversi. Testo i campi perché a volte si sceglie di storicizzare solo se si variano determinati campi.
Inoltre ho notato che se erroneamente clicco su Aggiorna, senza aver fatto variazioni sui campi, mi viene creato un record sullo storico.
Per questo motivo confronto ogni campo per vedere se è variato. Da qui è nata la necessità di un comando su scriptcase analogo a quello che avevo sull’ambiente di sviluppo di oracle Developer 2000 che si occupava, con una singola istruzione, di verificare effettivi aggiornamenti. In quell’ambiente era disponibile forse perché la suite di sviluppo era proprietaria al db oracle.

Analogamente,se il popolamento della tabella storico la gestisco in ambiente oracle, tramite i trigger di database, posso decidere di storicizzare solo se aggiorno determinati campi (I trigger sono in linguaggio plsql).
Inoltre sempre in ambiente oracle se aggiorno un campo che non era valorizzato (nullo) non scatta il trigger di database e non viene creato il record sullo storico. Stesso discorso se un campo da valorizzato passa a nullo.
Questo comporta che oltre a confrontare se il valore precedente (old) è diverso dal nuovo (new), devo testare anche se uno dei due è nullo o diventa nullo. In questo modo i record vengono storicizzati correttamente.
Non so se sono stato chiaro.
Massimo

rino
Messaggi: 622
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: macro sc_changed

Messaggio da rino » 25 ott 2022, 18:09

si molto chiaro, è una storicizzazione condizionata che solo su db risolvi al meglio . in mariadb non hai problemi e puoi usare le procedure create in oracle senza grandi sforzi di migrazione.
certo che è un bel complicarsi la vita ma ci saranno buoni motivi .
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti