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
This articles describes creating Creating a new custom header, this is Header is only needed when creating entirely new custom functionality.
Perhaps you looking for filtering on existing standard headers?
What is a HeaderPerhaps you would like to modify a standard header field?
Step 1 - Define Header and Filters
Use the OnGetReferenceData_OnAddHeaderConfigurations to create you your new header.
// Step 1
[EventSubscriber(ObjectType::Codeunit, Codeunit::"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.
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.
[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;
Press the filter icon to show the header filter
Receive Order filter
Put-away Order filter
Pick Order filter