Info | ||
---|---|---|
| ||
|
...
To group a number of lines, two events is needed to get the group working: One event to define how lines are grouped (mandatory) and one event to handle how each group is displayed at the mobile device (optional).
- 'OnGetXXXOrderLines_OnAfterSetFromXXX' : Use any SetFrom-event from (planned) Wms Document Handlers to define how lines are grouped
- 'OnAfterGroupByBaseOrderLineElements' : Triggered once per group. Here you can optionally change how the "grouped" element is displayed at the mobile device
- (Also, changes are needed to application.cfg to enable the group/ungroup functionatlity see below)
...
// Putaway: Decide which elements can be grouped (SN specific tracking)
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Put Away", 'OnGetPutAwayOrderLines_OnAfterSetFromWarehouseActivityLine', '', true, true)]
local procedure OnGetPutAwayOrderLines_OnAfterSetFromWarehouseActivityLine(_WhseActLineTake: Record "Warehouse Activity Line"; var _BaseOrderLineElement: Record "MOB NS BaseDataModel Element")
var
Item: Record Item;
ItemTrackingCode: Record "Item Tracking Code";
begin
Item.Get(_WhseActLineTake."Item No.");
if (ItemTrackingCode.Get(Item."Item Tracking Code") and ItemTrackingCode."SN Specific Tracking") then begin
// Group SN Specific Tracked items
_BaseOrderLineElement.SetGroupBy('ItemNumber,UnitOfMeasure,FromBin,ToBin');
_BaseOrderLineElement.SetValue('MyGroupName', 'PutAway.GroupBySerialNumber'); // Some identifier for this GroupBy condition to look for in OnAfterGroupBySome unique identifier for this GroupBy condition to look for in OnAfterGroupBy-event
end;
end;
// Putaway: Handle appearance of "grouped" element to be displayed at mobile device
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Base Document Handler", 'OnAfterGroupByBaseOrderLineElements', '', true, true)]
local procedure OnAfterGroupByBaseOrderLineElements(var _GroupOrderLineElement: Record "MOB Ns BaseDataModel Element"; var _IsGrouped: Boolean; var _BaseOrderLineElements: Record "MOB Ns BaseDataModel Element"; var _IsHandled: Boolean)
begin
if (_GroupOrderLineElement.GetValue('MyGroupName') = 'PutAway.GroupBySerialNumber') then begin
_IsGrouped := _BaseOrderLineElements.Count() > 1; // Suppress grouping if this group includes only a single element
_GroupOrderLineElement.Set_DisplayLine4(StrSubstNo('Serial No.: Yes')); // Only used if the elements is actually grouped
// Optional: Since these elements can be grouped/ungrouped on the fly at the mobile device, add some text to indicate this
if _IsGrouped then begin
_BaseOrderLineElements.FindSet();
repeat
_BaseOrderLineElements.Set_DisplayLine4(_BaseOrderLineElements.Get_DisplayLine4() + ' (can be grouped)');
until _BaseOrderLineElements.Next() = 0;
end;
_IsHandled := true;
end;
end;
Changes to application.cfg
...