Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Description

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 will return information from the BC standard field "Work Description" in the Sales Order header.

Other uses

  • This example can display any information from Business Central, like Comments, notes or instructions

Prerequisites

Please read Lookup Functions to ensure this flow suits your requirement.

Step 1: Defining a new page for the custom Lookup function 

This part requires you to edit the Mobile Configuration Files

Add this section in the <pages> tag.


The <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)


Add to application.cfg
<!-- 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.

Add to application.cfg
<!-- 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)]
    local procedure 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)]
    local procedure 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());

  • 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

  • No labels