Managing workflow schema

The following code samples show how to create a new schema Testing workflow with following steps:

 

Edit -> Article Approval (custom step) -> Publish -> Archive

 

It also creates a workflow scope that applies this workflow to all articles in the /TestingWorkflow section.

 

Creating a new workflow schema

 

[C#]

 

using CMS.SettingsProvider;

using CMS.CMSHelper;

using CMS.DataEngine;

using CMS.GlobalHelper;

using CMS.TreeEngine;

using CMS.SiteProvider;

using CMS.WorkflowEngine;

 

...

           // Prepare the data

           WorkflowInfo wi = new WorkflowInfo();

           wi.WorkflowDisplayName = "Testing workflow";

           wi.WorkflowName = "TestingWorkflow";

 

           // Insert the workflow

           WorkflowInfoProvider.SetWorkflowInfo(wi);

 

           // Create default steps (required for proper operation)

           WorkflowInfoProvider.CreateDefaultWorkflowSteps(wi.WorkflowID);      

 

 

Creating a workflow step

 

[C#]

 

using CMS.SettingsProvider;

using CMS.CMSHelper;

using CMS.DataEngine;

using CMS.GlobalHelper;

using CMS.TreeEngine;

using CMS.SiteProvider;

using CMS.WorkflowEngine;

 

...

 

           // Get the workflow

           WorkflowInfo wi = WorkflowInfoProvider.GetWorkflowInfo("TestingWorkflow");

           if (wi != null)

           {

               // Init new step

               WorkflowStepInfo wsi = new WorkflowStepInfo();

               wsi.StepDisplayName = "Article approval";

               wsi.StepName = "ArticleApproval";

 

               // Get published step info for the proper position

               WorkflowStepInfo psi = WorkflowInfoProvider.GetPublishedStep(wi.WorkflowID);

               if (psi != null)

               {

                   // New step has the previous published step order

                   wsi.StepOrder = psi.StepOrder;

 

                   // Move the published step down

                   psi.StepOrder += 1;

                   WorkflowInfoProvider.SetWorkflowStepInfo(psi);

 

                   // Move the archived step down

                   WorkflowStepInfo asi = WorkflowInfoProvider.GetArchivedStep(wi.WorkflowID);

                   if (asi != null)

                   {

                       asi.StepOrder += 1;

                       WorkflowInfoProvider.SetWorkflowStepInfo(asi);

                   }

               }

 

               // Insert the step to the database

               wsi.StepWorkflowID = wi.WorkflowID;

               WorkflowInfoProvider.SetWorkflowStepInfo(wsi);

           }      

 

 

Defining a workflow scope

 

[C#]

 

using CMS.SettingsProvider;

using CMS.CMSHelper;

using CMS.DataEngine;

using CMS.GlobalHelper;

using CMS.TreeEngine;

using CMS.SiteProvider;

using CMS.WorkflowEngine;

 

...

 

           // Get the workflow

           WorkflowInfo wi = WorkflowInfoProvider.GetWorkflowInfo("TestingWorkflow");

           if (wi != null)

           {

               // Init new workflow scope

               WorkflowScopeInfo wsi = new WorkflowScopeInfo();

               wsi.ScopeStartingPath = "/TestingWorkflow";

 

               // Assign the document type article

               DataClassInfo ci = DataClassInfoProvider.GetDataClass("CMS.Article");

               if ( ci != null )

               {

                   wsi.ScopeClassID = ci.ClassID;

               }

 

               wsi.ScopeSiteID = CMSContext.CurrentSite.SiteID;

               wsi.ScopeWorkflowID = wi.WorkflowID;

 

               // Save the scope to the database

               WorkflowInfoProvider.SetWorkflowScopeInfo(wsi);

           }

 

 

Deleting a workflow

 

[C#]

 

using CMS.SettingsProvider;

using CMS.CMSHelper;

using CMS.DataEngine;

using CMS.GlobalHelper;

using CMS.TreeEngine;

using CMS.SiteProvider;

using CMS.WorkflowEngine;

...

 

           // Get the workflow

           WorkflowInfo wi = WorkflowInfoProvider.GetWorkflowInfo("TestingWorkflow");

 

           // Delete the worfklow

           WorkflowInfoProvider.DeleteWorkflowInfo(wi.WorkflowID);