Versions Compared

Key

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

Description

Excerpt

Examples of sorting Order Lines.


This information applies to all Planned functions.

Expand
titleEvent flow for getting Orders and Lines
...OnSetFilter-events
Reads data from source tables
  • Add Filters
  • Modify Filters
    ...OnAfterSetFrom-events
    Data goes into accessor table "BaseOrderLineElement"
  • Add Data
  • Modify Data
  • Set Sorting Key Fields (Custom fields)
    ...OnAfterSetCurrentKey-events
    • Data is sorted
      • Set Sorting Key Fields (ONLY standard fields)
      • Set Sorting Direction
    (XML Response is transmitted to the Mobile Device)

    See more: Planned Functions

    There are two events for sorting order lines:

    1 . OnAfterSetCurrentKey-events

  • Set Sorting Direction
  • Set a new key using any of the fields in the Element table.
  • This will affect the 'Sorting' value in the Xml indirectly by affecting the looping of the record.
  • Can only be used if the field/tag to sort exists as a field in the Element table.

    2 . OnAfterSetFrom-events

  • Set Sorting1, [Sorting2, ...] values directly (internal fields used only for sorting).
  • 'Sorting' in the Xml is generated during a looping of the record.
  • If no other key is set, default sort order is "Sorting1, Sorting2, Sorting3, Sorting4, Sorting5".

  • Can be used to sort on any value, including custom values that do not exist as fields in the Element table.

    There are two events for sorting order lines:

    1 . OnAfterSetCurrentKey-events

      • Set Sorting Direction
      • Set a new key using any of the fields in the Element table
      • This will affect the 'Sorting' value in the Xml indirectly by affecting the looping of the record
      • Can only be used if the field/tag to sort exists as a field in the Element table

    2 . OnAfterSetFrom-events

      • Set Sorting1, [Sorting2, ...] values directly (internal fields used only for sorting)
      • 'Sorting' in the Xml is generated during a looping of the record
      • If no other key is set, default sort order is "Sorting1, Sorting2, Sorting3, Sorting4, Sorting5"
      • Can be used to sort on any value, including custom values that do not exist as fields in the Element table


    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


    Sorting on Existing fields

    Use OnAfterSetCurrentKey-events.


    • Change sorting key
      • Use .SetCurrentKey(field, [field2, ...])-function with any of the existing fields from the Line table (Record parameter on this event).


    • Change sorting direction
      • Use .Ascending(true/false)-function.
        Filter by label (Content by label)
        showLabelsfalse
        max152
        showSpacefalse
        sorttitle
        titleAvailable events
        cqllabel = "bc" and label = "orderlines" and label = "onaftersetcurrentkey" and label = "integrationevent"


    Sorting on Custom fields

    Use.OnAfterSetFrom-events.


    • Change sorting key 
      • Use Set_Sorting1()-function.
        Filter by label (Content by label)
        showLabelsfalse
        max150
        showSpacefalse
        sorttitle
        titleAvailable events
        cqllabel = "bc" and label = "orderlines" 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 Set_Sorting1..5 , which you can use to sort on up to four new custom fields .


    Example 1: Sort by Item No.

    • Change key to existing field "ItemNumber" on the base element
    • Change sorting direction to "Descending"

    For this task you can use an OnAfterSetCurrentKey event.


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

    Example 2: Sort by Quantity in decending order

    For this task you must use the OnAfterSetFrom event

    • Quantity is a number formatted as text, we need to pad the values with zeros to get the correct numeric sorting order

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Pick", 'OnGetPickOrderLines_OnAfterSetFromAnyLine', '', true, true)]
    localprocedure My2aOnGetPickOrderLines_OnAfterSetFromAnyLine(_RecRef: RecordRef; var _BaseOrderLineElement: Record "MOB Ns BaseDataModel Element")
    begin
        // Pad the text values with zeros to get the correct numeric sorting order
        _BaseOrderLineElement.Set_Sorting1(_BaseOrderLineElement.Get_Quantity().PadLeft(10, '0'));
    end;


    Change to decending order

    You can skip this subscriber if you want regular ascending order


    EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Pick", 'OnGetPickOrderLines_OnAfterSetCurrentKey', '', true, true)]
    procedure My2bOnGetReceiveOrderLines_OnAfterSetCurrentKey(var _BaseOrderLineElementView: Record "MOB Ns BaseDataModel Element")
    begin
        // OPTIONAL: Remove this part if you want regular ascending ordering
        _BaseOrderLineElementView.Ascending(false);
    end;


    Example 3: Sort by a custom field

    • Sort lines by you own custom field

    For this task you must use the OnAfterSetFrom event.


    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAfterSetFromAnyLine''', true, true)]
    procedure OnGetReceiveOrderLines_OnAfterSetFromAnyLine(_RecRef: RecordRefvar _BaseOrderLineElement: Record "MOB Ns BaseDataModel Element")
    var
         Item: Record Item;
    begin
         with _BaseOrderLineElement do begin

              // New custom field
              Item.Get(Get_ItemNumber());
              SetValue('SpecialEquipmentCode', Item."Special Equipment Code");

              // Sort by custom field
              Set_Sorting1(GetValue('SpecialEquipmentCode'));
         end;
    end;


    How it works behind the scenes

    The "sorting" tags determines the sorting on mobile as part of Order Lines GetOrderLines Response.

    • These examples affects the sorting value indirectly by affecting the looping of the record.
    • The sorting value is automatically calculated as a result of of the looping order.

      


    Filter by label (Content by label)
    showLabelsfalse
    showSpacefalse
    sorttitle
    titleSee also
    excerptTypesimple
    cqllabel = "bc" and label = "sortlines"



    Order Lines on the mobile device.