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
ana 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::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.
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