Upgrading or Redeploying SharePoint 2010 Workflows
While creating several State Machine SharePoint 2010 workflows using visual studio for a client I had some concerns related to upgrading and redeploying those workflows because as we all know, changes are inevitable!
Where following are the concerns and my solution to them
1- How can we redeploy or upgrade workflow?
I found a nice article which goes in details of upgrading workflow approaches, and as per my analysis Versioning workflows seems to be the only feasible solution.
2- When it’s required to version my workflows and how can I minimized it?
Versioning is required only when UI changes are done on workflow e.g. modification in state, activities etc. as this will break running instance of workflows due to failure in deserialization.
As a strategy we chose multi-layer architecture, which means whole logic in a separate Class library (business) and workflows in separate Library where workflow only defines flow as shown below.

This means for code level changes or bug fixes, we only redeploy business solution wsp not affecting workflows wsp.
3- How to Version Workflow solution and any step by step instructions?
While goggling I could not found comprehensive step by step instructions.
Where following contain the step by step instruction how I implemented it.
Step 1: Upgrade Assemble
· Go to Workflow Solution -> AssemblyInfo Class and update assembly version and file version as shown below.

Step 2: Upgrade Workflow Element.xml
Go to modified workflows and Open their Element.xml files then
· Update 'CodeBesideAssembly' attribute assembly version.
· Update ‘Name’ with Version number at end e.g. xyz version 1.0.0.1 (for your convenience).
· Update 'ID' attribute with a new GUID (Tools->Create GUID).

Step 3: Workflow Feature Update
· Remove any existing feature that deploy workflows from solution
· Add a new Site Scope Feature with 'Name' e.g. PrjectNameWorkflowsVersionX.X.X.X
· Add only modified Workflows inside this feature (Step 2 modified ones only)
Step 4: Upgrade Solution Package
Double Click Package and then
· Update the 'SolutionId' with a new GUID.
· Update 'Name' with modified version.
Step 5: Deployment
· Build and deploy the new workflow wsp solution and IIS Reset.
Note: this will register a new version of the workflow assembly in the GAC.
Step 6: Association and No New instance
· Associate newly deployed workflow e.g. xyz version 1.0.0.1
· Go to Associated list Workflow Settings -> Remove workflow and Put the old version workflows as "No New instance".

Note: As my solution contains several workflows so I created a utility for Programmatically performing step 6 operation, here are some methods that I created that might be helpful.
''' <summary>
''' To Programmatically associate workflow with a List or library
''' </summary>
Public Shared Sub AssociateWorkflow(ByVal web As SPWeb, _
ByVal WorkflowGUID As String, _
ByVal WorkflowName As String, _
ByVal ListName As String, _
ByVal TaskListName As String, _
ByVal HistoryListName As String, _
ByVal AllowManual As Boolean, _
ByVal AutoStartChange As Boolean, _
ByVal AutoStartCreate As Boolean)
'Bind to lists.
Dim ListToAssociate As SPList = web.Lists(ListName)
Dim TasksListToAssociate As SPList = web.Lists(TaskListName)
Dim workflowHistoryList As SPList = web.Lists(HistoryListName)
'Get workflow Template
Dim workflowTemplate As SPWorkflowTemplate = web.WorkflowTemplates(New Guid(WorkflowGUID))
If ListToAssociate.WorkflowAssociations.Count > 0 Then
Throw New Exception(String.Format("List '{0}' is already associated with Workflow '{1}', Please Disassociate this workflow first.", ListToAssociate.Title, ListToAssociate.WorkflowAssociations(0).Name))
End If
'Create workflow association.
Dim workflowAssociation As SPWorkflowAssociation = SPWorkflowAssociation.CreateListAssociation(workflowTemplate, WorkflowName, TasksListToAssociate, workflowHistoryList)
'Set workflow options.
workflowAssociation.AllowManual = AllowManual
workflowAssociation.AutoStartChange = AutoStartChange
workflowAssociation.AutoStartCreate = AutoStartCreate
' Hint: WorkflowAssociation.Enabled = false means 'No new instantace'
'Add workflow association.
ListToAssociate.WorkflowAssociations.Add(workflowAssociation)
End Sub
''' <summary>
''' To programmatically start workflow already associated with a List or library
''' </summary>
Public Shared Sub ManuallyStartWorkflow(ByVal objWeb As SPWeb, ByVal listTitle As String, ByVal itemID As Integer)
Using elevatedSite = New SPSite(objWeb.Url, SiteHelper.GetSystemUserSecruityToken(objWeb))
Using web = elevatedSite.OpenWeb()
web.AllowUnsafeUpdates = True
Dim elevatedList As SPList = web.Lists(listTitle)
'Get Associated Workflow
Dim item As SPListItem = elevatedList.GetItemById(itemID)
If item.Workflows.Count = 0 Then
Dim myAssociation As SPWorkflowAssociation = GetWorkflowAssociation(elevatedList.WorkflowAssociations)
elevatedSite.WorkflowManager.StartWorkflow(item, myAssociation, myAssociation.AssociationData)
End If
End If
web.AllowUnsafeUpdates = False
End Using
End Using
End Sub
Where even after reading this article you don’t like any of the solution and you want to develop few workflows that are not complex, then go with Event Receivers you can build your logic by code resulting in better performance and you don’t have to worry about versioning or anything J
Upgrading or Redeploying SharePoint 2010 Workflows的更多相关文章
- Upgrade from SharePoint 2010 to SharePoint 2016
[转]http://nikcharlebois.com/upgrade-from-sharepoint-2010-to-sharepoint-2016/ In this blog, I will go ...
- SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading
昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在Share ...
- 使用SharePoint 2010 母版页
SharePoint 2010母版页所用的还是ASP.NET 2.0中的技术.通过该功能,实现了页面框架布局与实际内容的分离.虽然在本质上自定义母版页的过程和以前版本的SharePoint大致相同,但 ...
- [SharePoint 2010]Sandboxed Solution (沙箱解決方案)
現有的SharePoint 2007系統中,我們如果要安裝客製化的程式碼到系統中,我們必須製作一個解決方案包裝檔(Solution Package),然後在系統的中央管理後台中,真對整個伺服器農場Fa ...
- SharePoint 2010 将带有工作流的模板移动到另一个站点集
HOWTO Move or Migrate SharePoint 2010 List-based Workflows between Sites and Site Collections I’ve e ...
- 在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码
背景信息: 通常在SharePoint环境中我们会使用很多的服务账号来运行各种不同的服务,尤其在企业环境中,由于权限管理条例严格,这些服务账号更是只能多不能少.面对如此多的服务账号,各个企业都会有自己 ...
- 安装InfoPath 2013后 SharePoint 2010 出现 “找不到 Microsoft.Office.InfoPath, Version=14.0.0....” 的错误的解决方案
1. 症状 您的SharePoint 2010的服务器是不是最近一直出现这个错误呢? Could not load file or assembly 'Microsoft.Office.InfoPat ...
- [SharePoint 2010] 自定义字段类型开发(二)
在SharePoint 2010中实现View Action Button效果. http://www.sharepointblogs.be/blogs/vandest/archive/2008/06 ...
- SharePoint 2010 + 左侧导航(Left Nav Bar)二级菜单的修改
SharePoint 2010 + 修改左侧导航类似顶部导航菜单的样式 查找aspmenu的控件,ID为“V4QuickLaunchMenu”,修改分别将属性“StaticDisplayLevels” ...
随机推荐
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】
编者按]随着近来软件规模的日益庞大,API编程接口的设计变的越来越重要.良好的接口设计可以降低系统各部分之间的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合度,从而提高系统的维护性和稳定性. J ...
- 用CSS让未知高度内容垂直方向居中
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- STM32 程序所占用空间计算 && FLASH存储的起始地址计算
程序编译完成,会乘车program size .. 对STM32容量选型或者 计算FLASH 充当EEPROM起始地址时会用到此参数. 按照下面截图 程序空间 = (16700+732+4580)/ ...
- Raspberry Pi 3 Model B 安装 OSMC
Raspberry Pi 3 Model B 自身搭载 WIFI 芯片,可直接连接无线网络. 准备 NOOBS 你可以购买预装有 NOOBS 的 SD 卡,或者从树莓派官网 下载 NOOBS.zip ...
- JavaScript富应用MVC MVVM框架
对框架的挑选 Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 1. 轻量级的应用选择哪一个会比较好?2. 那一个比较简 ...
- 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】
[软件下载] 本安装实例所使用安装文件如图所示: 其中,64位版本的MySQL安装文件mysql-5.5.33-winx64.msi,可直接从官网下载,下载地址:http://dev.mysql.co ...
- SQL语句技巧:查询存在一个表而不在另一个表中的数据记录
方法一(仅适用单个字段)使用 not in ,容易理解,效率低 select A.ID from A where A.ID not in (select ID from B) 方法二(适用多个字段匹配 ...
- JAVA魔法堂:读取.properties配置文件
一.前言 Java工程中想log4j.数据库连接等配置信息一般都写在.properties文件中,那么如何读取这些配置信息呢?下面把相关方法记录下来供以后查阅. 二..properties文件 配置文 ...
- [ASP.NET]谈谈IIS与ASP.NET管道
作为一个Asp.Net平台开发者,非常有必要了解IIS和Asp.Net是如何结合,执行我们的托管代码,以及Asp.Net管道事件的. 本节目录 IIS 5.X IIS 6 IIS 7+ 集成模式 As ...
- 看看如何面试前端工程师:Github很重要
从程序员的角度提出要去学习哪些知识,下面这篇文章从面试官的角度介绍到面试时可能会问到的一些问题.不过我想先给你们一个忠告,招聘是一件非常艰巨的任务,在45分钟内指出一名侯选人是否合适是你需要完成的任务 ...