[Gelöst]BC25 - View Übergibt Filter nicht an neuen Datensatz

7. Oktober 2025 15:49

Hallo Zusammen,

in einen von mir erstellten Rollencenter habe ich eine Action, in der Area Sections:

Code:
 
action(VKAU_Handwerk)
                {
                    Caption = 'Handwerk', Comment = 'de-DE=Handwerk';
                    ApplicationArea = all;
                    RunObject = Page "Sales Order List Departments";
                    RunPageView = WHERE(Fachbereich = CONST('HANDWERK'));
                }


Ein Klick darauf öffnet mir die Page "Sales Order List Departments" (Geht auf die Table 36 Sales header). Die Datensätze sind gefiltert auf Fachbereich = HANDWERK.

Klicke ich jetzt auf neuen Datensatz, geht die Page 42 auf, und der Filter auf Fachbereich ist weg.
Ich möchte aber dass bei Neuanlage das Feld Fachbereich vorbelegt wird.

Dafür habe ich ein Subscriber

Code:
    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnBeforeInsertEvent', '', false, false)]
    local procedure SalesHeaderOnBeforeInsertEvent(var Rec: Record "Sales Header"; RunTrigger: Boolean)

   FachbereichFilter := Rec.GetFilter("Fachbereich");


        if (FachbereichFilter <> '') and (Rec."Fachbereich" = '') then
            Rec."Fachbereich" := CopyStr(FachbereichFilter, 1, MaxStrLen(Rec."Fachbereich"));



Der Filter auf Fachbereich ist an dieser Stelle ist immer leer.

Dann habe ich im Rollencenter die Eigenschaft RunPageLink hinzugefügt:

Code:
                action(VKAU_Handwerk)
                {
                    Caption = 'Handwerk', Comment = 'de-DE=Handwerk';
                    ApplicationArea = all;
                    RunObject = Page "Sales Order List Departments";
                    RunPageView = WHERE(Fachbereich = CONST('HANDWERK'));
                   RunPageLink = Fachbereich = CONST('HANDWERK');
                }


Mit RunPageLink wird im OnBeforeInsertEvent auch der Filter auf Fachbereich gesetzt, und der Wert kann in das Feld übernommen werden.

Soweit so gut ...

Nun habe ich auf der Page "Sales Order List Departments" einige Views:
Code:
pageextension 50001 SalesOrderDepartmentsList extends "Sales Order List Departments"
{
    views
    {
        addfirst
        {
            view(Handwerk)
            {
                Caption = 'Handwerk', Comment = 'de-DE=Handwerk';
                Filters = where(Fachbereich = const('Handwerk'));
                SharedLayout = false;
            }

...


Wenn ich nun auf einen dieser Views klicke, habe ich wieder das Problem, wenn sich die Page 42 öffnet,
ich wieder keinen Filter auf Fachbereich habe. Der ist dann Leer. Und kann im OnBeforeInsertEvent nicht gefunden werden.

Kann man dass irgendwie lösen?
Gibt es vielleicht eine andere Herangehensweise ?


Danke.
Zuletzt geändert von elTorito am 10. Oktober 2025 08:42, insgesamt 1-mal geändert.

Re: BC25 - View Übergibt Filter nicht an neuen Datensatz

10. Oktober 2025 08:42

Hi,

ich hab es wie folgt gelöst:

Code:
pageextension 50009 SalesOrderList extends "Sales Order List"
{
    views
    {
        addfirst
        {
            view(Rechnungsstellung)
            {
                Caption = 'Handwerk;
                Filters = where(Fachbereich= const('Handwerk'));
                SharedLayout = false;
            }
        }
    }
    trigger OnOpenPage()
    begin
        BindSubscription(SalesOrderSubscriber)
    end;

    var
        SalesOrderSubscriber: Codeunit "Sales OrderSubscriber";
}


In der Codeunit:
Code:

    EventSubscriberInstance = Manual;

    [EventSubscriber(ObjectType::Page, Page::"Sales Order", 'OnNewRecordEvent', '', false, false)]
    local procedure SalesOrder_NewRecord(BelowxRec: Boolean; var Rec: Record "Sales Header"; var xRec: Record "Sales Header")
    begin
        Rec.Fachbereich := FachbereichFilterText;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Sales Order List", 'OnOpenPageEvent', '', false, false)]
    local procedure SalesOrderList_OnOpenPage(var Rec: Record "Sales Header")
    begin
        FachbereichFilterText := rec.GetFilter(rec.Fachbereich);
       
     if (FachbereichFilterText = '')then
            UnbindSubscription(this);
    end;


    [EventSubscriber(ObjectType::Table, database::"Sales Header", OnBeforeInsertEvent, '', false, false)]
    local procedure SalesHeader_OnBeforeInsertEvent(var rec: Record "Sales Header")
    var
        Department: Record Departments;
        FachbereichFilter: Text;
    begin
        FachbereichFilter := rec.GetFilter("Fachbereich");

        if (FachbereichFilter <> '') and (rec."Fachbereich" = '') then
            rec."Fachbereich" := CopyStr(FachbereichFilter, 1, MaxStrLen(rec."Fachbereich"));

        case rec."Document Type" of
            DocType::Order:
                begin
                    IF Department.GET(rec.Fachbereich) THEN begin
                        Department.TestField(NoSerieOrder);
                        Department.TestField("Posted NoSerieInv");
                        Department.TestField("NoSerieShipment");
                        NextNo := NoSeries.GetNextNo(Department.NoSerieOrder, WorkDate(), true);
                        rec."No." := NextNo;
                        rec."No. Series" := Department.NoSerieOrder;
                        rec."Posting No. Series" := Department."Posted NoSerieInv";
                        rec."Shipping No. Series" := Department.NoSerieShipment;
                    end;
                end;
        end;
    end;

    var
        FachbereichFilterText: Text;
        DocType: Enum "Sales Document Type";