Info | ||
---|---|---|
| ||
Extension MOB5.27 and Android App v1.5.9 |
...
- Only for “Header" Steps. Not "Line" steps
- Steps without conditions are better created using OnAddStepsToAnyHeader-events, i.e. OnGetReceiveOrderLines_OnAddStepsToAnyHeader and similar events
Overview
Table of Contents | ||||||
---|---|---|---|---|---|---|
|
Example 1: Three steps with interdependence for Ship
...
...
Important: "HasValue()" must be used to check if a step has been registered and ensures a step is never returned more than once
- Step1 is always shown
- Step2 is only shown if step1 has a value > 5
- Step3 is only shown if step2 has a value > 5
Example 2 & 3: Posting Date for Receive
...
// OnGetReceiveOrderLines
// Create a RadioButton step in the default header collector (for warehouse receipts only)
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader', '', true, true)]
local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRef; var _StepsElement: Record "MOB Steps Element")
begin
if _RecRef.Number() <> Database::"Warehouse Receipt Header" then
exit;
_StepsElement.Create_RadioButtonStep(10000, 'MyPostingDateRadioButtonStep');
_StepsElement.Set_header('Posting Date');
_StepsElement.Set_listValues('Today;Yesterday;Other date');
_StepsElement.Set_defaultValue('Today');
end;
Step 1.2 - Interrupt posting (conditionally) to pick posting date from a calendar
...
// OnPostReceiveOrder
// Create a conditional step on posting based on collected value from the 'MyPostingDateRadioButtonStep' created above
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAddStepsToWarehouseReceiptHeader', '', true, true)]
local procedure MyOnPostReceiveOrder_OnAddStepsToWarehouseReceiptHeader(var _OrderValues: Record "MOB Common Element"; _WhseReceiptHeader: Record "Warehouse Receipt Header"; var _StepsElement: Record "MOB Steps Element")
begin
// Break when any option different from 'Other date' was selected in the 'MyPostingDateRadioButtonStep'
if _OrderValues.GetValue('MyPostingDateRadioButtonStep') <> 'Other date' then
exit;
// Break if new datestep for 'Other date' is already collected to prevent infinite loop
if _OrderValues.HasValue('MyPostingDate') then
exit;
// Create a new date step for manually selecting Posting Date
_StepsElement.Create_DateStep(10000, 'MyPostingDate');
_StepsElement.Set_header('Posting Date');
_StepsElement.Set_minDate(Today() - 10);
_StepsElement.Set_maxDate(Today());
end;
Step 1.3 - Set Posting Date
...
// OnPostReceiveOrder
// Set new posting date including using a value from conditional step 'MyPostingDate'
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnBeforePostWarehouseReceipt', '', true, true)]
local procedure MyOnPostReceiveOrder_OnBeforePostWarehouseReceipt(var _OrderValues: Record "MOB Common Element"; var _WhseReceiptHeader: Record "Warehouse Receipt Header")
var
PostingDate: Date;
begin
case _OrderValues.GetValue('MyPostingDateRadioButtonStep') of
'Today':
PostingDate := Today();
'Yesterday':
PostingDate := Today() - 1;
'Other date':
PostingDate := _OrderValues.GetValueAsDate('MyPostingDate', true);
end;
if (PostingDate <> 0D) and (PostingDate <> _WhseReceiptHeader."Posting Date") then
_WhseReceiptHeader.Validate("Posting Date", PostingDate);
end;
Example 3: Add extra steps for all document sources (AnyHeader)
...
// OnGetReceiveOrderLines
// Create a step in the default header collector (displayed for "Warehouse Receipt" and "Purchase Order", but not "Transfer Order" or "Sales Return Order")
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader', '', true, true)]
local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRef; var _StepsElement: Record "MOB Steps Element")
begin
if (_RecRef.Number() in [Database::"Warehouse Receipt Header", Database::"Purchase Header"]) then begin
_StepsElement.Create_RadioButtonStep(10000, 'MyPostingDateRadioButtonStep');
_StepsElement.Set_header('Posting Date');
_StepsElement.Set_listValues('Today;Yesterday;Other date');
_StepsElement.Set_defaultValue('Today');
end;
end;
Step 2.2 - Interrupt posting (conditionally) to pick posting date from a calendar
...
// OnPostReceiveOrder
// Create a conditional step on posting based on collected value from the 'MyPostingDateRadioButtonStep' created above
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAddStepsToAnyHeader', '', true, true)]
local procedure MyOnPostReceiveOrder_OnAddStepsToAnyHeader(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRef; var _StepsElement: Record "MOB Steps Element")
begin
// Break when any option different from 'Other date' was selected in the 'MyPostingDateRadioButtonStep'
if _OrderValues.GetValue('MyPostingDateRadioButtonStep') <> 'Other date' then
exit;
// Break if new datestep for 'Other date' is already collected to prevent infinite loop
if _OrderValues.HasValue('MyPostingDate') then
exit;
// Create a new date step for manually selecting Posting Date
_StepsElement.Create_DateStep(10000, 'MyPostingDate');
_StepsElement.Set_header('Posting Date');
_StepsElement.Set_minDate(Today() - 10);
_StepsElement.Set_maxDate(Today());
end;
Step 2.3 - Set Posting Date
...
// OnPostReceiveOrder
// Set new posting date including using a value from conditional step 'MyPostingDate'. Step can exist only for "Warehouse Receipt" or "Purchase Order"
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnBeforePostAnyOrder', '', true, true)]
local procedure MyOnPostReceiveOrder_OnBeforePostAnyOrder(var _OrderValues: Record "MOB Common Element"; var _RecRef: RecordRef)
var
WhseReceiptHeader: Record "Warehouse Receipt Header";
PurchHeader: Record "Purchase Header";
PurchRelease: Codeunit "Release Purchase Document";
PostingDate: Date;
begin
case _OrderValues.GetValue('MyPostingDateRadioButtonStep') of
'Today':
PostingDate := Today();
'Yesterday':
PostingDate := Today() - 1;
'Other date':
PostingDate := _OrderValues.GetValueAsDate('MyPostingDate', true);
end;
case _RecRef.Number() of
Database::"Warehouse Receipt Header":
begin
_RecRef.SetTable(WhseReceiptHeader);
if (PostingDate <> 0D) and (PostingDate <> WhseReceiptHeader."Posting Date") then
WhseReceiptHeader.Validate("Posting Date", PostingDate);
_RecRef.GetTable(WhseReceiptHeader);
end;
Database::"Purchase Header":
begin
_RecRef.SetTable(PurchHeader);
PurchRelease.Reopen(PurchHeader);
PurchRelease.SetSkipCheckReleaseRestrictions();
PurchHeader.SetHideValidationDialog(true); // same behavior when reprocessing from queue ie. no "change exchange rate" confirmation
PurchHeader.Validate("Posting Date", PostingDate);
PurchRelease.Run(PurchHeader);
_RecRef.GetTable(PurchHeader);
end;
end;