Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Description
Excerpt |
---|
Adding a new custom Lookup function with one "Header field" to show simple lookup response. |
- This example will result in a lookup function accessible by a Action.
- The lookup displays "Work Description"
- from a the Sales Order header
Other uses
- This
- - but this example can used display any information from Business Central, like Comments, notes or instructions
Prerequisites
Please read- , Notes, Instructions etc.
See Lookup Functions to ensure this flow suits your requirement.
Step 1: Defining a new
page for the custom Lookup functioncustom lookup page
This part requires you to edit the Mobile Configuration Files
Add this section in the <pages> tag.
The Notable properties:
<header> element has two properties in the to achieve the desired behavior on the device.
- automaticAcceptOnOpen = Defines if the values in the header should be automatically accepted
- hideAfterAccept = If true, hide (collapse) the header when "Accept"-button is pressed at Mobile Device
Tee <onResultSelected> has an empty setting
- navigateTo= Used to navigate to another page when selecting the lookup result (Null in this example)
Code Block | ||||
---|---|---|---|---|
| ||||
<!-- Custom --> <page id="WorkDescription" type="Lookup" icon="stopwatch"> <title defaultValue="Work Description"/> <lookupConfiguration type="WorkDescription" useRegistrationCollector="false"> <header configurationKey="WorkDescriptionHeader" automaticAcceptOnOpen="true" hideAfterAccept="true"/> <onResultSelected enabled="true" navigateTo="null"/> <list listId="Lookup"/> </lookupConfiguration> </page> <!-- Custom --> |
Add this section to the <actions> tag in the Pick page.
Code Block | ||||
---|---|---|---|---|
| ||||
<!-- Custom --> <open id="WorkDescription" icon="stopwatch" title="Work Description"/> <!-- Custom --> |
Step 2: Define Header and a Header Field
We only need to add one field called "ReferenceID".
This value will automatically be filled in, because "ReferenceID" is already present on all Planned Functions order and orderline -responses.
"ReferenceID" is basically a RecordID which identifies an Order or Orderline.
Using event OnGetReferenceData_OnAddHeaderConfigurations
// Step 2 Create new custom ConfigurationKey
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddHeaderConfigurations', '', true, true)]
localprocedure OnGetReferenceData_OnAddHeaderConfigurations(var _HeaderFields: Record"MOB HeaderField Element")
begin
// Identifier for new ConfigurationKey - replace by your own key name
_HeaderFields.InitConfigurationKey('WorkDescriptionHeader');
// Add Header Fields
_HeaderFields.Create_TextField_ReferenceID(1); // "ReferenceID" is basically a RecordID which is present on all Planned functions. This is perfect for identifying the Sales Order No. or Whse. Activity
end;
Step 3: Handle lookup
When the Header has been accepted, a final request is made to lookup the information ("Lookup")
In this step you must handle your custom lookup named "WorkDescription" and read the collected values (BackendID).
We will return a "LookupResponseElement" containing only DisplayLine1.
Using event OnLookupOnCustomLookupType...
// Step 3 Handle lookup
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Lookup", 'OnLookupOnCustomLookupType', '', true, true)]
localprocedure OnLookupOnCustomLookupType(_MessageId: Guid; _LookupType: Text; var _RequestValues: Record"MOB NS Request Element"; var _LookupResponseElement: Record"MOB NS WhseInquery Element"; var _RegistrationTypeTracking: Text; var _IsHandled: Boolean)
begin
if _LookupType <> 'WorkDescription'then
exit;
// Create new Response Element
_LookupResponseElement.Create();
_LookupResponseElement.Set_DisplayLine1(GetWorkDescription(_RequestValues.Get_ReferenceID())); // Use "ReferenceID" value from the Request values
_IsHandled := true;
end;
local procedure GetWorkDescription(_RecordID: Text) ReturnValue: Text
var
WhseActHeader: Record "Warehouse Activity Header";
WhseActLine: Record "Warehouse Activity Line";
SalesHeader: Record "Sales Header";
MobToolbox: Codeunit "MOB Toolbox";
RecRef: RecordRef;
begin
MobToolbox.ReferenceIDText2RecRef(_RecordID, RecRef);
case RecRef.Number() of
Database::"Sales Header":
begin
// Pick directly for Sales Order
RecRef.SetTable(SalesHeader);
ReturnValue := SalesHeader.GetWorkDescription();
end;
Database::"Warehouse Activity Header":
begin
RecRef.SetTable(WhseActHeader);
// Inventory Pick
if WhseActHeader.Type = WhseActHeader.Type::"Invt. Pick" then
if SalesHeader.Get(SalesHeader."Document Type"::Order, WhseActHeader."Source No.") then
ReturnValue := SalesHeader.GetWorkDescription();
// Warehouse Pick
if WhseActHeader.Type = WhseActHeader.Type::"Pick" then begin
WhseActLine.SetRange("Activity Type", WhseActLine."Activity Type"::Pick);
WhseActLine.SetRange("No.", WhseActHeader."No.");
WhseActLine.SetRange("Source Type", Database::"Sales Line");
if WhseActLine.FindFirst() then
if SalesHeader.Get(SalesHeader."Document Type"::Order, WhseActLine."Source No.") then
ReturnValue := SalesHeader.GetWorkDescription();
end;
end;
end;
if ReturnValue = '' then
ReturnValue := 'No Work Description for ' + _RecordID;
end;
"ReferenceID" vs. "BackendID" / "OrderBackendID"
If "ReferenceID" is not present in the XML Request, you can use the default "BackendID" / "OrderBackendID" -values.
Depending on the context where you are adding the new menu Item, the XML Response will be different:
- Action from "Orders List" e.g "GetPickOrders":
- <BackendID> is used
- Evaluate(BackendId, _RequestValues.Get_BackendID());
- <BackendID> is used
- Use the new action on an "Order Lines List" e.g. "GetPickOrderLines"
- <OrderBackendID> is used
New menu item
"Work Description" is shown in the context menu on the Pick Orders list
Lookup result
Message is displayed