Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 44 Next »

Minimum Requirements

  • Extension version MOB5.27
  • Android App 1.5.9


Description

Interrupt posting and add extra steps (“Header Steps”) based on values already collected.

  • Add extra steps during posting (interrupt posting to collect addtional steps)
  • Used for "conditional" steps i.e. when values from previously collected steps determines if the step are to be included
  • Extra steps can be collected for the "header" only. Extra steps per document line are currently not supported for planned document types
  • Posting are restarted (started over) when the additional steps have been collected on the mobile device
  • Events are executed every time posting starts over and can be used to chain even more steps.


Steps with no "conditions" are better created using  OnAddStepsToAnyHeader-events, i.e. OnGetReceiveOrderLines_OnAddStepsToAnyHeader

Examples

Two examples are shown below. In both examples:

  • A new (unconditional) step to select Posting Date is added with options: "Today", "Yesterday" or "Other date".
  • If option "Other date" was selected by the user, posting should be interrupted and a new conditional step (date picker) should be be displayed at the mobile device.* 
  • When posting is resumed (started over), the Posting Date is set accordingly at the document being posted. 




Example 1: Add extra steps for a single document source (WarehouseReceiptHeader)

This example describes how to implement extra steps for a single document source for a planned document type (i.e. implement "Warehouse Receipts" for Receive, but not "Purchase Orders", "Transfer Orders" and "Sales Return Orders").
If you are implementing changes for multiple document sources, see "Example 2: Implement extra steps for all document sources (AnyHeader)".

This example is for Warehouse Receipts, but similar events exists for any of the planned document types (Receive, Pick, Put-away, Ship, Move, Count).

Step 1.1 - Create new RadioButton with options "Today", "Yesterday", "Other date"

Create new "unconditional" RadioButton step (always displayed) using the OnGetReceiveOrderLines_OnAddStepsToAnyHeader-event. The step is created for Warehouse Receipts only.

    // OnGetReceiveOrderLines
    // Create a RadioButton step in the default header collector (for warehouse receipts only)
    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader''', true, true)]
    local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRefvar _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

Show an extra step to pick posting date from a calendar - but only if option "Other date" was selected above

    // OnPostReceiveOrder
    // Create a conditional step on posting based on collected value from the 'MyPostingDateRadioButtonStep' created above
    [EventSubscriber(ObjectType::CodeunitCodeunit::"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

Set Posting Date based on values collected from all steps above (unconditional "RadioButton" and "conditional" date picker)

    // OnPostReceiveOrder
    // Set new posting date including using a value from conditional step 'MyPostingDate'
    [EventSubscriber(ObjectType::CodeunitCodeunit::"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 2: Add extra steps for all document sources (AnyHeader)

This example describes how to implement extra steps for planned document types with multiple document sources (i.e. implement "Warehouse Receipts" and "Purchase Orders" for Receive).
If you are implementing changes only for a specific specific document source, see "Example 1: Implement extra steps for a single document source (WarehouseReceiptHeader)".

Step 2.1 - Create new RadioButton with options "Today", "Yesterday", "Other date"

Create new "unconditional" RadioButton step using the OnGetReceiveOrderLines_OnAddStepsToAnyHeader-event. The step are created for "Warehouse Receipt" and "Purchase Order" but excluded for "Sales Return Order" or "Transfer Order"

    // 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::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader''', true, true)]
    local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRefvar _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

Show an extra step to pick posting date from a calendar - but only if option "Other date" was selected above

    // OnPostReceiveOrder
    // Create a conditional step on posting based on collected value from the 'MyPostingDateRadioButtonStep' created above
    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAddStepsToAnyHeader''', true, true)]
    local procedure MyOnPostReceiveOrder_OnAddStepsToAnyHeader(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRefvar _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

Set Posting Date based on values collected from all steps above (unconditional "RadioButton" and "conditional" date picker)

    // 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::CodeunitCodeunit::"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;



  • No labels