Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Asp.net mvc 4 Orchard 1.7-为未发布的文件创建自定义工作流活动_Asp.net Mvc 4_Orchardcms_Orchardcms 1.7 - Fatal编程技术网

Asp.net mvc 4 Orchard 1.7-为未发布的文件创建自定义工作流活动

Asp.net mvc 4 Orchard 1.7-为未发布的文件创建自定义工作流活动,asp.net-mvc-4,orchardcms,orchardcms-1.7,Asp.net Mvc 4,Orchardcms,Orchardcms 1.7,我需要进入果园CMS活动列表;未发布的活动是要求之一。我查看并发现Orchard默认工作流活动列表中没有未发布的活动 我构建了一个模块,可以添加我自己的自定义工作流活动。我在创建活动并使其工作方面没有问题,但我不知道如何将其中一个活动与一个活动绑定在一起。即使复制工作流模块的默认活动文件夹中的发布活动,复制的活动也不会绑定到任何事件 如何使我的活动类在有人取消发布或起草帖子时被调用 我也创建了一个线程,但到目前为止没有答案 我在Orchard CMS上找不到太多帮助,最终自己找到了解决方案。但是

我需要进入果园CMS活动列表;未发布的活动是要求之一。我查看并发现Orchard默认工作流活动列表中没有未发布的活动

我构建了一个模块,可以添加我自己的自定义工作流活动。我在创建活动并使其工作方面没有问题,但我不知道如何将其中一个活动与一个活动绑定在一起。即使复制工作流模块的默认活动文件夹中的发布活动,复制的活动也不会绑定到任何事件

如何使我的活动类在有人取消发布或起草帖子时被调用


我也创建了一个线程,但到目前为止没有答案

我在Orchard CMS上找不到太多帮助,最终自己找到了解决方案。但是我花了很多时间才完成

我发现的第一件事是,
Orchard.Workflows.Activities
有一个文件
ContentActivity
。在该文件中,还有其他类继承了
ContentActivity
ContentCreatedActivity
ContentUpdatedActivity
ContentPublishedActivity
。所有这些类都是订阅作为事件活动的
ContentActivity
的活动。他们订阅Orchard core的创建、更新和发布活动

如果查看
Orchard.ContentManagement.Handlers.ContentHandler
,您将看到Orchard CMS core提供的默认事件列表

我对
OnUnpublished
事件感兴趣,因此在我的模块中,我创建了一个侦听该事件的处理程序

using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.Workflows.Services;

namespace MyModule.Handlers {
    public class WorkflowContentHandler : ContentHandler {
        public WorkflowContentHandler(IWorkflowManager workflowManager) {
            OnUnpublished<ContentPart>(
                (context, part) =>
                    workflowManager.TriggerEvent("ContentUnpublished",
                    context.ContentItem,
                    () => new Dictionary<string, object> { { 
                              "Content", context.ContentItem } }));
        }
    }
}
就这样。完成此操作后,新的
未发布内容
活动将显示在工作流活动列表中。在取消发布任何内容后,您可以将其与其他活动结合使用,以执行自己的工作流

真不敢相信这么容易。我花了3天的时间才弄明白,我一直在扯我的头发,我没有太多的东西可以开始。
Orchard CMS缺乏支持和资源有时真的让我很恼火。我希望这将有助于为遇到类似问题的任何人节省一些时间。

我们确实需要为Orchard提供更好的文档。文档项目需要捐款。例如,这个答案将是一个很好的补充。
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Localization;
using Orchard.Workflows.Models;
using Orchard.Workflows.Services;
using Orchard.Workflows.Activities;

namespace MyModule.WorkFlow
{
    public class ContentUnpublishedActivity : ContentActivity
    {
        public override string Name
        {
            get { return "ContentUnpublished"; }
        }

        public override LocalizedString Description
        {
            get { return T("Content is Unpublished."); }
        }
    }
}