Codeunit 1560 Workflow Imp. / Exp. Mgt, source in 29

Source29

src/Layers/W1/BaseApp/System/Workflow/WorkflowImpExpMgt.Codeunit.al66 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Automation;

using System;
using System.Utilities;
using System.Xml;

codeunit 1560 "Workflow Imp. / Exp. Mgt"
{

    trigger OnRun()
    begin
    end;

    var
        MoreThanOneWorkflowImportErr: Label 'You cannot import more than one workflow.';

    procedure GetWorkflowCodeListFromXml(TempBlob: Codeunit "Temp Blob") WorkflowCodes: Text
    var
        XMLDOMManagement: Codeunit "XML DOM Management";
        XmlNodeList: DotNet XmlNodeList;
        XmlNode: DotNet XmlNode;
        InStream: InStream;
    begin
        TempBlob.CreateInStream(InStream);
        XMLDOMManagement.LoadXMLNodeFromInStream(InStream, XmlNode);

        XMLDOMManagement.FindNodes(XmlNode, '/Root/Workflow', XmlNodeList);

        foreach XmlNode in XmlNodeList do
            if WorkflowCodes = '' then
                WorkflowCodes := XMLDOMManagement.GetAttributeValue(XmlNode, 'Code')
            else
                WorkflowCodes := WorkflowCodes + ',' + XMLDOMManagement.GetAttributeValue(XmlNode, 'Code');
    end;

    [Scope('OnPrem')]
    procedure ReplaceWorkflow(var Workflow: Record Workflow; var TempBlob: Codeunit "Temp Blob")
    var
        FromWorkflow: Record Workflow;
        CopyWorkflow: Report "Copy Workflow";
        NewWorkflowCodes: Text;
        TempWorkflowCode: Text[20];
    begin
        NewWorkflowCodes := GetWorkflowCodeListFromXml(TempBlob);
        if TrySelectStr(2, NewWorkflowCodes, TempWorkflowCode) then
            Error(MoreThanOneWorkflowImportErr);

        FromWorkflow.Init();
        FromWorkflow.Code := CopyStr(Format(CreateGuid()), 1, MaxStrLen(Workflow.Code));
        FromWorkflow.ImportFromBlob(TempBlob);

        CopyWorkflow.InitCopyWorkflow(FromWorkflow, Workflow);
        CopyWorkflow.UseRequestPage(false);
        CopyWorkflow.Run();

        FromWorkflow.Delete(true);
    end;

    [TryFunction]
    local procedure TrySelectStr(Index: Integer; InputString: Text; var SelectedString: Text[20])
    begin
        SelectedString := SelectStr(Index, InputString);
    end;
}