Versions Compared

Key

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

Description

Excerpt

Examples of sorting Order Lines.

 

Flow of events

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

Description

Excerpt

Examples of sorting Order Lines.

 

Flow of events




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
      max152150
      showSpacefalse
      sorttitle
      titleAvailable events
      cqllabel = "bc" and label = "orderlines" and label = "onaftersetcurrentkeyonaftersetfrom" and label = "integrationevent"
Sorting on Custom fields



  • Change sorting direction
    • This is done in two steps:
    1. Use
.OnAfterSetFrom-events.
  • Change sorting key 
    Use Set_Sorting1
    1. OnAfterSetFrom[ and the Set_Sorting1()-function.
    2. Use OnAfterSetCurrentKey and the .Ascending()-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 you can use to sort on up to four new custom fields .

Example: 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.


Helper Functions

The event parameter "_BaseOrderLineElementView" includes five sorting functions 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 ReceivePick",  'OnGetReceiveOrderLinesOnGetPickOrderLines_OnAfterSetCurrentKeyOnAfterSetFromAnyLine',  '', true, true)]
    localprocedure MyOnGetReceiveOrderLines My2aOnGetPickOrderLines_OnAfterSetCurrentKeyOnAfterSetFromAnyLine(_RecRef: RecordRef; var  _BaseOrderLineElementView: Record "MOB Ns BaseDataModel Element")
begin
     _BaseOrderLineElementView.SetCurrentKey(ItemNumber);
     _BaseOrderLineElementView.Ascending(false);
end;
 

Example: Sort by Quantity

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

For this task you must use the OnAfterSetFrom event.

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_OnAfterSetFromAnyLineOnAfterSetCurrentKey', '', true, true)]
    procedure My2OnGetPickOrderLines My2bOnGetReceiveOrderLines_OnAfterSetFromAnyLineOnAfterSetCurrentKey(_RecRef: RecordRef; var _BaseOrderLineElementBaseOrderLineElementView: Record "MOB Ns BaseDataModel Element")
    begin
        // Pad the text values with zeros to get the correct numeric sorting orderOPTIONAL: Remove this part if you want regular ascending ordering
        _BaseOrderLineElementBaseOrderLineElementView.Set_Sorting1(_BaseOrderLineElement.Get_Quantity().PadLeft(10, '0'));  
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 tag
          Item.Get(Get_ItemNumber());
          SetValue('SpecialEquipmentCode', Item."Special Equipment Code");

          // Sort by custom tag
          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.