在引用项目上自动运行工作流程?

时间:2013-04-04 11:55:56

标签: sharepoint sharepoint-2010

我们有一个列表(Products),用作另一个列表(Sales)中的查阅列。

现在,如果编辑了产品列表中的某个项目,那么是否可以启动一个工作流程,该工作流程将在销售清单中的所有项目上运行,这些项目引用了产品列表?

1 个答案:

答案 0 :(得分:0)

您打算使用哪些工具?如果它是SharePoint Designer,我担心你不能这样做,因为在查询指定列表中的多个项目时,SharePoint Designer很弱(在您的情况下,销售)。

尽管如此,如果您打算用代码弄脏,那肯定是肯定的。我假设您已经在销售清单上设计了工作流程。在“产品”列表中为事件“项目更新”注册事件处理程序。 Karine有关于注册事件处理程序here的好文章。

在事件接收器中,你必须输入类似下面的代码:

//Opening a connection to the site
using (SPWeb web=properties.OpenWeb())
{
    //Getting Sales List
    SPList SalesList=web.Lists["Sales"];

    //Building and executing a CAML query to be executed on the sales list to retrieve sales that are related to the product item currently being updated. Note that you need to replace 'RelatedProduct' with the name of the lookup field in sales list that looks up on items in products list.
    SPQuery qRelatedSales=new SPQuery();
    qRelatedSales.Query=string.Format("<Where><Eq><FieldRef Name='RelatedProduct' LookupId='TRUE' /><Value Type='Lookup'>{0}</Value></Eq></Where>",properties.ItemId);
    SPListItemCollection relatedSales=SalesList.GetItems(qRelatedSales);

    //starting workflow on each related sales item. Note that you have to replace "Your Workflow Name" with the title of your workflow on sales list.
    SPWorkflowAssociation assoc = SalesList.WorkflowAssociations.GetAssociationByName("Your Workflow Name", CultureInfo.CurrentUICulture);
    foreach(SPListItem relatedSale in relatedSales)
    {
        web.Site.WorkflowManager.StartWorkflow(relatedSale, assoc, string.Empty, SPWorkflowRunOptions.Synchronous);
    }
}

在此之后,部署项目并在产品项目更新时进行测试,事件接收器应该运行,最终,您的工作流程应该在与产品相关的所有销售项目上运行。