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()));
                }
            }
        }
    }
}