Guida su come creare uno storico delle modifiche effettuate su una tabella in Microsoft Dynamics AX.
In questo articolo andremo a vedere come, modificando il metodo ModiefiedField di una tabella di Microsoft Dynamics AX, è possibile avere uno storico delle modifiche apportate su di essa.
Per la corretta realizzazione dello storico è necessario:
- Realizzare una tabella in AX denominata ad esempio StoricoModificheXXXXX. Dove XXX è il nome della tabella di cui volgiamo avere lo storico.
- Modificare il metodo ModifiedField della tabella che cui vogliamo tracciare ogni modifica.
La prima cosa da fare è quella di aprire l’AOT. All’interno del nodo DataDictionary e poi dentro Tables creare la nuova tabella. Impostare le proprietà come segue:
- Name: dare uno nome significativo alla tabella
- CreatedDate, CreatedTime e CreatedBy a Yes
Impostati i parametri procedere con la creazione dei seguenti campi::
- IdCampo di tipo Int64. Impostare come ExtendedDataTypes fieldId. Questo campo conterrà il valore ID del campo modificato
- NomeCampo di tipo string come lunghezza definita dall’utente. Questo campo conterrà il nome del campo modificato
- ValorePrec di tipo string come lunghezza definita dall’utente. Questo campo conterrà il valore del campo prima della modifica
- ValoreSucc di tipo string come lunghezza definita dall’utente. Questo campo conterrà il valore del campo dopo la modifica.
Dopo aver creato lo storico e aver settato correttamente tutti i parametri aprire il nodo Methods della tabella di cui vuoi tenere traccia(nel mio esempio CustTable). Creare, se non è già presente, il metodo ModifiedField e copiare al suo interno le seguenti righe di codice:
public void modifiedField(fieldId _fieldId) { //Variabili aggiunte da Faion Andrea il 30/05/2017 per la scrittura su uno storico ad ogni modifica del record StoticoModifiche storico; sysDictField sysDictField; Types Type; ; super(_fieldId); sysDictField = new sysDictField(TableName2Id('CustTable'), _fieldId); type = sysDictField.baseType(); //In base al tipo di campo converto il valore in stringa e lo scrivo sia nel campo valoreprec che valoresucc switch(Type) { case Types::VarString : Storico.ValorePrec = substr(any2str(this.orig().(_fieldId)), 1, 100); Storico.ValoreSucc = substr(any2str(this.(_fieldId)), 1, 100); break; case Types::String : Storico.ValorePrec = substr(any2str(this.orig().(_fieldId)), 1, 100); Storico.ValoreSucc = substr(any2str(this.(_fieldId)), 1, 100); break; case Types::Date: Storico.ValorePrec = date2str(this.orig().(_fieldId), 123, 2, 4, 2, 4, 4); Storico.ValoreSucc = date2str(this.(_fieldId), 123, 2, 4, 2, 4, 4); break; case Types::Enum: Storico.ValorePrec = enum2str(this.orig().(_fieldId)); Storico.ValoreSucc = enum2str(this.(_fieldId)); break; case Types::Real: Storico.ValorePrec = num2str(this.orig().(_fieldId), 8, 2, 0, 0); Storico.ValoreSucc = num2str(this.(_fieldId), 8, 2, 0, 0); break; case Types::Integer: Storico.ValorePrec = int2str(this.orig().(_fieldId)); Storico.ValoreSucc = int2str(this.(_fieldId)); break; default : break; } Storico.IdCampo = _fieldId; Storico.NomeCampo = fieldid2name(tableName2Id('CustTable'), _fieldid); ttsBegin; Storico.insert(); ttsCommit; }
E’ possibile successivamente creare una form per far visualizzare tale tabella ad altri utenti. Si consiglia sempre di impostare nella proprietà del datasource, all’interno della form, il valore AllowEdit, AllowCreate e AllowDelete a No. Così facendo si impedisce all’utente qualsiasi modifica sul dato.
Bene, ora sai come realizzate un programma che ti permetta di tenere traccia di tutte le modifiche apportate ad una tabella.
*Metodo realizzato e testato per la versione 4 di Microsoft Dynamics AX.
Commenta per primo