(Legacy) How-to: Create header Pre v5.14
- Johannes Sebastian Nielsen
- Dennis Vibæk
- Michael Voigt
This article was written for legacy versions of Mobile WMS extension
New events was introduced in version 5.14 and this article was updated accordingly, see How-to: Create header
It is recommended to always keep your Mobile WMS extension up to date
Description
How to create a new header for Planned functions, in order to filter which documents to include (or exclude).
Creating new functionality
This articles describes creating a new custom header, this is only needed when creating entirely new functionality.
Perhaps you looking for filtering standard headers?
Step 1 - Define Header and Filters
Use OnGetReferenceData_OnAfterCreateHeaderConfigurations (v5.00-5.13) to create you new header.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAfterCreateHeaderConfigurations', '', true, true)]
local procedure OnGetReferenceData_OnAfterCreateHeaderConfigurations(var _HeaderConfigurationElement: Record "MOB HeaderField Element")
begin
with _HeaderConfigurationElement do begin
Create('MyReceiptFilters'); // New Header name to use instead of "ReceiveOrderFilters"
// Add standard location filter - this is already handled in standard Receive
AddList_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.
Currently you cannot overrule an existing header, so you must modify the standard Receive header in Mobile configuration like so:
<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
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
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.
Currently, when creating custom headers, you have to handle ALL events even if you don't need them.
- This is scheduled to change in 2020.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"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;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrders_OnSetFilterPurchaseOrder', '', true, true)]
procedure OnGetReceiveOrders_OnSetFilterPurchaseOrder(_HeaderFilter: Record "MOB NS Request Element"; var _PurchHeader: Record "Purchase Header"; var _PurchLine: Record "Purchase Line"; var _IsHandled: Boolean)
begin
// [Scenario] Handle filter for Purchase Orders
if _HeaderFilter.Name = 'DocumentNoFilter' then
_IsHandled := true;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrders_OnSetFilterSalesReturnOrder', '', true, true)]
procedure OnGetReceiveOrders_OnSetFilterSalesReturnOrder(_HeaderFilter: Record "MOB NS Request Element"; var _SalesReturnHeader: Record "Sales Header"; var _SalesReturnLine: Record "Sales Line"; var _IsHandled: Boolean)
begin
// [Scenario] Handle filter for Sales Return Orders
if _HeaderFilter.Name = 'DocumentNoFilter' then
_IsHandled := true;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrders_OnSetFilterTransferOrder', '', true, true)]
procedure OnGetReceiveOrders_OnSetFilterTransferOrder(_HeaderFilter: Record "MOB NS Request Element"; var _TransferHeader: Record "Transfer Header"; var _TransferLine: Record "Transfer Line"; var _IsHandled: Boolean)
begin
// [Scenario] Handle filter for Transfer Orders
if _HeaderFilter.Name = 'DocumentNoFilter' then
_IsHandled := true;
end;
Press the filter icon to show the header filter
Receive Order filter
Put-away Order filter
Pick Order filter