Orchard 1.7 - 为未发布的内容创建自定义工作流程活动

2024-05-02

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

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

我怎样才能做到这一点,以便每当有人取消发布或起草帖子时就调用我的活动类。

我也创建了一个线程here https://orchard.codeplex.com/discussions/536986但到目前为止还没有答案。


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

我发现的第一件事是Orchard.Workflows.Activities有一个文件ContentActivity。在这个文件中还有其他类继承了ContentActivity class ContentCreatedActivity, ContentUpdatedActivity and 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 } }));
        }
    }
}

之后,我们为“未发布”创建自定义工作流程活动。这个类继承自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活动将显示在工作流活动列表中。您可以将其与其他活动结合使用,在任何内容取消发布后执行您自己的工作流程。

我不敢相信这这么容易。我花了三天时间才弄清楚,我一直在拉扯我的头发,而我一开始并没有太多的头发。 Orchard CMS 缺乏支持和资源有时确实让我很恼火。我希望这可以帮助遇到类似问题的人节省一些时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Orchard 1.7 - 为未发布的内容创建自定义工作流程活动 的相关文章

随机推荐

  • 确保 HttpConfiguration.EnsureInitialized()

    我已经安装了 Visual Studio 2013 当我运行我的应用程序时 出现以下错误 我不知道在哪里初始化这个对象 该怎么办 Server Error in Application The object has not yet been
  • PyQt MainWindow 在 Windows 上使用多处理

    我尝试创建一个PyQt应用 为了在后台运行进程并保持PyQt5应用程序可用于新指令 我想使用multiprocessing 在 Windows 操作系统上 当我从 Qt 调用函数时MainWindow与 一起上课multiprocessin
  • MongoDB 聚合管道 C#

    我有以下 Mongo 查询 db BusRatings aggregate match VId 2020 project vid VId sb SvcRating StaffBehavior bq SvcRating BusQuality
  • Discord.js:无效的位字段标志或数字:GUILDS

    我正在第一次尝试制作 Discord 机器人 该代码非常基本 只是一个在启动时将自己的标签记录到控制台的机器人 const Discord require discord js const TOKEN REDACTED const clie
  • 使用二级缓存时,nhibernate 查询缓存和实体缓存有什么区别?

    我正在尝试设置 nhibernate 二级缓存我在这篇文章中看到 http www gitshah com 2012 03 nhibernate and caching part 2 html我想了解查询缓存和实体缓存之间的区别 它说你需要
  • React:将组件作为 prop 传递,而不使用 this.props.children

    我有这个组件Foo js a svg component with a star svg icon import IconStar from react svg icons call a button with a custom icon
  • Javascript 访问浏览器上的拼写检查器

    是否可以从 Javascript 访问浏览器中合并的文本区域拼写检查器 我希望能够在我的代码中控制拼写检查 如今 大多数浏览器 IE 除外 似乎都内置了某种拼写检查器 据我所知 最常见的访问方式是禁用或启用字段上的拼写检查 内联禁用 Fir
  • 使用一条语句在 MySQL 中添加多列

    我试图将多个列添加到 phpMyAdmin 中的现有表中 但我不断收到相同的错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法 我在写信 ALTER TABLE WeatherCente
  • 我们已经让 MEF 与 MVC4 一起工作,那么基于约定的模型怎么样?

    经过深入研究 我发现可以在 MVC4 中使用 MEF 进行 DI 下面的 SO 链接给出了几个示例 如何将 MEF 与 ASP NET MVC 4 和 ASP NET Web API 集成 https stackoverflow com q
  • 检索 Python 脚本的返回值

    我有一个外部 C 程序 它使用以下命令执行 Python 脚本Process class 我的脚本返回一个数字代码 我想从我的 C 程序中检索它 这可能吗 问题是 我得到的返回码是python exe而不是从我的脚本返回的代码 例如 3 解
  • 如何在 Windows 上使用 Pyreverse

    我想使用pyreverse 创建图表类 我下载它 当我使用这个命令时 pyreverse bat c PyreverseCommand a1 s1 f ALL o png test py 我收到错误 名称 点 无法识别 什么是 点 如何创建
  • 是否有一种经济有效的方法来备份 Firebase Firestore?

    据我了解 备份 Firestore 数据库会导致读取每个文档 这看起来非常昂贵 例如 假设我有一个有 1000 个用户的笔记应用程序 每个用户每天创建 100 个文档并阅读 100 个文档 每月的费用为 reads 1000 100 30
  • 以编程方式安装 apk,无需定义 apk 名称

    我正在尝试以编程方式从 SD 卡安装 apk 而不提及 apk 的名称 我现在能做的就是安装我在代码中命名的 apk 但如果我想在我的设备上安装另一个 apk 那么它就不方便了 为此我必须进入我的代码并更改 apk 的名称 有没有办法在运行
  • 'InvalidOperationException',原因:'fbauth2 在 LSApplicationQueriesSchemes 下的 Info.plist 中丢失,并且是 iOS 9.0 所必需的'

    在将其标记为重复之前 请注意我已经尝试了相关问题中的所有解决方案 当我单击应用程序上的 Facebook 登录按钮时 应用程序崩溃并出现此错误 2015 10 28 18 31 05 277 retailcatalogue 96362 20
  • (Console.BufferHeight) 我无法使用 Console.WriteLine 查看/滚动查看所有控制台输出

    当我运行此代码时 输 出窗口顶部的数字是 99701 为什么我看不到一直到 1 的数字 我实际上看到所有数字都被输出 但在控制台窗口上 我只能滚动到足够高才能看到 99701 我猜 我在 Vista Home 上使用 Visual C Ex
  • 如何向 display:block 添加过渡/效果

    我有一个这样的div x 以及最初隐藏的一种 子菜单 x submenu display none 仅当用户位于 x div 上时子菜单才可见 div x hover x submenu display block 现在 我想通过事务或使可
  • 选择部分文本右对齐[重复]

    这个问题在这里已经有答案了 我想知道是否有任何方法可以将选项文本的一部分向右对齐 在下面 您可以看到我有一个选择 左侧有一些名称 右侧有 垂直 我需要将 垂直 向右拉 有什么办法可以做到这一点吗
  • 如何用其他树替换子树?

    在 Scala 宏中 我想做这样的事情 我有一个Tree 可能很大 现在我想找到这棵树的一个具有某种具体形式的子树 例如Apply 现在我想创建一棵新树 它是原始树的副本 但找到的子树被其他树替换 例如 通过类似的方法 我可以用调用某些其他
  • MySQL 5.0 索引 - 唯一索引与非唯一索引

    MySQL 唯一索引和非唯一索引在性能方面有什么区别 假设我想在 2 列的组合上创建索引 并且该组合是唯一的 但我创建了一个非唯一索引 这会对 MySQL 使用的性能或内存产生重大影响吗 同样的问题 有区别吗primary钥匙和unique
  • Orchard 1.7 - 为未发布的内容创建自定义工作流程活动

    我需要利用 Orchard CMS 中的活动列表 未发表的活动是要求之一 我查看并发现 Orchard 默认工作流程活动列表没有未发布的活动 我构建了一个模块来添加我自己的自定义工作流程活动 我在创建活动并使它们工作方面没有问题 但我不知道