Header Image

Translate

donderdag 15 november 2018

D365 - standaard rapport designs / layouts aanpassen

Uitgaande van minor changes in een rapport (zoals een veld verplaatsen, grotere/kleiner, HMTL enabelen etc.). Dit omdat dan de data hetzelfde blijft en er geen nieuwe velden / datasets uit de dataprovider (DP) moet komen kan dit allemaal herbruikt worden.  
  
Een standaard rapport aanpassen in v7 moet in twee stappen gebeuren: 
1. Het dupliceren / aanpassen in een nieuw model 
2. Het sturen naar het nieuwe rapport.  
  
Het dupliceren / aanpassen in een nieuw model 
In versie 7 is het niet mogelijk middels extensions een rapport te extenden. Er ook kan geen design middels extensions worden toegevoegd. De enige methode is om het rapport in zijn geheel te dupliceren.  
Met je project in eigen model open en actief, ga in de AOT naar het rapport. Rechtermuis, dupliceren. Deze komt dan in je project. Maak de veranderingen in het rapport.  
  
Het sturen naar het nieuwe rapport 
De aansturing welk rapport wordt gebruikt, is in te richten bij print management bij de verschillende modulen. Ondanks dat je misschien niet de optie 'print management' gebruiken aanzet bij de boeking.  
Bij modules, onder 'form setup" kan het één en ander ingericht worden voor print management. Hier kan je ook een rapport ontwerp selecteren; 
  
Het zit wat weggestopt, er is een slecht benadrukte knop hier: 
  
Hier vind je per rapport een node, kan je ook kopieën toevoegen. Aan de rechter kant kan een rapport worden gekozen:  
 Let op: ook al maak je geen gebruik van print management bij boeking, hier wordt wel gekeken naar het ontwerp dat gebruikt wordt 
  
De keuzes komen uit een tabel, genaamd PrintMgmtReportFormat 
Deze wordt (aan)gevuld vanuit code, elke keer als de "print management setup" form opend. Hiervoor moet wat code gemaakt worden: 
    [SubscribesTo(classstr(PrintMgmtReportFormatPublisher), delegatestr(PrintMgmtReportFormatPublisher, notifyPopulate))] 
    public static void notifyPopulate() 
    { 
        #PrintMgmtSetup 
        INTGlobal::addPrintMgmtReportFormat(PrintMgmtDocumentType::PurchaseOrderRequisition,  
                                            ssrsReportStr(INTPurchPurchaseOrder, Report),  
                                            ssrsReportStr(INTPurchPurchaseOrder, Report),  
                                            #NoCountryRegionId, 
                                            false); 
        INTGlobal::addPrintMgmtReportFormat(PrintMgmtDocumentType::PurchaseOrderConfirmationRequest,  
                                            ssrsReportStr(INTPurchPurchaseOrder, Report),  
                                            ssrsReportStr(INTPurchPurchaseOrder, Report),  
                                            #NoCountryRegionId, 
                                            false); 
    } 
Met deze code wordt het rapport automatisch toegevoegd. Let op: de INTGlobal::addPrintMgmtReportFormat is een public 1:1 kopie van  PrintMgmtReportFormatSubscriber::add. In V7 is deze methode private in de applicationsuite model en kan niet worden gebruikt. Als een rapport al bestaat, dan wordt deze niet opnieuw toegevoegd.  
  
Na een build kan het rapport gekozen worden in de lijst bij de print management setup. Mogelijk kan je ook het rapport handmatig invoeren in de tabel PrintMgmtReportFormat, maar aangezien je het rapport al moet ontwikkelen / inchecken, is een klein beetje extra code die je rapport opneemt in de standaard waarschijnlijk wel beter.  

Er is nog een maar; het is afhankelijk van hoe je het rapport te zien krijgt. Je kan namelijk via de gejournaliseerde informatie weergeven -> oorspronkelijk of vanuit het proces (boeking -> inquiry/confirmation). Het kan dus zijn dat het nieuwe ontwerp nog niet gebruikt wordt bij weergeven \ oorspronkelijk. Om dit ontwerp consequent te gebruiken, moet het rapport ook als standaard worden opgegeven. Hiervoor is de volgende code nodig: 

    /// <summary>
    /// Delegate handler for the getDefaultReportFormatDelegate method of the <c>PrintMgmtDocType</c> class.
    /// </summary>
    /// <param name = "_docType"><c>PrintMgmtDocumentType</c> enumeration value.</param>
    /// <param name = "_result">The <c>EventHandlerResult</c> object.</param>
    [SubscribesTo(classstr(PrintMgmtDocType), delegatestr(PrintMgmtDocType, getDefaultReportFormatDelegate))]
    public static void getDefaultReportFormatDelegateHandler(PrintMgmtDocumentType _docType, EventHandlerResult _result)
    {
        switch (_docType)
        {

            case PrintMgmtDocumentType::PurchaseOrderConfirmationRequest:
            case PrintMgmtDocumentType::PurchaseOrderRequisition:
                _result.result(ssrsReportStr(INTPurchPurchaseOrder, Report));
        }
    }
 

Let op: hierna moet wel één keer het verstopte print management scherm geopend worden, zodat de tabel geïnitialiseerd word.