PageFooter sind nicht immer dort, wo sie sein sollten

Ich kenne kein einziges AX-Projekt, in dem nicht zumindest einer der Berichte Auftragsbestätigung, Ausgangslieferschein oder Ausgangsrechnung angepasst worden sind. Und deshalb stolpere ich auch immer wieder über das selbe Problem: Man erweitert einen Bericht (Report) um einen PageFooter, der aber nicht auf jeder Seite angedruckt werden soll.

Die meisten Entwickler lösen dies einfach über die zur Section gehörige Methode executeSection() wobei sie den Aufruf super() ahänigig von irgendwelchen Kriterien ausführen oder nicht. Man findet z.B. solcherart Code des öfteren:

public void executeSection()
{
    ;
    if (salesFormLetterReport.isFooterPresentForCurrentPrintSetting())
    {
        super();
    }
}

Obiger Code ist z.B. aus dem PageFooter namens FooterText aus dem Report SalesConfirm (=Auftragsbestätigung). Hier ist das Ziel der Methode, den sog. Fusszeilentext in dieser Section immer nur dann anzudrucken, wenn dies in den Druckverwaltungseinstellungen für diesen Bericht (unter Debitoren / Einstellungen / Formulareinstellungen / Allgemeines / Druckverwaltung) entsprechend parametriert ist.

Dynamics AX ist nun aber leider so dumm, daß es sich - obwohl hier vielleicht gar kein Text parametriert ist - dennoch am Bericht den entsprechenden Platz reserviert. D.h. beim Ausdrucken des entsprechenden Dokumentes "rutschen" evtl. andere PageFooter zu weit hinauf und man verliert wertvollen Platz für Auftragspositionen o.ä.

Einfach umgehen kann man dieses Fehlverhalten über das deaktivieren der entsprechenden Section in der fetch()-Methode:

boolean  fetch()
{
    ...

    if ( !salesFormLetterReport.isFooterPresentForCurrentPrintSetting())
    {
        element.disableSection(FooterText); // FooterText ist der Name der Section
    }

    ...
}

Es gibt natürlich auch noch andere Wege. Beispielsweise könnte man die Höhe der ganzen Section über

FooterText.height(0, units::mm);

zurücksetzen. Es kommt immer auf die jeweilige Anforderung und den Aufbau des Reports an, für welche Variante man sich entscheidet.

Wichtig ist nur, immer super() in der exceuteSection() aufrufen!

Dieser Beitrag bezieht sich auf die Versionen:
Axapta 2.5, Axapta 3.0, Dynamics AX 4.0, Dynamics AX 2009

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu