vendredi 3 juin 2016

code x++ pour créer un document Word et le remplir à partir d'une table dynamics ax

Au cours de vos développement vous voulez (peut être) générer un document word qui contient certain information.

Voila un petit exemple d'utilisation du code x++ pour créer un document Word (.doc ou docx).

Dans cette exemple je vais utiliser uniquement du code X++ pour créer un document word qui contient un tableau. Notre tableau vas contenir le Compte client et Nom (du client)

J'ai créé une JOB et j'ai utiliser la table CustTable,


static void DJO_CreateWordTable(Args _args)
{
    TableId tableId;
    COM word;
    COM documents;
    COM document;
    COM bookmarks;
    COM bookmark;
    COM tables;
    COM table;
    COM rows;
    COM row;
    COM cells;
    COM cell;
    COM range;
    COM Borders;
    Query query;
    QueryRun queryRun;
    CustTable custTable;
    TmpSysTableField fields;
    DictField dictField;
    
    int i;
    
    #define.Word("Word.Application")
    #define.template(@"C:\tempsAX\table.doc");
    tableId = tableNum(CustTable);
    
    try
    {
        word = new COM(#Word);
    }
    catch (Exception::Internal)
    {
        if (word == null)
        {
            throw error("Microsoft Word is not installed");
        }
    }

    documents = word.documents();
    document = documents.add();
    range = document.range();
    tables = range.tables();
    table = tables.add(range,1,2);
    Borders = Table.borders();
    Borders.enable(true);
    rows = table.rows();
    //--> on insére les entéte dans la premiére ligne 
    i++;
    row = rows.item(i);
    cells = row.cells();
    cell = cells.item(1);
    range = cell.range();
    range.insertAfter("AccountNum" );
    cell = cells.item(2);
    range = cell.range();
    range.insertAfter("name");
    row = rows.add(); //nouvelle ligne 
    //<--
    
    /*l'utilisation de query et queryRun vous facilité la modification de ce code. mais dans cette exemple c'est inutile */
    //-->
    query = new Query();
    query.addDataSource(tableId);
    queryRun = new QueryRun(query);
    queryRun.next();
    custTable = queryRun.get(tableId);
    //<--    
    while select custTable
    {
    
    i++;
    row = rows.item(i);
    cells = row.cells();
    cell = cells.item(1);
    range = cell.range();
    range.insertAfter(custtable.AccountNum );
    cell = cells.item(2);
    range = cell.range();
    range.insertAfter(custtable.name());
    row = rows.add();
    }
    row.delete(); // on supprime la derniére ligne qui sera vide
    word.visible(true);
    document.saveas(#template);
}



et voila.





Aucun commentaire:

Enregistrer un commentaire