Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Info
titleMinimum Requirements

Extension MOB5.27 and Android App v1.5.9

...

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

  1. Step1 is always shown
  2. Step2 is only shown if step1 has a value > 5
  3. Step3 is only shown if step2 has a value > 5


    [EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Ship", 'OnPostShipOrder_OnAddStepsToWarehouseShipmentHeader', '', false, false)]
    localprocedure"MOB WMS Ship_OnPostShipOrder_OnAddStepsToWarehouseShipmentHeader"(var_OrderValues: Record"MOB Common Element"; _WhseShipmentHeader: Record"Warehouse Shipment Header"; var_StepsElement: Record"MOB Steps Element")
    begin
        // Step1 is always shown
        ifnot_OrderValues.HasValue('Step1') thenbegin
            _StepsElement.Create_IntegerStep(10, 'Step1');
            _StepsElement.Set_header('Step1');
            _StepsElement.Set_optional(true);
        end;

        // Step2 depends on Step1
        ifnot_OrderValues.HasValue('Step2') then
            if_OrderValues.GetValueAsDecimal('Step1') >5thenbegin// Step 1 has to be over 5
                _StepsElement.Create_IntegerStep(20, 'Step2');
                _StepsElement.Set_header('Step2');
                _StepsElement.Set_optional(true);
            end;

        // Step3 depends on Step2 (implicit Step 1)
        ifnot_OrderValues.HasValue('Step3') then
            if_OrderValues.GetValueAsDecimal('Step2') >5thenbegin// Step 2  both has to be over 5
                _StepsElement.Create_IntegerStep(2030, 'Step3');
                _StepsElement.Set_header('Step3');
                _StepsElement.Set_optional(true);
            end;
    end;


Example 2 & 3: Posting Date for Receive

...

    // 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

...

    // 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

...

    // 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 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::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

...

    // 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

...

    // 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;