Versions Compared

Key

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

Use this event to:

Excerpt

Handle custom Unplanned Functions business logic using XmlDom.

...

    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Adhoc Registr.", 'OnPostAdhocRegistrationOnCustomRegistrationTypeAsXml''', true, true)]
    local procedure OnPostAdhocRegistrationOnCustomRegistrationTypeAsXml(_MessageId: Guidvar _XMLRequestDoc: XmlDocumentvar _XMLResponseDoc: XmlDocument; _RegistrationType: Textvar _RegistrationTypeTracking: Text[200]; var _IsHandled: Boolean)
    var
        MobDocQueue: Record "MOB Document Queue";
        MOBToolbox: Codeunit "MOB Toolbox";
        Status: Text;
    begin
        if _RegistrationType = 'MyCustomRegistrationType' then begin           // Replace constant 'MyCustomRegistrationType' with your own RegistrationType
            if _IsHandled then
                exit;

            // Add your business logic here
            // .....

            // Optional: Read MobDocQueue to i.e. read device id
            MobDocQueue.GetByGuid(_MessageId, MobDocQueue);

            // Always return a response text to the front-end
            Status := 'OK';
            MOBToolbox.CreateSimpleResponse(_XMLResponseDoc, Status);

            // Return that this registration type was handled
            _IsHandled := true;
        end;
    end;


Example

    [EventSubscriber(ObjectType::CodeunitCodeunit::"MOB WMS Adhoc Registr.", 'OnPostAdhocRegistrationOnCustomRegistrationTypeAsXml''', true, true)]
    local procedure MyOnPostAdhocRegistrationOnCustomRegistrationTypeAsXml(var _XMLRequestDoc: XmlDocumentvar _XMLResponseDoc: XmlDocument; _RegistrationType: Textvar _RegistrationTypeTracking: Text[200]; var _IsHandled: Boolean)
    var
        MOBToolbox: Codeunit "MOB Toolbox";
        Status: Text;
    begin
        if _RegistrationType = 'SetWhseClassCode' then begin
            if _IsHandled then
                exit;

            Status := PostSetWhseClassCodeRegistration(_XMLRequestDoc, _RegistrationTypeTracking);
            MOBToolbox.CreateSimpleResponse(_XMLResponseDoc, Status);

            _IsHandled := true;
        end;
    end;

    procedure PostSetWhseClassCodeRegistration(_XMLRequestDoc: XmlDocumentvar _ReturnRegistrationTypeTracking: Text[200])Text[60];
    var
        Item: Record Item;
        MobXMLMgt: Codeunit "MOB XML Management";
        MobToolbox: Codeunit "MOB Toolbox";
        MobWMSToolbox: Codeunit "MOB WMS Toolbox";
        MobWmsLanguage: Codeunit "MOB WMS Language";
        XMLRequestNode: XmlNode;
        XMLRequestDataNode: XmlNode;
        XMLParameterNode: XmlNode;
        XMLNodesList: XMLNodeList;
        ItemNumber: Code[20];
        i: Integer;
        WhseClassCode: Code[10];
    begin
        // Extract any parameters from the XML
        // The parameters are located in the <requestData> element
        MobXMLMgt.GetDocRootNode(_XMLRequestDoc, XMLRequestNode);
        MobXMLMgt.FindNode(XMLRequestNode, MobWMSToolbox."CONST::requestData"(), XMLRequestDataNode);

        // Loop over the registration values. We don't know which values will be present because it is configurable
        // The values are added to the relevant journal if they have been registered on the mobile device
        MobXMLMgt.GetNodeChildNodes(XMLRequestDataNode, XMLNodesList);
        for i := 1 to XMLNodesList.Count() do begin
            MobXMLMgt.GetListItem(XMLNodesList, XMLParameterNode, (i))// AL = 1 based index
            case MobXMLMgt.GetNodeName(XMLParameterNodeof
                'ItemNumber':
                    ItemNumber := MobWMSToolbox.GetItemNumber(CopyStr(MOBToolbox.ReadMisc(MobXMLMgt.GetNodeInnerText(XMLParameterNode))1, MaxStrLen(ItemNumber)));
                'WhseClassCode':
                    WhseClassCode := CopyStr(MobXMLMgt.GetNodeInnerText(XMLParameterNode)1, MaxStrLen(WhseClassCode));
            end;
        end;

        _ReturnRegistrationTypeTracking := 'SetWhseClassCode: ' +
                                                                    Item.TableCaption() ' ' +
                                                                    ItemNumber + ' ' +
                                                                    Item.FieldCaption("Warehouse Class Code"' ' +
                                                                    WhseClassCode;

        // Perform the posting
        if not Item.GET(ItemNumberthen
            ERROR(STRSUBSTNO(MobWmsLanguage.GetMessage('ITEM_EXIST_ERR'), ItemNumber));

        if WhseClassCode <> Item."Warehouse Class Code" then begin
            Item.Validate("Warehouse Class Code", WhseClassCode);
            Item.Modify(true);
        end;

        exit(STRSUBSTNO('Warehouse Class Code set for %1', ItemNumber));
    end;


Version History

VersionChanges
MOB5.00Introduced
MOB5.17New parameter _MessageId

...