我使用 VS2012 创建了一个自定义列表和一个任务列表。现在在同一个解决方案中,我正在创建一个工作流,我想将工作流与列表和任务列表相关联,但在创建工作流的列表下拉列表中看不到名称。有没有办法与列表关联?在运行应用程序时,我不想手动为列表添加工作流。
问问题
1117 次
1 回答
1
通过在 VS 解决方案资源管理器中右键单击您的功能,将事件接收器添加到您的功能。
由于您使用的是网站集功能,因此在功能激活的处理程序中获取对您的库的引用:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = (SPSite) properties.Feature.Parent;
SPWeb web = site.RootWeb;
SPList list = web.Lists["Name of the Document Library"];
}
这假设您的网站是根网站集网站,然后您可以调用以下方法:
public void EnsureWorkflowAssociation(SPList list, string workflowTemplateName, string associationName, bool allowManual, bool startCreate, bool startUpdate)
{
var workflowAssociation =
list.WorkflowAssociations.Cast<SPWorkflowAssociation>().FirstOrDefault(i => i.Name == associationName);
if (workflowAssociation!=null)
{
list.WorkflowAssociations.Remove(workflowAssociation);
list.Update();
}
var web = list.ParentWeb;
var lcid = (int)web.Language;
var defaultCulture = new CultureInfo(lcid);
var template = web.WorkflowTemplates.GetTemplateByName(workflowTemplateName, defaultCulture);
var association = SPWorkflowAssociation.CreateListAssociation(template, associationName,
web.Lists[Lists.Tasks.Description()],
web.Lists[Lists.WorkflowHistory.Description()]
);
association.AllowManual = true;
association.AutoStartChange = true;
association.AutoStartCreate = true;
list.WorkflowAssociations.Add(association);
list.Update();
association = list.WorkflowAssociations[association.Id];
association.AllowManual = allowManual;
association.AutoStartChange = startUpdate;
association.AutoStartCreate = startCreate;
association.AssociationData = "<Dummy></Dummy>";
association.Enabled = true;
list.WorkflowAssociations.Update(association);
list.Update();
}
workflowTemplateName应该是您的工作流的名称
AssociationName必须为关联选择的名称
于 2013-07-12T16:55:56.547 回答