Porting SharePoint Designer Workflows to Visual Studio
Hey everyone,
A lot of people ask if SPD workflows can be customized in Visual Studio so that you can deploy it as a reusable workflow template or add some code to it, and our official answer is that it’s not supported. But... it doesn’t mean it’s not possible to some extent;). In reality, an SPD workflow is a Workflow Foundation XOML file that’s compiled on the fly, so this file can be opened in the Visual Studio Extensions for WF. Today, I’ll show you how to get started;). (It’ll be our little secret!)
I’d strongly recommend having a basic understanding of how VS workflows work prior to reading this (I will probably gloss over some of the VS specific details;)). For general information about building VS workflows, the SharePoint blog is a good place to start.
Also, I should note that this works for workflows that do not have forms. Adding forms can be complex, so I’ll try to cover them in a separate post.
Step 1: Create a VS Workflow Project
In VS, go to File > New and select either a SharePoint Workflow Project (from the WSS or MOSS SDKs) or Workflow Foundation project. You will need Visual Studio Extensions for Workflow Foundation installed.
Step 2: Copy the SPD .xoml and .rules files into the VS project
With the new project in place, we’ll start porting the SPD xoml over to VS. First we need to extract the appropriate workflow files from SPD. To do this, open SPD and go to the Folder List. Right-click on the workflow that you want and choose the Publish Selected Files... option.
In the Remote Web Site tab of the dialog that appears, select the File System radio button and choose a local location on your computer. This will create a folder called Workflows on your file system in the location specified.
When you have these files, rename the .rules file (if you have one) from *.xoml.rules to *.rules. Then add the .xoml and .rules files to your VS project. If you double click on the .xoml file in the Solution Explorer, the WF workflow designer should open, and you should see all your SPD actions in place.
Step 3: Generate a .cs file under the XOML (optional)
If you want to add code behind your XOML, you’ll need a .cs file to go with it. By default, the copied XOML won’t come with this. To generate one, just bind a function to one of the activities in the designer. OnWorkflowActivated is there by default, so try typing an event handler name to its Invoke property. The .cs file created should automatically initialize the namespace and class name to match your XOML. If you don’t like the default names, change the attributes in the first line of the XOML in an XML editor before generating the file:
<ns0:RootWorkflowActivityWithData x:Class="Namespace.ClassName" ...>
Step 4: Deploy and debug the workflow
Fill out the rest of your deployment files and deploy the template as a SharePoint Feature the same way as with any VS workflow, then associate it for use. Since SPD workflows weren’t designed to be ported over, expect some kinks that you’ll have to debug through. But hopefully, the workflow provides enough of a base there to work through them, and with the ability to code, you can find some nifty workarounds;).
Hope this helps!
Eilene
Comments
Anonymous
July 07, 2007
In molti di noi ci siamo chiesti se i workflow creati all'interno di SharePoint Designer 2007 siano oAnonymous
July 09, 2007
Siguiendo con la serie de post sobre recursos de WSS 3.0 & MOSS que iniciamos con las entregas IAnonymous
July 12, 2007
Buchtipps Microsoft Office SharePoint Server 2007 - Das Handbuch von Bill English Beginning SharePointAnonymous
July 12, 2007
Direkter Download: SPPD-074-2007-07-12 [00:00] Intro [00:00] Buchtipps Microsoft Office SharePoint ServerAnonymous
July 12, 2007
Direkter Download: SPPD-074-2007-07-12 [00:00] Intro [00:00] Buchtipps Microsoft Office SharePoint ServerAnonymous
July 15, 2007
Hi Eilene, great post, thank you! Can you please give me informations about processing a workflow build in SPD having forms! Thank you, MaddinAnonymous
July 17, 2007
You've been kicked (a good thing) - Trackback from SharePointKicks.comAnonymous
July 17, 2007
在新的SharePoint环境中,我们可以借助SharePoint Designer非常轻松的为某个列表设计并加载一个工作流。 这种方式的优点是快捷方便,无需任何代码,支持条件判断和多级流程,并且微软提供了丰富的操作选项Anonymous
July 18, 2007
如何把SharePoint Designer中设计的工作流导入VS2005里。Anonymous
July 21, 2007
When I deploy this kind of workflow, I realized that at runtime the workflow InitiationData is always null. And thats why the workflow always fails if I dont have Initiation form. anyone help?Anonymous
July 25, 2007
Ah, I forgot to mention that the ApplyActivation needs non-null init data to work correctly. If you have no initiation form, remove the ApplyActivation activity and initialize base variables with the following code early in your workflow: __context = new WorkflowContext(); __context.Initialize(__initParams); __list = __initParams.List.ToString(); __item = __initParams.ItemId; __workflowId = __initParams.WorkflowId; Hope this helps, EileneAnonymous
July 27, 2007
In the last couple of days a huge amount of interesting posts are posted. And in case you didn'tAnonymous
September 06, 2007
The fact that you can't include custom workflows in a site template to me is a HUGE design flaw. Why would you want to write a workflow that can only be used on the site it was designed on? Seriously, I love the ease of the design process, but without a better deployment process it makes the whole thing useless.Anonymous
September 17, 2007
Before I start there is a good guide to transforming a SharePoint Designer workflow to a visual studioAnonymous
September 18, 2007
I'm fairly new to Workflows.. When I generate cs file like the way it was described, it generated a file with .xoml.cs extension.. Also this is the class name that I have, not sure where the ROOT came from. partial class ROOT : Microsoft.SharePoint.WorkflowActions.RootWorkflowActivityWithData I removed the Applyactivation activity, but not sure where to plug in this code.. __context = new WorkflowContext(); __context.Initialize(__initParams); __list = __initParams.List.ToString(); __item = __initParams.ItemId; __workflowId = __initParams.WorkflowId; Appreciate your replyAnonymous
September 19, 2007
I just deployed a SPD workflow to a list that was migrated from SharePoint 2003. All new items will start the workflow automatically, but I need a way to start the workflow for all existing items manually (not all list items). Is there a way to start workflows in bulk, instead of going to each list item and clicking start workflow?Anonymous
October 04, 2007
Erika please tell us how to add forms to this project.Anonymous
October 17, 2007
I am having same problem as Tina . Where and how do we initialize base variables in workflow? Your reaponse will be appriciated. Thanks,Anonymous
October 19, 2007
Hi Eilene, Great post. Can you please explain where to initialize base variables in workflow? Same question that been asked by Tina and Canadian. Thank you in advance.Anonymous
October 22, 2007
The comment has been removedAnonymous
October 24, 2007
Hello , My question is about Custom WorkFlows Actions/Activities in the SharePoint designer. In SPD an action is represented by a sentence. The properties are blue and underlined. The properties are, under the hood, represented by so called "DesignerTypes". Standard there are designerTypes for email, listfields, ... (so far nothing new) I am developping a custom WorkFlow Activity and want to fill in a property for which I can not use the standard DesignerTypes. Question: Can I and how can I build and register custom DesignerTypes. Thanks in advance Frank LangeAnonymous
October 30, 2007
Después de algún tiempo sin postear el habitual recopilatorio de recursos interesantes de WSS 3.0 &Anonymous
November 08, 2007
Hi Thanks for your sharing! I did it following your post But when I double clicked on the .xoml file in the Solution Explorer,a message told me: " error loading workflow " my configue vs2005 Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 2_2(EN) how to deal with it thanks a lotAnonymous
January 09, 2008
Direkter Download: SPPD-074-2007-07-12 [00:00] Intro [00:00] Buchtipps Microsoft Office SharePoint ServerAnonymous
February 06, 2008
I have the same issue as doudou -- after I publish my workflow and add it to a Workflow VS project, I get an error when trying to open it in designer: "Could not deserialize object. The type "Microsoft.Sharepoint.WorkflowActions.RootWorkflowActivityWithData" could not be resolved. Then I can't bind to create the cs. Does anyone know the resolution to this? Thanks.Anonymous
February 06, 2008
Found the issue -- I was using the Workflow => Sequential Workflow Library project template. Instead, I am now using the WSS => Sharepoint Sequential Workflow Library template that comes with the WSS3 Workflow Starter Kit, and that works much better. Thanks for the post!Anonymous
February 13, 2008
My File... New... doesn't list anything like "SharePoint Workflow Project." I can create a new C#/VB Workflow project, but I haven't had any luck that route. I've installed both the MOSS and WSS SDKs and am using VS 2005. Can someone tell me how to get "SharePoint Workflow Project" listed as an option? I'd really like to be able to run through this example. ThanksAnonymous
February 20, 2008
I to would like to have Sharepoint Workflow Project listed as option in VS 2008. How do I get there?Anonymous
February 26, 2008
I'm not sure if it is the exact same as used in this example, but I used the "Sharepoint Sequential Workflow Library" template that came with the "Workflow Developer Starter Kit for WSS 3.0" (not the WSS SDK), and it worked well for me. Downloadable at http://www.microsoft.com/downloads/details.aspx?familyid=5ddf902d-95b1-4640-b9e4-45440dc388d9Anonymous
March 04, 2008
Todd Bleeker of Mindsharp, http://mindsharpblog.com/todd did a presentation of this at the SharePoint Conference 2008, Seattle. It was a community effort to get it working. More information can be found at: http://mindsharpblogs/paul.Anonymous
April 07, 2008
Thanks alot, this saved my dayAnonymous
May 07, 2008
Body: SharePoint Designer Team Blog article on moving SharePoint Designer Workflows into Visual StudioAnonymous
May 15, 2008
Body: So I am developing a sequential SharePoint workflow right now. The process I've followed forAnonymous
May 31, 2008
在新的SharePoint环境中,我们可以借助SharePointDesigner非常轻松的为某个列表设计并加载一个工作流。 这种方式的优点是快捷方便,无需任何代码,支持条件判断和多级流程,并且微...Anonymous
June 12, 2008
Hi, Can you please explain how to move the MOSS designer workflow from one MOSS server to Another server?Anonymous
June 27, 2008
Hi, I am trying to develop a database form and save data into the server (SQL Server 2005) but it's not working. No error meggage is generated. When I post data it seemed to save in db but no data in db is going. I am using data view and inserted selected fields as single-item view. Can anybody help my why it's not working? Thanks in advance Maksuda...Anonymous
July 21, 2008
Great post!! Thank you!!!! :)Anonymous
August 18, 2008
J'ai posté récemment sur la notion des "Custom Activity" avec SharePoint Designer (SPD). Sujet délicatAnonymous
August 22, 2008
Je travaille actuellement sur le développement d'un workflow qui automatise le transfert des fichiers d'un site web à un autre. j'ai créé un formulaire pour les paramètres d'entrés, mais le workflow ne charge pas les paramètres du formulaire, comment dois je faire? Tout aide est la bienvenue Merci d'avanceAnonymous
September 16, 2008
ha ha thanks a lot. It's very big secret. ^_^Anonymous
June 08, 2009
Direkter Download: SPPD-074-2007-07-12 [00:00] Intro [00:00] Buchtipps Microsoft Office SharePoint ServerAnonymous
October 08, 2013
nice post