当前位置: 首页>>技术问答>>正文


在SharePoint工作流中调用ActivityAction

webfans 技术问答 , , , , 去评论

问题描述

在Visual Studio,SharePoint 2013工作流程中,Microsoft提供的”IF”活动可以将条件和两个活动作为参数:

workflow,2013,workflow-activity,visual-studio-2012,sharepoint

我想编写一个可以类似地接受其他活动作为参数的自定义活动。换句话说,委托其他活动。

编辑:我发现,如果我添加一个”ActivityAction”类型的属性参数:

workflow,2013,workflow-activity,visual-studio-2012,sharepoint

视觉工作室设计师呈现它,并允许您放下其他活动:

workflow,2013,workflow-activity,visual-studio-2012,sharepoint

现在我只需要一种方法来调用”Body”属性/委托。

不幸的是,InvokeDelegate活动似乎在SharePoint工作流程中不受支持:是否可以编写一个复制此功能的代码活动?或者更好的是,还有另一种方式来调用/执行一个ActivityAction?

workflow,2013,workflow-activity,visual-studio-2012,sharepoint

Here’s an MSDN article,它显示了如何在Workflow Manager 1.0的non-sharepoint工作流中执行此操作。

编辑:

仍在寻找答案。 Workflow Manager 1.0刷新的任何更新?

最佳解决方案

在我的回答中,我将专注于我已实施的活动,我不会介绍如何实施自定义活动。您可以在http://msdn.microsoft.com/en-us/library/jj193517(v=azure.10).aspx上找到有关开发和部署自定义活动的其他信息。

这是我相信你正在寻找的解决方案:

[Designer("System.Activities.Core.Presentation.DoWhileDesigner, System.Activities.Core.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "System.ComponentModel.Design.IDesigner")]
public sealed class DelegateActivity : NativeActivity
{
    [DependsOn("Condition"), DefaultValue((string)null)]
    public Activity Body
    {
        get;
        set;
    }

    protected override void Execute(NativeActivityContext context)
    {
        context.ScheduleActivity(Body);
    }
}

如果这是您所需的,请在Execute方法中添加pre-executing和post-executing逻辑。

现在,一个免责声明…我在实现中使用了Designer属性中的DoWhileDesigner值,因为我没有实现自己的Designer。你可以通过从ActivityDesigner继承并实现IComponentControl来完成。你将不得不为设计者提供你自己的XAML。

只需在Visual Studio中的DelegateActivity中放下任何活动,工作流程将执行它。此实现忽略条件,因此您可以将其保留为空:

workflow,2013,workflow-activity,visual-studio-2012,sharepoint

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/1184.html,转载请务必附带本地址声明。