- Created by Johannes Sebastian Nielsen, last modified on Jan 21, 2020
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 31 Next »
Description
How to create a header for Planned functions, in order to filter which documents to include (or exclude).
Select the right approach
Please consider reading these article before continuing to create a custom header.
What is a Header?
Step 1 - Define Header and Filters
Use the OnGetReferenceData_OnAfterCreateHeaderConfigurations 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 RefD HeaderConfig Element")
begin
with _HeaderConfigurationElement do begin
Create('MyReceiptFilters'); // New Header name to use instead of "ReceiveOrderFilters"
// -- Add the header Filters --
// 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.
Add_TextValue(
2, //id
'DocumentNoFilter',//name
'Doc. filter label:', //label
100, //label width
true, //clear on clear
true, //accept barcode
20, //length
true, //optional
'', //search type
'', //ean GS1Ai
false); //locked
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
Filter by label
There are no items with the selected labels at this time.
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.
You are given these parameters:
- _HeaderFilter.Name:
- Name of filter.
- I.e.: 'AssignedUser', 'ScannedValue', 'Location' etc.
- Or custom name given in OnGetReferenceData_OnAfterCreateHeaderConfigurations
- Use this to check if the event handling your desired filter.
- Name of filter.
- _HeaderFilter.Value:
- The filter value collected from the mobile user.
- Use or Modify this value for filtering.
- Use or Modify this value for filtering.
- The filter value collected from the mobile user.
- _WhseReceiptHeader:
- Resulting filtering set of Orders.
- Apply filters to affect the resulting OrderList.
- _WhseReceiptLine:
- Resulting filtering set of Order Lines.
- Apply filters to affect the resulting OrderList.
- Line filters also affects which Order are included.
- Empty lines = the order is not relevant.
- _IsHandled:
- Use this to decide whether the Standard code should continue to apply the filter as normal.
- You might want to Piggyback on a standard filter OR Overrule it.
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
- No labels