我需要点击Orchard CMS中的活动列表;未发布的活动是其中一项要求。我查看并发现Orchard默认工作流程活动列表没有未发布的活动。
我已经构建了一个添加自己的自定义工作流活动的模块。我创建活动并使它们工作没有问题,但我不知道如何将其中一个与事件绑定。即使我复制了在Workflow模块的默认活动文件夹中找到的发布活动,复制的活动也不会绑定到任何事件。
如何在有人取消发布或草稿帖子时调用我的活动类。
我还创建了一个帖子here,但到目前为止还没有答案。
答案 0 :(得分:10)
我在Orchard CMS上找不到多少帮助,最终自己找到了解决方案。我花了很多时间来完成这项工作。
我发现的第一件事是Orchard.Workflows.Activities
有一个文件ContentActivity
。在此文件中,还有其他类继承ContentActivity
类ContentCreatedActivity
,ContentUpdatedActivity
和ContentPublishedActivity
。所有这些类都是订阅ContentActivity
活动的活动。他们订阅了Orchard核心的创建,更新和发布事件。
如果您查看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 } }));
}
}
}
之后我们为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."); }
}
}
}
就是这样。完成此操作后,新的Content Unpublished
活动将显示在“工作流程”活动列表中。您可以将其与其他活动结合使用,以便在取消发布任何内容后执行您自己的工作流程。
我无法相信这很容易。我花了3天时间搞清楚这一点,我拉着头发,开始时我没有太多东西。 Orchard CMS缺乏支持和资源确实让我很烦恼。我希望这有助于为遇到类似问题的人节省一些时间。