Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Description

Excerpt

How to create a new header for Planned functions, in order to filter which documents to include (or exclude).


 

Creating new functionality

Creating a new header, is only needed when creating entirely new functionality.

Perhaps you looking for filtering standard headers?

Perhaps you would like to modify an standard header field?

 

What is a Header


 

Step 1 - Define Header and Filters 

Use the OnGetReferenceData_OnAddHeaderConfigurations to create you new header.


    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddHeaderConfigurations''', true, true)]
    local procedure OnGetReferenceData_OnAddHeaderConfigurations(var _HeaderFields: Record "MOB HeaderField Element")
    begin
        with _HeaderFields do begin
            InitConfigurationKey('MyReceiptFilters')// New Header name to use instead of "ReceiveOrderFilters"



            // Add standard location filter - this is already handled in standard Receive
            Create_ListField_Location(1);

            // Add our new custom filter - this is declared fully. It is a Text field.
            Create_TextField(2'DocumentNoFilter');
            Set_label('Doc. filter label:');
            Set_clearOnClear(true);
            Set_acceptBarcode(true);
            Set_length(20);
            Set_optional(true);
        end;
    end;

Tip

  • Note how helper-functions like Add_Location and Add_TextValue are used
  • There are many more to choose from


Step 2 - Modify Application.cfg

We have created a new header for Receive.


Code Block
languagexml
collapsetrue
<page id="Receive" type="OrderList" icon="mainmenureceive">
  <title defaultValue="@{PageReceiveOrderListTitle}" />
  <orderListConfiguration automaticOrderSelectionAfterFilter="true">
    <service id="Receive" />
        
    <!--CUSTOM--> 
    <!--<filter configurationKey="ReceiveOrderFilters" />-->
    <filter configurationKey="MyReceiptFilters" />
    <!--CUSTOM--> 
        
    <list listId="Orders" />
    <onOrderSelected navigateTo="ReceiveLines" />
    <unlockOrder title="@{ReleaseOrderMenuItem}"/>
  </orderListConfiguration>
</page>



Step 3 - Select your document event

Select all the events for the Planned function you are working on (We used "Receive" in this guide)

Supported events

Filter by label (Content by label)
showLabelsfalse
showSpacefalse
cqllabel = "bc" and label = "orders" and label = "onsetfilter" and label = "integrationevent" and ancestor = "47220743"

 

Step 4 - Structure your code

Make sure to affect all related documents.

A change in filter "PO Number" must affect both:

  • Receiving on "Warehouse Receipts" (based on Purchase orders)
  • Receiving directly on "Purchase Orders"

Make your code callable from both events:

  • OnGetReceiveOrders_OnSetFilterPurchaseOrder

  • OnGetReceiveOrders_OnSetFilterWarehouseReceipt

Tips:

  • Create a new procedure and call it from both events
  • Line filters affect which Order Headers are relevant.
    • If no Order Lines exists for a Header. The header is not included in the response.

 


Step 5 - Handle each document event

There are four OnSetFilter-events for Receive.



[EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrders_OnSetFilterWarehouseReceipt''', true, true)]
procedure OnGetReceiveOrders_OnSetFilterWarehouseReceipt(_HeaderFilter: Record "MOB NS Request Element"; var _WhseReceiptHeader: Record "Warehouse Receipt Header"; var _WhseReceiptLine: Record "Warehouse Receipt Line"; var _IsHandled: Boolean)
begin
    // [Scenario] Handle/Apply filter to Warehouse Receipts


    if _HeaderFilter.Name = 'DocumentNoFilter' then begin
        if _HeaderFilter."Value" <> '' then
            _WhseReceiptHeader.SetRange("No.", _HeaderFilter."Value");
        _IsHandled := true;
    end;

end;

   


Press the filter icon to show the header filter

Receive Order filter

Put-away Order filter


Pick Order filter