Storico delle modifiche di una tabella

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

Storico delle Modifiche - Proprietà Tabella

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.

Storico delle Modifiche - Tabella

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 AllowDeleteNo. 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.


 

Condividi con i tuoi amici

Articoli Correlati

Informazioni su Andrea Faion 408 Articoli
FAION ANDREA. Ho 35 anni e sono diplomato in informatica presso l'ITIS Kennedy di Pordenone. Da sempre appassionato a tutto ciò che concerne il mondo dell'informatica.

Commenta per primo

Lascia un commento