Orchard 1.7 - 为Unpublished创建自定义工作流活动

Swo*_*kya 3 orchardcms asp.net-mvc-4 orchardcms-1.7

我需要深入了解Orchard CMS中的活动列表; 未发布的活动是其中一项要求.我查看并发现Orchard默认工作流程活动列表没有未发布的活动.

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

我怎样才能这样做,以便在有人取消发布或草稿帖子时调用我的活动类.

我也在这里创建了一个帖子,但到目前为止还没有答案.

Swo*_*kya 10

我在Orchard CMS上找不到多少帮助,最后自己找到了解决方案.我花了很多时间来完成这项工作.

我发现的第一件事就是Orchard.Workflows.Activities有一个文件ContentActivity.在这个文件中还有其他继承ContentActivity类的类ContentCreatedActivity,ContentUpdatedActivityContentPublishedActivity.所有这些类都是订阅的活动,ContentActivity即活动活动.他们订阅了Orchard核心的Create,Update和Publish事件.

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

我对这个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 } }));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,我们为Unpublished创建自定义工作流活动.这个类继承自ContentActivity其兄弟姐妹,因此它可以启动工作流程并且将成为一个事件.

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."); }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

就是这样.完成此操作后,新Content Unpublished活动将显示在"工作流程"活动列表中.您可以将其与其他活动结合使用,以在取消发布任何内容后执行您自己的工作流程.

工作流列表中的内容未发布活动

我简直不敢相信这很容易.我花了3天时间搞清楚这一点,我拉着头发,开始时我没有太多东西.Orchard CMS缺乏支持和资源确实让我很烦恼.我希望这有助于为遇到类似问题的人节省一些时间.

  • 我们真的需要一个更好的Orchard文档. (2认同)
  • 文档项目需要贡献.例如,这个答案将是一个很好的补充. (2认同)