Thursday, February 13, 2014

Backup du versioning MorphX VCS

Voici un post intéressant sur AX 2009 qui est compatible pour AX Dynamics 2012, pour sauvegarder et porter les données liées au versioning d'objet MorphX.

En effet, en cas de rechargement de base de données sur un environnement de développement, les objets développés sont portables en AX Model (selon la couche de développemen) voirvia  un modelstore (toutes les couches compilées).

Pour éviter la perte des versions antérieurs stockés via l'outil VCS intégré à Dynamics, il est nécessaire de sauvegarder les tables SQL "SYSVERSION*" de la base d'origine :

- SYSVERSIONCONTROLMORPHXITEMTABLE --> contient les enregistrements d'objets avec leur chemin
- SYSVERSIONCONTROLMORPHXLOCKTABLE --> contient les objets en cours d'utilisation
- SYSVERSIONCONTROLMORPHXREVISIONTABLE --> contient les données de révision
- SYSVERSIONCONTROLPARAMETERS --> paramétrage de versioning (VCS, TFS etc..)
- SYSVERSIONCONTROLSYNCHRONIZELOG --> Utiliser pour TFS donc vide à priori en cas d'utilisation de VCS.

Un modèle simple mais qui nécessite une fois exporté/importé dans la nouvelle base, une correction du compteur de recID afin de repartir d'un nombre correct pour les prochains enregistrements de versioning.

Lien vers l'article

Wednesday, January 22, 2014

Récupérer les filtres et enregistrements d'un formulaire

Pour récupérer les valeurs de filtrages, entrées dans un client AX Dynamics, il m'a fallu tatonner jusqu'à trouver la solution suivante :

public void process(Args args, FormDataSource _formDataSource)
{
    QueryRun queryRun;
    QueryFilter     qf;
    QueryBuildRange range;
    Query           q;
    int j;
    int k = 1;
    int i = 1;
    int cnt,filtercnt;
    DictTable dictTable;
    DictField dictField;
    str test;
    ;

    q =  _formDataSource.queryRun().query();
    queryRun = new QueryRun(q);

    if(q)
    {

        // Récupération de l'appelant et des lignes cochées
        info (strFmt("Formulaire appelant %1, Company : %2. Nombre de ligne Selectionné = %3",

               args.name(),
               curExt(),  
               _formDataSource.recordsMarked().lastIndex()));

        for(i = 1; i <= q.dataSourceCount(); i++)
        {
            cnt = q.dataSourceNo(i).rangeCount();
            filtercnt = 0;
            if(!q.dataSourceNo(i).embedded())
            {
                filtercnt = q.queryFilterCount(q.dataSourceNo(k));
            }
            dictTable = new DictTable(q.dataSourceNo(k).table());

            for (k=1; k<= filtercnt; k++)
            {
                qf = q.queryFilter(k, q.dataSourceNo(i));
                if(qf)
                {

                    // Récupération du filtre
                    info (strFmt("%1, %2. Range = %3", dictTable.label(), qf.field(), qf.value()));
                }
            }
            ttsCommit;

            for (j=1; j<=cnt; j++)
            {
                range = queryRun.query().dataSourceNo(i).range(j);
                if(range.value())
                {

                    // Récupération du filtre
                    info(strfmt("%1, %2. Range = %3",dictTable.label(), range.AOTname(), range.value()));
                }
            }
        }
    }
}