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.


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)]
local 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)]
local 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.