Report 1510 Copy Workflow, source in 29
Source29
src/Layers/W1/BaseApp/System/Workflow/CopyWorkflow.Report.al111 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Automation;
report 1510 "Copy Workflow"
{
Caption = 'Copy Workflow';
ProcessingOnly = true;
UseRequestPage = false;
dataset
{
}
requestpage
{
layout
{
}
actions
{
}
}
labels
{
}
trigger OnPreReport()
begin
CopyWorkflow();
end;
var
FromWorkflow: Record Workflow;
ToWorkflow: Record Workflow;
FromWorkflowCode: Code[20];
StepsExistQst: Label 'The existing workflow steps will be deleted.\\Do you want to continue?';
SelfCopyErr: Label 'You cannot copy a workflow into itself.';
local procedure CopyWorkflow()
begin
FromWorkflow.Get(FromWorkflowCode);
if FromWorkflow.Code = ToWorkflow.Code then
Error(SelfCopyErr);
if ToWorkflow.Description = '' then
ToWorkflow.Description := FromWorkflow.Description;
if ToWorkflow.Category = '' then
ToWorkflow.Category := FromWorkflow.Category;
OnBeforeCopyWorkflowPerItem(ToWorkflow, FromWorkflow);
ToWorkflow.Modify();
CopyWorkflowSteps();
end;
local procedure CopyWorkflowSteps()
var
FromWorkflowStep: Record "Workflow Step";
FromWorkflowStepArgument: Record "Workflow Step Argument";
ToWorkflowStep: Record "Workflow Step";
begin
ToWorkflowStep.SetRange("Workflow Code", ToWorkflow.Code);
if not ToWorkflowStep.IsEmpty() then
if not Confirm(StepsExistQst) then
CurrReport.Quit();
ToWorkflowStep.DeleteAll(true);
FromWorkflowStep.SetRange("Workflow Code", FromWorkflow.Code);
if FromWorkflowStep.FindSet() then
repeat
ToWorkflowStep.Copy(FromWorkflowStep);
ToWorkflowStep."Workflow Code" := ToWorkflow.Code;
if FromWorkflowStepArgument.Get(FromWorkflowStep.Argument) then
ToWorkflowStep.Argument := FromWorkflowStepArgument.Clone();
ToWorkflowStep.Insert(true);
CopyWorkflowRules(FromWorkflowStep, ToWorkflowStep);
until FromWorkflowStep.Next() = 0;
end;
local procedure CopyWorkflowRules(FromWorkflowStep: Record "Workflow Step"; ToWorkflowStep: Record "Workflow Step")
var
FromWorkflowRule: Record "Workflow Rule";
ToWorkflowRule: Record "Workflow Rule";
begin
if FromWorkflowStep.FindWorkflowRules(FromWorkflowRule) then
repeat
ToWorkflowRule.Copy(FromWorkflowRule);
ToWorkflowRule.ID := 0;
ToWorkflowRule."Workflow Code" := ToWorkflowStep."Workflow Code";
ToWorkflowRule."Workflow Step ID" := ToWorkflowStep.ID;
ToWorkflowRule.Insert(true);
until FromWorkflowRule.Next() = 0;
end;
procedure InitCopyWorkflow(NewFromWorkflow: Record Workflow; NewToWorkflow: Record Workflow)
begin
FromWorkflowCode := NewFromWorkflow.Code;
ToWorkflow := NewToWorkflow;
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCopyWorkflowPerItem(var ToWorkflow: Record "Workflow"; FromWorkflow: Record "Workflow")
begin
end;
}