With SharePoint 2010, we have two new workflow types we can create, a
Reusable Workflow, and a Site Workflow. Today we’ll concentrate on
reusable workflows. And if you’ve been living under a rock for the past
few months, let me first explain…
In WSS v3, we could create “reusable” workflows in Visual Studio, and
through some third party applications, however, in v3, lots of
workflows were generated in SharePoint Designer. And a lot of times,
people found out the hard way, that you couldn’t just copy and paste
them, or suck them into Visual Studio to re-deploy elsewhere. Those
workflows are list-based workflows, which are bound just to a single
list, in a single site. You could re-create the workflow on other lists,
but, that is time consuming… and not that efficient at all.
There were options however – you could copy the workflow files over
to a new list, and edit the workflow files manually, to point to the
GUID of the list you wanted to deploy it against, or, use some Visual
Studio Voodoo, to write some code to accomplish the same thing. Again,
not entirely efficient, and, not out of the box.
With SharePoint 2010 and SharePoint Designer 2010, we finally have some options, out of the box.
- List Workflow – This is the same list-based workflow you know and love from 2007.
- Reusable Workflow – This workflow is tied to a content type, hence
why it can be reusable, and the focus of this here article today.
- Site Workflow – The site workflow is a different beast altogether,
and is a topic for another day. These are, as they sound, bound to
sites. Not content types or lists, but, to the site itself. Site
workflows are not initiated from list-level actions – they need to
either be manually called, or called through code. But I digress – we’ll
save this topic for another day…
Now, on to the meat and potatoes of this post. The reusable workflow, and, options for deployment. First, lettuce (
you should always have some greens with your meat and potatoes… just ask your mother, she’ll tell you the same thing…) create a simple workflow, that will send an email to a single email address when the workflow is run.
I already have a list called Clients on my site, so we’ll use that.
Open SharePoint Designer 2010, and connect up to the site, and click on
the
Workflows navigation node on the left hand of the screen. When you do, you’ll see the
Workflows tab in the ribbon as shown above.
Create a New Reusable Workflow in SharePoint Designer
Now, you may be able to see the future, and to test this, if you think I am going to say “
Click on the Reusable Workflow option in the Workflows ribbon tab”, then you are clairvoyant. Congrats on that! So cool… anyways, click there, just as you knew I was going to say.
Go ahead and give it a name, such as Notify Client Engagement
Manager, and a description, with whatever you please… then select a
content type. Now, something I forgot to mention, is that I had already
created a Client content type prior to this, so, you may want to go
ahead and do that, in case that’s what you’d like to do, if you’re
following along at home. Go ahead – this post will still be here when
you get back… I’ll wait.
Ok, done? Now, select your Client content type (as shown below), and click
OK.
You also may note, that you can associate this reusable content type to
ALL content types. While I have not peered beneath the sheets on that
one yet (SharePoint 2010 has not even officially launched as of the
penning of this article…), I am guessing that it uses the System
0x or Item
0×1 content type to associate to, similar as I did in a
previous article on binding custom actions to all list types.
Anyhow, back on track again! So, now that we have done. We get our next screen. Do as the man says, and start typing away…
A phrase like “email” is helpful – it’ll find the action you are looking for
Then press enter, and click on
these users in the link that appears
And then create your email definition, something like as follows, and click
OK.
And then click
Save back up in the ribbon to save any changes, and when you’re ready, click
Publish, that’ll, as you may have thought, publish the workflow.

Your workflow has now been created. Now, you’ll need to make sure
your list is configured to use it, if, indeed, you’d like to use it. As
it works just like the other reusable workflows in SharePoint (Approval,
Three-State, etc.), it needs to be configured.
So, check your list, and be sure that it is managing content types,
And then, go into
Workflow Settings on the list settings page
Select the content type…
And then configure the workflow…
And we’ll see that it is assigned to the content type now
Let’s test it, just to make sure… go to
New Item > Client from the list page
And your workflow should fire. Great! Ok! Now what?
Now Bob, in HR, wants to do the same thing – what can we do? Good
thing we created a reusable workflow! We have options, which is the real
basis for this article.
Save As Template in SharePoint Designer
In SharePoint Designer 2010, we have the option now to save our
Reusable Workflow as a Template. To do so, on the Ribbon UI when you are
working with your workflow, select
Save as Template.
This will automagically save the WSP file of the workflow out to the
“Site Assets” library, and it will tell you it did so, as shown below.
If you click on the
Site Assets link on the
left-hand navigation in SharePoint Designer, you will see there should
be a new WSP file, corresponding with the name of the workflow you had
saved as a template.
Next, let’s download the file. Just click on it to save it.
Packaging and Deploying the Reusable Workflow in Visual Studio 2010
Now, here comes the good stuff. Fire up Visual Studio 2010, and go to
File > New > Project from the menu.
If you have not seen it before in Visual Studio – under
Visual C# > SharePoint > 2010, there is a new project template called
Import Reusable Workflow. Select that, give your project a name, etc., and click
OK.
You will then see the
SharePoint Customization Wizard
window pop up, select the URL you would like to use for
deployment/debugging, and you cannot deploy workflows as sandboxed
solutions, so
Deploy as a farm solution is your only option. Hit
Next >

The next window in the
SharePoint Customization Wizard is to specify the project source. Select the WSP package containing your workflow which you had exported earlier.
Then, select the items to import – you should only have your workflow listed.
Click
Finish, and Visual Studio will import your workflow from your solution.
And when it’s done, and if it completed successfully, it will tell you so.
Now, look at the solution in the
Solution Explorer on
the right. We are not going to make any changes at the moment, but, if
you wanted to, add more code, change the forms, etc., you could do that
all here.
Right click on the project and select
Package

Once that is complete, if you look in the project folder (created
when you selected the project in Visual Studio), you should see your WSP
file for your project.
Now, you can deploy this out to the debugging/deployment site you specified in the
SharePoint Configuration Wizard portion of the import of the workflow, by right-clicking on the project, and selecting
Deploy.
Checking the
Output window will show you the steps taken for deployment.
Now how do you check to make sure it was deployed? Well, in Visual Studio, double-click on
Feature1.feature
in the solution explorer, and in the Title field of the designer view
for the feature, you will see your workflow there with it’s defaulted
name of
Converted Workflows.
In your site collection features, you should see a feature by the same name…
Activate it, if necessary, and now your cooking with gas, or really,
you can use any other sort of medium for generating intense heat that
you desire, I am not going to “hold your feet to the fire” on this. Hah.
Sometimes – I just crack myself up.
Publishing a Reusable Workflow Globally through SharePoint Designer
The first word in the title of this article is “Options”. So, here is
another option – using SharePoint Designer to publish the workflow
globally. Now, that sounds bigger than it is, however, you also may
note, if you are an astronomy buff, that it did not say “Publish
Solarsytemmy”, or “Publish Galaxyally”, or even “Publish Universally”.
Maybe because I just made some of those words up? Or, maybe, because you
are working within the context of a site collection here – a “world” in
SharePoint. I really have no idea – I don’t know who came up with the
copy for that specific button, or, rather, any buttons anywhere in
SharePoint Designer.
So, start by creating a new workflow, or, you can just use the one we did earlier if you’d like.
Give it a step, or else its not much of a workflow…
Ok, lets save the workflow…

and you’ll see in the Ribbon, that mysterious button
Publish Globally. Go ahead – click it.
You will then be prompted by SharePoint Designer – telling you the
intentions and ramifications, with not even a one word salutation, that
publishing this workflow globally will publish it to all sites within
the site collection. COOL! Do it!
Now, to see this in action, go back into your site, and create a new site.
Let’s go with a team site – simple, easy, and comes pre-populated with some lists.
Now, lets go into our document library, and check out the workflow settings to see if it is there…

Oh, wait – no workflows associated with this list. Let’s add one, to see if we can add ours…
And there it is!
Fun stuff, huh? Yeah, I know many of you who have already started
toying with 2010 may have already seen, or even done, some or all of
this. The truth of the matter is, I’ve had this sitting in my drafts
folder since May 10th, and as you can also see, I am finally getting
around to posting it.
Hope this helps – and if not, leave me a comment on where I can provide any clarification
:)
Reference:
http://sharepointyankee.com/2010/12/11/options-for-deploying-reusable-workflows-in-sharepoint-2010/