Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Warning |
---|
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
Excerpt |
---|
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?
What is a HeaderStep 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:
Code Block | ||||
---|---|---|---|---|
| ||||
<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) | ||||||
---|---|---|---|---|---|---|
|
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.
Note | ||
---|---|---|
| ||
Currently, when creating custom headers, you have to handle ALL events even if you don't need them.
|
[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