Versions Compared

Key

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

Case

Excerpt

Scan ExpirationDate as custom format YYYYMM when goods is received from any Vendor.

...

    //
    // Create new RegistrationCollectorConfiguration-Key in reference data with one new step named "CustomExpirationDate"
    // 
    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAfterAddRegistrationCollectorConfigurationsAsXml''', true, true)]
    local procedure OnGetReferenceData_OnAfterAddRegistrationCollectorConfigurationsAsXml(var _XmlResponseData: XmlNode)
    var
        MobXmlMgt: Codeunit "MOB XML Management";
        XmlConfigurationNode: XmlNode;
        XmlKeyNode: XmlNode;
        XmlValueNode: XmlNode;
        XmlCDataSection: XmlCdata;
    begin
        // Add the mandatory nodes
        MobXmlMgt.AddElement(_XmlResponseData, 'Configuration''''', XmlConfigurationNode);
        MobXmlMgt.AddElement(XmlConfigurationNode, 'Key''MyCustomSteps''', XmlKeyNode);
        MobXmlMgt.AddElement(XmlConfigurationNode, 'Value''''', XmlValueNode);

        // Add the CDATA section to the Value-Node
        XmlCDataSection := GetOrderLineExtraInfoCDataSection();
        MobXmlMgt.NodeAppendCData(XmlValueNode, XmlCDataSection);
    end;

    local procedure GetOrderLineExtraInfoCDataSection() XmlCDataSection: XmlCdata
    var
        MobXmlMgt: Codeunit "MOB XML Management";
        MobConfTools: Codeunit "MOB WMS Conf. Tools";
        RegexExpr: Text[1024];
    begin
        // Create an empty CDATA section to add the registrationCollectorConfiguration XML to
        MobXmlMgt.NodeCreateCData(XmlCDataSection, '');

        // Create the start tags of the configuration xml. These must be closed afterwards.
        MobXmlMgt.NodeAppendCDataText(XmlCDataSection, '<registrationCollectorConfiguration>');
        MobXmlMgt.NodeAppendCDataText(XmlCDataSection, '<steps>');

        // Add the actual steps
        RegexExpr := '(20[0-4]\d)(0[1-9]|1[0-2])';  // "20"+ remaining two digits in year then two digit month (0+single digit or 10, 11 or 12)
        MobConfTools.RC_Std_Parms(10000'MyExpirationDate''Expiration Date (YYYYMM)''Expiration Date:''Expiration Date in format YYYYMM');
        MobConfTools.RC_Ext_Parms_InputFormat(RegexExpr);
        MobConfTools.RC_Text_CData(XmlCDataSection, ''6);

        MobXmlMgt.NodeAppendCDataText(XmlCDataSection, '</steps>');
        MobXmlMgt.NodeAppendCDataText(XmlCDataSection, '</registrationCollectorConfiguration>');

        exit(XmlCDataSection);
    end;

    //
    // Add steps referenced by new RegistrationCollectorConfiguration-Key to line steps collectors
    //
    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyLine''', true, true)]
    local procedure OnGetReceiveOrderLines_OnAddStepsToAnyLine(_RecRef: RecordRefvar _BaseOrderLineElement: Record "MOB Ns BaseDataModel Element")
    begin
        // MOB5.11
        // Currently the Android Mobile App supports only one "RegisterExtraInfo"-node (one extra RegistrationCollectorConfigurationKey).
        // The last subscriber to OnGetReceiveOrderLines_OnAfterAddStepsByReferenceDataKey must set a <RegisterExtraInfo>-key that includes steps for all previous subscribers.
        // This is only possible by knowing what other customizations is done and manually create a new RegistrationCollectorConfigurationKey that includes all steps.
        // 
        // In this demo we expect to be only subscriber and throw an error if earlier subscribtions exists by including optional _ErrorIfAlreadyCreated parameter.
        // We cannot test if later subcribers is overriding this value we set.
        if _BaseOrderLineElement.Get_RegisterExpirationDate() 'true' then begin
            _BaseOrderLineElement.Set_RegisterExpirationDate(false);  // Disable the standard (date format) expiration date step
            _BaseOrderLineElement.Create_StepsByReferenceDataKey('MyCustomSteps');  // This key must include MyExpirationDate-step but may include other steps as well
        end;
    end;

    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Toolbox", 'OnSaveRegistrationValue''', true, true)]
    local procedure OnSaveRegistrationValue(_Path: Text; _Value: Textvar _MobileWMSRegistration: Record "MOB WMS Registration"; var _IsHandled: Boolean)
    var
        Year: Integer;
        Month: Integer;
    begin
        if _Path <> 'MyExpirationDate' then
            exit;

        if _Value <> '' then begin
            Evaluate(Year, CopyStr(_Value, 14));
            Evaluate(Month, CopyStr(_Value, 52));
            _MobileWMSRegistration."Expiration Date" := DMY2Date(01, Month, Year);
        end else
            _MobileWMSRegistration."Expiration Date" := 0D;

        _IsHandled := true;
    end;

Version History

VersionChanges
MOB5.11Neccessary events introduced

...