Versions Compared

Key

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

Description

Excerpt

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

Creating new functionality

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

Perhaps you looking for filtering on existing standard headers?

Perhaps you would like to modify

an

a standard header field?

What is a Header


Step 1 - Define Header and Filters 

Use the OnGetReferenceData_OnAddHeaderConfigurations to create you your new header.


    // Step 1

    [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_HeaderFields.InitConfigurationKey('MyReceiptFilters')// New Header name to use instead of "ReceiveOrderFilters"

                    // Add standard location filter - this is already handled in standard Receive
            Create        _HeaderFields.Create_ListField_Location(1);
            
        // Add our new custom filter - this is declared fully. It is a Text field.
            Create        _HeaderFields.Create_TextField(2'DocumentNoFilter');
            Set        _HeaderFields.Set_label('Doc. filter label:');
            Set        _HeaderFields.Set_clearOnClear(true);
            Set        _HeaderFields.Set_acceptBarcode(true);
            Set        _HeaderFields.Set_length(20);
            Set        _HeaderFields.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