Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Description

Excerpt

Examples of sorting Order list

...

This information applies to all Planned functions.


There are two events for sorting orders:

...

Expand
titleEvent flow for getting Orders and Lines
  1. ...OnSetFilter-events

    • Reads data from source tables
      • Add Filters
      • Modify Filters


  2. ...OnAfterSetFrom-events

    • Data goes into accessor table "BaseOrderLineElement"
      • Add Data
      • Modify Data
      • Set Sorting Key Fields (Custom fields)


  3. ...OnAfterSetCurrentKey-events

    • Data is sorted
      • Set Sorting Key Fields (ONLY standard fields)
      • Set Sorting Direction


  4. (XML Response is transmitted to the Mobile Device)

See more: Planned Functions


1: Sorting on existing fields 

...

  • Change sorting key 
    • Use Set_Sorting1()-function.
      Filter by label (Content by label)
      showLabelsfalse
      showSpacefalse
      cqllabel = "bc" and label = "orders" and label = "onaftersetfrom" and label = "integrationevent"


  • Change sorting direction
    • This is done in two steps:
    1. Use OnAfterSetFrom[ and the Set_Sorting1()-function.
    2. Use OnAfterSetCurrentKey and the .Ascending()-function.

Helper Functions

The event parameter "_BaseOrderLineElementView" includes five sorting functions you can use to sort on up to four new custom fields.

Sorting multiple document sources using "Any-event"


If you work across locations you might also want to filter across Affect all sources by using "Any"-events

If you work across locations you might also want to filter across all of them

For example, the sorting for Receive orders list is:

...

  • Change key to existing field "Item no."
  • Change sorting direction to "Descending"

[EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Put Away", 'OnGetPutAwayOrderLines_OnAfterSetCurrentKey''', true, true)]
procedure OnGetPutAwayOrderLines_OnAfterSetCurrentKey(var _BaseOrderLineElementView: Record "MOB Ns BaseDataModel Element")
begin
     _BaseOrderLineElementView.SetCurrentKey(ItemNumber);
     _BaseOrderLineElementView.Ascending(false);
end;


Example 2

  • Change key to existing field "Order No."

[EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrders_OnAfterSetCurrentKey''', true, true)]
procedure OnGetReceiveOrders_OnAfterSetCurrentKey(var _BaseOrderElementView: Record "MOB Ns BaseDataModel Element")
begin
     _BaseOrderElementView.SetCurrentKey(BackendID);
     _BaseOrderElementView.Ascending(true);
end;


Sorting on Custom fields ("OnAfterSetFrom"-events)

...

  1. Set the value
  2. Enable sorting on it


Expand
titleSee event parameters
  • _[SourceTable]
    • The source table from where the data is read.
      • This parameter is only for reference.
      • It is not to be modified and filters does not have any effect.

  • _BaseOrderElement
    Helper functions to identify and manipulate the Order-element

    • Set
    • Get
      • Get_Value
        • Get any value already set on the element
      • Get_BackendID
        • Get Order No.
      • Get_RecRefFromReferenceID
        • Get RecordRef to the Order

Example 1: 

Sort all picks by "Assigned User ID"

...


    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Pick", 'OnGetPickOrders_OnAfterSetFromAnyHeader''', true, true)]
    local procedure MySortByCustomTag_OnGetPickOrders_OnAfterSetFromAnyHeader(_RecRef: RecordRefvar _BaseOrderElement: Record "MOB Ns BaseDataModel Element")
    var
        DataTypeManagement: Codeunit "Data Type Management";
        NewFieldRef: FieldRef;
    begin
        if DataTypeManagement.FindFieldByName(_RecRef, NewFieldRef, 'Assigned User ID'then
            _BaseOrderElement.SetValue('AssignedUserID''Assigned to: ' + CopyStr(NewFieldRef.Value()1, NewFieldRef.Length()));

        _BaseOrderElement.Set_Sorting1(_BaseOrderElement.GetValue('AssignedUserID'));
    end;

Example 2:

Sort only Warehouse Picks by "Assigned User ID"

...


    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Pick", 'OnGetPickOrders_OnAfterSetFromWarehouseActivityHeader''', true, true)]
    local procedure My02GetPickOrders_OnAfterSetFromWarehouseActivityHeader(_WhseActHeader: Record "Warehouse Activity Header"; var _BaseOrderElement: Record "MOB Ns BaseDataModel Element")
    begin
        _BaseOrderElement.SetValue('AssignedUserID''Assigned to: ' + _WhseActHeader."Assigned User ID");
        _BaseOrderElement.Set_Sorting1(_BaseOrderElement.GetValue('AssignedUserID'));
    end;