- Created by Johannes Sebastian Nielsen, last modified on Dec 22, 2023
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 84 Current »
Description
Examples of sorting Order Lines.
This information applies to all Planned functions.
There are two events for sorting order lines:
- 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
- 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
- ...OnSetFilter-events
- Reads data from source tables
- Add Filters
- Modify Filters
- Reads data from source tables
- ...OnAfterSetFrom-events
- Data goes into accessor table "BaseOrderLineElement"
- Add Data
- Modify Data
- Set Sorting Key Fields (Custom fields)
- Data goes into accessor table "BaseOrderLineElement"
- ...OnAfterSetCurrentKey-events
- Data is sorted
- Set Sorting Key Fields (ONLY standard fields)
- Set Sorting Direction
- Data is sorted
- (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).
- Use
Change sorting direction
- Use
.Ascending(true/false)
-function.Available events
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
- Use
Sorting on Custom fields
Use.OnAfterSetFrom-events.
Change sorting key
- Use
Set_Sorting1()-
function.Available events
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
- Use
Change sorting direction
- This is done in two steps:
- Use OnAfterSetFrom[ and the
Set_Sorting1()
-function. - 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::Codeunit, Codeunit::"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)]
local procedure 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::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAfterSetFromAnyLine', '', true, true)]
procedure OnGetReceiveOrderLines_OnAfterSetFromAnyLine(_RecRef: RecordRef; var _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.
See also
-
Page:How-to: Sorting of Order Lines — Examples of sorting Order Lines.
-
Page:OnGetPickOrderLines_OnAfterSetFromAnyLine — Populate values on Order Lines displayed at the mobile device (derived from any of four associated line tables). Parameters includes a RecRef-instance for the line table.
-
Page:OnGetReceiveOrderLines_OnAfterSetFromAnyLine — Populate values in Order Lines displayed at the mobile device (derived from any of four associated line tables). Parameters includes a RecRef-instance for the line table.
Order Lines on the mobile device.
- No labels