Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint工作流-等待其他工作流更改状态时未触发字段更改_Sharepoint_Workflow_Workflow Activity - Fatal编程技术网

Sharepoint工作流-等待其他工作流更改状态时未触发字段更改

Sharepoint工作流-等待其他工作流更改状态时未触发字段更改,sharepoint,workflow,workflow-activity,Sharepoint,Workflow,Workflow Activity,我正在尝试在Sharepoint Designer上创建工作流。工作流应等待开箱即用审批工作流完成。这是通过在项目创建时启动我的工作流,然后使用wait活动: 等待当前项目中的字段更改: 等待内部批准等于16 问题:规则是正确的,但除非对项目进行编辑,否则不会触发事件。通常,每次编辑都会触发工作流检查,但我的测试显示,批准工作流不会触发项目上的此事件 有没有一个简单的方法来解决这个问题?我想实现一个繁忙的等待,但如何实现(有一个等待5分钟活动,但没有转到)?是否有可以下载的活动可以等待另一个工作

我正在尝试在Sharepoint Designer上创建工作流。工作流应等待开箱即用审批工作流完成。这是通过在项目创建时启动我的工作流,然后使用
wait
活动:

等待当前项目中的字段更改:
等待内部批准等于16

问题:规则是正确的,但除非对项目进行编辑,否则不会触发事件。通常,每次编辑都会触发工作流检查,但我的测试显示,批准工作流不会触发项目上的此事件

有没有一个简单的方法来解决这个问题?我想实现一个繁忙的等待,但如何实现(有一个
等待5分钟
活动,但没有
转到
)?是否有可以下载的活动可以等待另一个工作流完成,或者忙着等待条件满足?

解决我的问题的另一种方法是,如果InternalApproval工作流更改了一个字段,但我也无法做到这一点

这是预期的行为。如果审批工作流连接到在项目发生更改时自动取消,则该工作流将毫无用处。在API级别,SharePoint正在禁用在需要更新其运行的项目时引发的事件


-Oisin

我最终编写了一个自定义工作流活动,该活动将等待更改并恢复工作流。此活动可通过两种方式使用-在主工作流上,或在第二个工作流上,它等待非触发更改并进行触发更改(以便主工作流继续)。
编写它非常有趣——我使用Reflector从OOTB活动(正常的等待字段更改)复制了一些代码,并复制了它的动作xml。经过一些尝试后,它运行得非常好,提供了字段、运算符和值的列表

使用
Helper
类检查条件也非常简单。使用Reflector复制所有属性及其绑定:

public void CheckStopCondition(object sender, ConditionalEventArgs e)
{
    bool checkAgainLater = Helper.TestListItem(Context, ListId, ListItem, 
                                               FieldName, Operator, Value);
    e.Result = checkAgainLater;
}

文章如何等待任何列表中的更改,等待当前项目中的多个字段更改了解等待当前项目中字段更改的不同方式(下面的链接)

本文介绍如何配置使用标准(OOB)工作流操作并使用SharePoint Designer开发的工作流。不再使用“在当前项目中等待字段更改”操作,而是将等待完成后完成的工作流组件添加到单独的“更改时”工作流中,该工作流在第一步中使用标准条件来确定是否可以继续。如果当前项目中的字段不满足条件,工作流将停止。如果工作流的另一个实例正在运行,则在实例运行时,通过将“workflow_running”字段设置为yes,新实例也将停止

在等待满足特定条件时,使用此技术可以为您提供更多控制。这包括能够等待另一个列表项中的字段被更新,或者等待当前项中的多个字段


有关更多详细信息,请参阅。

当使用一个工作流进行审批和另一个工作流更新字段时,您可以使用“等待当前项目中的字段更改”,在审批完成时更新字段(批准代码16、拒绝代码17、进行中代码2)。以下是一个示例:

等待MomoApproval等于16,然后将通知设置为Final

批准时不会触发此代码,因为SharePoint修改了与工作流相关的字段;此字段不属于列表的架构。因此,对工作流状态的更改不会触发项目更改事件。如果没有项目更改事件,第二个工作流将保持空闲状态,“等待当前项目中的字段更改”操作似乎没有用处。要绕过SharePoint 2010审批工作流的此行为,请执行以下操作:

  • 开放式SharePoint designer 2010
  • 转到您正在工作的站点
  • 单击工作流
  • 右键单击审批工作流
  • 单击“复制并修改”
  • 转到相关列表
  • 单击“关联现有工作流”
  • 现在在此工作流中,单击“编辑工作流”,单击“审批工作流任务”
  • 单击“更改单个任务的行为”
  • 转到“完成”部分并添加此操作“将标题设置为当前项目:标题”
  • 这将更改列表架构中的标题字段,该字段将触发项目更改事件,但标题值将保持不变,此操作不会影响列表的数据内容。这是一种简单的变通方法,与其他解决方案(如创建活动、循环或暂停并重新启动工作流)相比,它工作良好,成本更低

    创建工作流后,可以将其导入visual studio 2010并成为解决方案的一部分。请参阅以下链接:

    享受您的工作流程更新

    注意:当列表中出现项目更改时,更新字段的工作流应绑定启动


    穆罕默德·哈切姆

    谢谢你。我想我能找到这样或那样的推理方式。。。你知道怎么绕过这个吗?我想在另一个工作流完成后继续我的工作流,或者触发编辑。仔细阅读以下内容:它提供了备选方案。我已经阅读了这篇文章,谢谢。创建两个工作流是可行的,但这让我担心——行为已经改变了一次,破坏了许多工作流(正如文章所说),而且感觉有点粗糙。再次感谢!有趣,我喜欢等待任务的想法。然而,在我的场景中,我应该等待用户启动一个工作流(具有唯一参数),然后等待它完成:我如何等待尚未创建的多个任务?我怎么知道这是真的