SharePoint 2013 : How to Add Workflow Associations to a List using Workflow Subscription Service

Welcome to the third article of the series on JSOM Support for SharePoint 2013 Workflows.

Previous Articles in this Series can be reached at the following URLs:

  1. SharePoint 2013 : Introduction to Workflow Services API
  2. SharePoint 2013 : How to Copy Reusable Workflows from one site to another using Deployment Service

In this article we will look into a more obvious issue with SharePoint Designer Workflows, i.e. moving SPD workflows from one list to another within same or a different site.

This article will explain the steps on how to automate the Workflow movements from one location to another.

In order to showcase the scenario, we need to set up the prerequisites and in the next few steps we will work on the same.

We are having a list by the name “Orders” in the Parent Site as shown below:

1

We will create a workflow in Parent Site [that will be copied to the child site later on], let’s call it “Workflow on Orders in Parent Site” and get it associated with “Orders” List as shown in the steps below:

2

This is quite a simple Workflow with one step performing Logging Operation.

Once this Workflow Definition is Created and Published, we can get the Workflow ID as shown in the Article 1 of this series.

3

Here we are all done with configuration on Parent Site.

Now lets move on to the child site, where we have got another List by the name “Workflow Testing” as shown below:

4

Browse the child site in SharePoint Designer and look for the List ID for “Workflow Testing” List as shown below:

5

Now look for “Workflow History” and “Workflow Tasks” Lists and verify if they are present and if not we need to create them beforehand.

6

With this we are all done with setting up the prerequisites for this demo.

Now let take a deep dive in the code base to understand its composition-

1.Specify the Workflow ID which needs to be copied from Parent to Child Site

2.Specify the List ID to which this Workflow needs to be associated in the Child Site.

7

3.Instantiate Object of Workflow Service Manager Object using Context of Child Site

4.Instantiate Object of Workflow History List in Child Site

5.Instantiate Object of Workflow Tasks List in Child Site

8

6.Set Workflow Details before copying it to Child Site

  • Set Workflow Name
  • Specify if the workflow is enabled
  • Specify the Workflow Definition ID
  • Specify the Workflow Status Column Name
  • Specify the Target List ID
  • Specify supported Event Types

9

7.Setting Workflow Properties

  • Setting Workflow List IDs
    • Task List
    • History List
  • We need to Set “FormData” property to blank if we don’t want to set any specific value, but must set this property.

10

8.Finally call “publishSubscriptionForList” function of Workflow Subscription Service to get the workflow published on to the target list.

11

Once this code gets execute without error, sure enough we will get the workflow created in the child site and associated with the specified list.

Following are the steps that we can take to verify if the Workflow is copied and associated as expected on the Child Site:

1.Browse the Child Site and navigate to the Workflows section and see if we get “Workflow on Orders in Parent Site” workflow created

12

2.Browse the Child Site in Browser and navigate to the “Workflow Testing”, see if Workflow Status Column with the Name “Demo Subscription Added” is created.

13

3.Start the workflow on any Item in the list and see if it is working as expected.

14

15

16

Hope this article provides you a brief idea on how can we make use of Workflow Subscription Services to add the Workflow Association to a specific list.

See you in the next article of this series.

Advertisements

SharePoint 2013 : Introduction to Workflow Services API

Workflow Services API are one of the newest feature extensions that are shipped with SharePoint 2013. These API allows you to perform lot of operations on Workflows couple of them is shown in the list below:

  1. Create Workflows
  2. Edit Workflows
  3. Start Workflows
  4. Stop Workflows
  5. List Workflows
  6. Copy Workflows from one site to another
  7. Associate Workflows to lists
  8. Export Workflows to WSP …. And the list goes on

Being this API a part of SharePoint CSOM, it is accessible using both JavaScript & C# Managed Code.

Workflow Services are primary meant to work with SharePoint 2013 Workflows (or WF4 Workflows) but also shipped with limited support for SharePoint 2010 Workflows (or WF3 Workflows).

The Workflow Services API consists of 4 Services to deal with different scenarios:

  1. Workflow Instance Service
    1. Can be used to Query Workflow Instances
    2. Can be used to Create new Instances based on existing Associations
    3. Can be used to Create new Instances on List Items and Sites
    4. Can be used to Communicate existing Instances
      1. To Cancel Workflow
      2. To Terminate Workflow
      3. Publish Custom Events
  2. Workflow Subscription Service
    1. Can be used to Query Workflow Associations
    2. Can be used to Create Workflow Associations
  3. Workflow Deployment Service
    1. Can be used to Query Workflow Definitions
    2. Can be used to Validate Workflow Definitions
    3. Can be used to Create Workflow Definitions
    4. Can be used to Validate Workflow Definitions
  4. Workflow Interop Service
    1. Can be used to Interact with SharePoint 2010 Workflows in SharePoint 2013

In this first article on Workflow Service we will consider a very simple scenario where we will list down all the workflows created [only WF4 Workflows] with in a site, to see important details like Name, ID and Published Status.

In order to step up this demo I have one site “Development” which is created as shown below:

1

If we open this site in SharePoint Designer, and visit the Workflow Section on the left as shown below, we found no workflows has been created as of now.

2

So first of all let’s create a new Reusable Workflow, give it a name “Parent – Workflow”. Make sure Platform Type must be “SharePoint 2013 Workflows”.

Click Ok to save the Workflow definition.

3

Now add a simple step called “Logging” to this workflow and add a “Log to History” activity to this list.

Check for the errors

Save the workflow

Publish the workflow as shown below:

4

Once you publish the workflow it will be place on the right container in SharePoint Designer.

5

Now go to any list and add this workflow to the list

6

7

In the similar fashion create another workflow and let say called it as “Unpublished Workflow”, the only difference this time is we are not going to publish it.

Just create it and save it, that’s all.

8

OK, this will suffice to prepare our environment for this demo.

Now the next task in line is to create a UI element that can trigger the action to list workflows. For this I have created a simple page with a Button on it “List Workflows”

9

The simple HTML that bring this button up is as follows

10

This button is hooked up with an Event Handler named “ListWorkflow()”

In order to implement the logic behind this Event Handler, we need to include the necessary references in our code:

  1. JQuery.js
  2. MicrosoftAjax.js
  3. SP.Runtime.js
  4. SP.js
  5. SP.Core.js
  6. SP.WorkflowServices.js

11

Then proceed with the code as follows:

12

  1. Initialize Context Variable
  2. Initialize the Service Manager object in context of the current site
  3. Initialize Workflow Deployment Service Instance

13

  1. Get Handle on Workflow Definitions Collection
  2. Get Current Workflow Definition
  3. Retrieve Workflow Properties from Workflow Definition

You can view all the properties exposed by Workflow Definition by placing breakpoint on line 5 shown above:

14

For this demo, I have taken only four properties to display:

  1. Workflow ID
  2. Workflow Display Name
  3. Workflow Description
  4. Workflow Published Status

So we click “List Workflow” button we can be able to see the selected details for the Workflow Definitions which are stored on a specific site as show below:

15

  1. Click Button
  2. Site URL for which the Workflow Definitions are listed
  3. Workflow definition details

The information shown above is really useful to work with any Workflow Definition and we will be going to see this information in action in the series of upcoming articles on Workflow Services dealing with a bit more advanced scenario.

You can visit the next post in this series:

SharePoint 2013 : How to Copy Reusable Workflows from one site to another using Deployment Service