在更新SPListItem 时启用Workflow 的方法:
方法一:
const string WF_GUID = "{4E8DD7D8-AAA3-48D9-B012-FB2694CEB0FD}";
const string WF_Name = "WF_Testing";
SPWorkflowManager objWFManager = null;
SPWorkflowAssociationCollection objWFAssCol = null;
objWFManager = item.Web.Site.WorkflowManager;
objWFAssCol = item.ParentList.WorkflowAssociations;
foreach (SPWorkflowAssociation objWFAss in objWFAssCol)
{
if (String.Compare(objWFAss.BaseId.ToString("B"), WF_GUID, true) == 0)
//if (String.Compare(objWFAss.Name, WF_Name, true) == 0)
{
objWFManager.StartWorkflow(item, objWFAss, objWFAss.AssociationData, true);
break;
}
}
方法二:
//const string WF_GUID = "3F0ACAA4-BBB6-480C-A6D1-3E674011923A";
////SPWorkflowAssociation workflowAssociation = myList.WorkflowAssociations[new Guid(WF_GUID)];
// occur : Failed on start(retrying), completed after 2 minutes
string WF_Name = System.Configuration.ConfigurationManager.AppSettings["WF_Name_UpdateListItem"];
if (WF_Name ==null || WF_Name=="" )
{
WF_Name = "WF_Testing";
}
SPWorkflowAssociation workflowAssociation = myList.WorkflowAssociations.GetAssociationByName(WF_Name, System.Threading.Thread.CurrentThread.CurrentCulture);
myWeb.Site.WorkflowManager.StartWorkflow(item, workflowAssociation, workflowAssociation.AssociationData, true);
但目前以前两种方法均会导致一种错误,在出错后,导到 List Item 项中的Workflow 的值变为 "Failed on start(retrying) ",但奇怪的是一般过3分钟左右之后,一样能成功运行 Workflow ,并状态变更为 "Completed"。
为此问题找了很久,终于找到一种方法,但好像因为我的Workflow 是在 Disigner 中直接建立的,不是代码建立,故可能不适用。至于真正如何,还需要之后的研究!
参看:
Workflow "Failed on Start (retrying)"
http://blogs.msdn.com/wael/archive/2008/01/11/workflow-failed-on-start-retrying.aspx