Tuesday, January 29, 2013

Solution pour fusionner des PDF sous AX

Voici une solution intéressante pour fusionner des PDF sous AX Dynamics en utilisant une librairie C# de CodePlex (PDFSharp) : dynamicsaxgyan.wordpress.com/2012/08/15/merge-multiple-pdfs-in-to-single-pdf-report-using-x-in-dynamics-ax-2012/

Attention, il y a une petite coquille dans le code de sreenath qui a été relevé dans un commentaire de son article (cela donne une erreur de dépassement de boucle dans la librarie PDFSharp).


static void SR_MergePDFs(Args _args)
{
    PdfSharp.Pdf.PdfDocument outPutPDFDocument = new PdfSharp.Pdf.PdfDocument();
    PdfSharp.Pdf.PdfDocument inputPDFDocument = new PdfSharp.Pdf.PdfDocument();
    PdfSharp.Pdf.PdfPages pdfPages;
    container con = ["c:\\test2.pdf","c:\\test1.pdf"];
    // winapi::findfirstfile
    int i, j, pageCount;
    FileName pdfFile;
    InteropPermission permission;
    str errorMessage;
    ;
    try
    {
        permission = new InteropPermission(InteropKind::ClrInterop);
        permission.assert();
        for (i = 1; i <= conLen(con); i++)
        {
            pdfFile = conPeek(con,i);
            inputPDFDocument = PdfSharp.Pdf.IO.PdfReader::Open(pdfFile, PdfSharp.Pdf.IO.PdfDocumentOpenMode::Import);
            outputPDFDocument.set_Version(inputPDFDocument.get_Version());
            pageCount = inputPDFDocument.get_PageCount();
            pdfPages = inputPDFDocument.get_Pages();


// modification
            if (pageCount > 0)
            {
                for (j = 0 ; j < pageCount; j++)
                {
                outputPDFDocument.AddPage(pdfPages.get_Item(j));
                }

}

        }
        outputPDFDocument.Save("c\\mergedFile.pdf");
        CodeAccessPermission::revertAssert();
    }
    catch(Exception::CLRError)
    {
        // Get the CLR error before any other CLR operation
        errorMessage = AifUtil::getClrErrorMessage();
        CodeAccessPermission::revertAssert();
        throw error(errorMessage);
    }
}


Thanks to sreenath for this nice solution.

Configuration des emails sous DAX 2012

Voici un lien utile pour paramétrer les emails sous AX Dynamics 2012 : lien

Voici les pages également de référence coté Microsoft : Manage email

Ne pas oublier de gérer la partie batch qui s'occupe d'envoyer les notifications par mail (traitement par lot des mails dans System Administration).

Pour tester les emails en environnement de dev, un outil smtp/pop3 comme Argosoft + un thunderbird portable vous permettra de remplacer un système d'email coûteux.

Friday, January 25, 2013

Cache du client et multi environnement sous AX 2012

Un article très clair et détaillant la gestion du cache client par AX Dynamics.
L'auteur détaille notamment la manière de faire en cas de restauration d'environnement  AX sur plusieurs AOS (réinitialisation de la SYSSQMSETTINGS)

http://daxmusings.codecrib.com/2013/01/fixing-code-caching-on-ax-environment.html?showComment=1359104152828#c7999282833205874569


Wednesday, January 9, 2013

Problème de taille de table : Fractionner ou augmenter le buffer SQL ?

Recemment, je me suis retrouvé sur un problème lorsque j'ajoutais des champs sur une table temporaire dédié à un report SSRS :

La taille interne d'un enregistrement xxxxxxxxTmp est de 25296 octets, mais les performances de Microsoft Dynamics sont optimisées par défaut pour ne pas dépasser 24576 octets.

Il est vivement conseillé de fractionner la(es) table(s) en unités plus petites.

Vous pouvez également indiquer une valeur « Taille maximale de la marge » de 25 kilo-octets ou plus sous l'onglet « Réglage de la base de données » de l'utilitaire de configuration du serveur Microsoft Dynamics AX. La valeur par défaut est 24 kilo-octets.

Quittez immédiatement Microsoft Dynamics et suivez les instructions ci-dessus. L'utilisation des tables aura des résultats imprévisibles.

Deux solutions :
- Splitter la table
- Augmenter la taille du buffer sur le serveur OAS : Microsoft Dynamics AX Server Configuration Utility > Onglet Database Tuning > Champs Maximum Buffer Size qui est à 24 Kbytes par défaut.



Les conséquences de ce tuning sont minimes. La taille des tables proposés par Microsoft est choisie pour des raisons de performances. Leur augmentation dans la limite du raisonnable na pas d'impact surtout dans le cadre d'une table temporaire.

Théoriquement, voici ce qu'en dit Microsoft : Cliquez ici