Description
Excerpt |
---|
Examples of sorting Order list |
This information applies to all Planned functions.
There are two events for sorting orders:
- Using OnAfterSetCurrentKey-events
- Set Sorting
...
- Direction
- Set Sorting Key Fields (Standard fields only)
- Using OnAfterSetFrom-events
- Set Sorting Key Fields (Custom fields)
Expand | ||
---|---|---|
| ||
See more: Planned Functions |
1: Sorting on existing fields
Use OnAfterSetCurrentKey-events.
Change sorting key
- Use
.SetCurrentKey(field)
-function with any of the existing fields existing fields from the Line Header table (Record parameter on this event).
- Use
Change sorting direction
- Use
.Ascending(true/false)
-function.
Filter by label (Content by label) showLabels false showSpace false cql label = "bc" and label = "
onaftersetcurrentkey" and label = "
integrationevent" and label = "
orders"
- Use
2: Sorting on
...
custom fields
Use.OnAfterSetFrom-events.
Change sorting key
- Use
Set_Sorting1()-
function.Filter by label (Content by label) showLabels false showSpace false cql label = "bc" and label = "orderlinesorders" and label = "onaftersetfrom" and label = "integrationevent"
- 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 you can use to sort on up to four new custom fields .
Sorting on multiple document sources
All except "Ship" have multiple document sources.
I.e. the default 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 at the mobile device is:
...
- Warehouse Receipts
...
- Purchase Orders
...
- Transfer Orders
...
- Sales Return Orders
... so essentially "grouping" orders by the All four document sources that can all be in the same list (with each "group" being internally ordered by document numbers).
When working with custom sorting, you will need to consider whether orders should still be "grouped" or can now be mixed across the four document sources.
Example: Existing fields
If you filter across all document types, then use the "Any"-event, else use the document-specific event(s)
Sorting on Existing fields ("OnAfterSetCurrentKey"-events)
Example 1
- Change key to existing field "Item no."
- Change sorting direction to "Descending"
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Put Away"
...
For this task you must use OnAfterSetCurrentKey event.
, '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::Codeunit, Codeunit::"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
...
- Sort lines by you own custom field
("OnAfterSetFrom"-events)
Note. For this task you must use the OnAfterSetFrom.: you must both:
- Set the value
- Enable sorting on it
Expand | ||
---|---|---|
| ||
|
Example 1:
Sort all picks by "Assigned User ID"
- Sort on "Assigned User ID'" from the source RecordRef
- For this "AnyEvent" the RecordRef can be "Warehouse Activity Header", "Sales Header", "Purchase Header" or "Transfer Header" depending on what documents are available to pick
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS ReceiveMOB WMS Pick", 'OnGetReceiveOrderLinesOnGetPickOrders_OnAfterSetFromAnyLineOnAfterSetFromAnyHeader', '', true true, true true)]
procedure OnGetReceiveOrderLines_OnAfterSetFromAnyLine local procedure MySortByCustomTag_OnGetPickOrders_OnAfterSetFromAnyHeader(_RecRef: RecordRef; var _BaseOrderLineElementBaseOrderElement: Record "MOB Ns BaseDataModel ElementMOB Ns BaseDataModel Element")
var
DataTypeManagement: ItemCodeunit "Data Type Management";
NewFieldRef: Record ItemFieldRef;
begin
if DataTypeManagement.FindFieldByName(_RecRef, NewFieldRef, with _LineElement do begin
// New custom tag'Assigned User ID') then
_BaseOrderElement.SetValue('AssignedUserID', 'Assigned to: ' + CopyStr(NewFieldRef.Value(), 1, NewFieldRef.Length()));
Item.Get(Get_ItemNumber());
SetValue('SpecialEquimentCode', Item."Special Equipment Code"); // Sort by custom tag
Set_Sorting1(GetValue('SpecialEquimentCode'));
end;
end; _BaseOrderElement.Set_Sorting1(_BaseOrderElement.GetValue('AssignedUserID'));
end;
Example 2:
Sort only Warehouse Picks by "Assigned User ID"
- Sort on "Assigned User ID'" from the Source Warehouse Activity Header
[EventSubscriber(ObjectType::Codeunit, Codeunit::"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;