1

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

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

4

1 回答 1

0

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

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

在事件接收器中,您必须输入以下代码:

//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);
    }
}

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

于 2013-08-09T17:43:17.217 回答