Zope3消息的审批工作流

在任何公司里工作流都是重要的。因此在许多计算机系统尤其是在">内容管理系统(CMS)中基于软件的工作流成为基本要求也就不足为奇了。本章将为消息栏添加发布工作流。

尽管本章并不处理 zope.app.workflow 包的各个方面 - 例如它并不说明如何创建处理定义 - 它只展示最通用的用法示例,将工作流集成到已存在的内容对象包中。而且实现起来惊人的简单。然而,在简单的背后有着相当复杂的接口以及它们的实现和表现。本章最后一节的目标就是用体系结构的角度来解释这个架构。

步骤 I: 明确你的消息工作流

为了明确内容对象的工作流,你需要简单地告诉系统它能够保存工作流数据。最简单的方式就是将下列接口声明添加到主配置文件的消息内容指令中:

1  <implements interface=
2      "zope.app.workflow.interfaces.IProcessInstanceContainerAdaptable"/>

为保存工作流数据的适配器已经定义为对象同时它也实现了 IAnnotable。我们的消息对象通过实现 IAttributeAnnotable 也已经做到了这一点,就象你在相同的内容指令中所看到的那样。

现在对象可以包含工作流,并且当你重启你的浏览器时,你将发现 Message 实例现在已经有一个内容完全空白的“Workflow” 标签了。

步骤 II: 通过浏览器创建工作流及其支持组件

接下来我们需要创建工作流组件本身。在第一次尝试里,我们打算手工创建全部的组件,因为这样可以对工作流运行机制有着更好的了解。

在你开始 Zope 3 之后,到你想在其中添加(或已经存在)消息栏的目录中。点击“Manage Site”到站点管理器;如果目录不是站点的话,点击“Make a site”。现在点击 “Tools” 标签。

如果你刚刚创建站点,你需要创建一个“Local Utility Service”。这可以通过点击 “Service Tool” 的链接来完成。点击 “Add” 按钮,在接下来的屏幕中选择 “Utility Service”,键入名字(如“utilities”)并按 “Add” 确认。现在你已经有了一个被完全配置和激活的 local utility service 了。现在回到工具屏幕。

接下来就是根据过程,包括状态和转换,定义实际的工作流了。点击 “Workflows” 链接,然后点击 “Add” 按钮添加一个工作流。对该工作流我们选择“Stateful Process Definition”(可能是你唯一的选择)并将其命名为“publish-message”。点击 “Add” 按钮,创建该工作流并激活它。

因为 stateful process defintion 组件支持XML的导入导出过滤,所以最好在XML中定义过程。For later reference, 我们打算将工作流XML保存在文件里并将其作为我们产品的一部分。因此打开消息栏包中的一个名为 workflow.xml 的文件,并添加下列过程定义:

1  <?xml version="1.0"?>
2  <workflow type="StatefulWorkflow" title="Message Publication Review">
3    <schema name=""/>
4    <states>
5      <state name="INITIAL" title="initial" />
6      <state name="private" title="Private" />
7      <state name="pending" title="Pending Publication" />
8      <state name="published" title="Public" />
9    </states>
10    <transitions>
11 
12      <transition
13          sourceState="published"
14          destinationState="private"
15          name="published_private"
16          title="Unpublish Message"
17          permission="book.messageboard.PublishContent"
18          triggerMode="Manual" />
19 
20      <transition
21          sourceState="private"
22          destinationState="pending"
23          name="private_pending"
24          title="Submit Message"
25          permission="book.messageboard.Edit"
26          triggerMode="Manual" />
27 
28      <transition
29          sourceState="INITIAL"
30          destinationState="private"
31          name="initial_private"
32          title="Make Private"
33          triggerMode="Automatic" />
34 
35      <transition
36          sourceState="pending"
37          destinationState="published"
38          name="pending_published"
39          title="Publish Message"
40          permission="book.messageboard.PublishContent"
41          triggerMode="Manual" />
42 
43      <transition
44          sourceState="pending"
45          destinationState="private"
46          name="pending_private"
47          title="Retract Message"
48          permission="book.messageboard.Edit"
49          triggerMode="Manual" />
50 
51      <transition
52          sourceState="pending"
53          destinationState="private"
54          name="pending_private_reject"
55          title="Reject Message"
56          permission="book.messageboard.PublishContent"
57          triggerMode="Manual" />
58 
59    </transitions>
60 
61  </workflow>

第 2 行: 定义工作流为状态工作流,这是当然唯一能实现的类型。 “title” 是用来标识工作流的。
第 3 行: 我们并没有特定的数据模式,所以我们忽略它。这些模式常用来允许开发者添加额外的与工作流相关的数据(特定对象)到工作流实例中。
第 4-9 行: 定义消息可能进入的状态。标题再一次被用于增强状态介绍的可读性。
第 10-59 行: 这是一个对象可能会经历的转换列表。我想转换指令属性是可以自说明的并不需要任何更多的解释。

一旦你保存了 XML 文件之后,点击最新创建的工作流(在 “Workflows” 工具界面)并点击 “Import/Export” 标签。从文件中将 XML 拷至屏幕的文本框里。然后点击 “Import” 按钮。相同的屏幕将返回并提示 “Import was successfull!”. 你也将在屏幕底部看到 XML (也许格式有所不同)。如果你现在点击 ManageStates,你将看到刚才通过 XML 导入的四种状态。这同样也发生在 ManageTransitions 视图中。

你也许已经注意到工作流要求定义一个名为 “book.messageboard.PublishContent” 的新权限,因此在消息栏的配置文件中添加权限:

1  <permission
2      id="book.messageboard.PublishContent"
3      title="Publish Message"
4      description="Publish Message."/>

在 security.zcml 配置文件中允许 “Editor” 有权发布内容。

1  <grant
2      permission="book.messageboard.PublishContent"
3      role="book.messageboard.Editor"/>

现在重启 Zope 3。That should be everything that’s to it! 现在让我们看看它们是否运行正常。

时间: 2024-09-20 16:48:01

Zope3消息的审批工作流的相关文章

怎样在SharePoint 2013中实现多级审批工作流

审批工作流介绍 这个Demo是基于多级审批工作流.以古代上传奏折为场景,共分为3个阶段.当创建者上传奏折时,首先会由对应的上级领导审批,审批通过,交付对应的下一级,审批拒绝时,则整个流程结束,具体的官阶信息如下所示: 然后,我们预先设定,以文档库来作为我们的上报奏折库,所以我们需要为其设定自定义的多级审批工作流.最后创建自定义的Task来存放待审批的任务. 创建多级审批工作流 首先,我们可以创建多个审批Stage(阶段),每一阶段处理不同的流程,如下所示: 接着,在Starting Stage,

asp.net中的报销多级审批工作流 (状态机版本)

上篇asp.net中的报销多级审批工作流 ,提到参考了网上一个具体的项目,项目中用状态机工作流完成, 基于学习的原因,我采用顺序工作流,事件驱动方式实现了同样的功能.后来学习到了状态机,觉的状态机 实现也特别方便. 下面我分享下状态机工作流中几个主要的活动. 顺序工作流与状态机工作流的区别: 顺序工作流是一种可以预测,流程比较固定,而状态机工作流不可预测,主要靠外部事件驱动来实现 ,对外的交互比较多,系统的状态需要外部事件的触发来改变. 状态机工作流活动图:

asp.net中的报销多级审批工作流项目加上跟踪服务

这篇我来为asp.net中的报销多级审批工作流项目加上跟踪服务. SqlTrackingService 类表示一个功能完全的跟踪服务.使用此服务可以收集和存储跟踪信息,还可以 存储跟踪配置文件,并在工作流运行时引擎请求时提供这些配置文件.SQL 跟踪服务将运行时跟踪基础结 构发送给它的跟踪数据写入到 SQL 数据库.在许多情况下,对于 SqlTrackingService 服务来说,保持 其数据库和工作流运行时引擎状态之间的一致性十分重要.因此,SqlTrackingService 类实现了 I

asp.net中的报销多级审批工作流

最近正在学习工作流,正好从网上搜索到一个Asp.net工作流(WWF+LINQ)的例子,之前学习MOSS时接触 过工作流,不过那是针对MOSS的工作流,我一直从事B/S架构开发,知道工作流可用于很多环境,其中就包含 asp.net,这让我非常想做一个这样的实例.看了它的源码,大部分都觉的非常不错,不过也有些个人认为 不太满意的地方,这可能是因为作者考虑到只是一个简单的demo,没有必要注意一些非技术方面的细节问 题. 项目介绍:一个报销二级审批工作流,数据层操作采用LINQ TO SQL,虽然M

请教sherapoint2010审批工作流如何实现审批者1或者2 审批!

问题描述 请教sherapoint2010审批工作流如何实现审批者1或者2审批!默认的一次全部并行是与的关系.我需要实现或的逻辑! 解决方案 解决方案二:沒記錯的話,你在"Assignto"欄填寫一個群組名字(e.g.審批者),那麼只要審批者任何一個人Approve就可以了解决方案三:试过,但这样子组里面的审批者将收不到任务!解决方案四:接不到任务?截个图看看,那不科学啊解决方案五:用SharePointDesigner自己写一个吧.解决方案六:收不到邮件可能是因为你那个审批者的AD组

sharepoint 2007 附带中文电子审批工作流问题

问题描述 通过sharepoint启动中文电子审批流程时到审批的过程中提示求解 解决方案 解决方案二:提示被修改了,是不是设计的流程里你把它改了解决方案三:引用1楼FoxDave的回复: 提示被修改了,是不是设计的流程里你把它改了 这个是自带的工作流我们应该不能更改设计的流程吧?而且我也不知道在哪儿改啊解决方案四:既然提示签名被修改了,那就应该是提交过程有问题,试着翻译成英文,去谷歌一下吧:运行wf的时候,尽量用普通账号,不要用网站集管理员等权限很高的用户解决方案五:找了个步骤你对照着看看跟你操

asp.net中的报销多级审批工作流中调用WCF

这一篇我把WF中有关数据处理的操作完全交给WCF处理,WF只关心流程的设计处理,至于底层数据如何操 作并不需要关心.这在很大程序上减少了应用程序之间的耦合度. SendActivity:客户端活动,用于模拟 WCF 服务操作的同步调用. 在WF中可以利用SendActivity完成对WCF的调用,不需要用传统的方式,先生成一个WCF代码,然后调 用相应的方法.在项目中我们触发外部事件是靠"HandleExternalEvent activity",在事件中写相关的业 务逻辑代码,觉的耦

SharePoint 2013工作流学习:年假审批Designer配置

本文介绍SharePoint 2013 使用Designer工具,设计年假审批工作流,由于流程所用的条件和操作都比较简单,所以演示为主,最后附流程图和流程的文本图,有兴趣的可以参照实验.如果对于Designer设计工作流的方法不是很熟悉,可以参见本博客的其他文章. 1.新建请假申请列表,创建一张请假申请表,如下图: 2.选中请假申请表,点击工作流: 3.在工作流页面,选中启动工作流: 4.回到列表页,发现工作流已经启动,并且状态是"经理待审批": 5.点击经理待审批,进入工作流状态,如

SharePoint 2013 工作流之年假审批Designer配置篇

原文:SharePoint 2013 工作流之年假审批Designer配置篇 本文介绍SharePoint 2013 使用Designer工具,设计年假审批工作流,由于流程所用的条件和操作都比较简单,所以演示为主,最后附流程图和流程的文本图,有兴趣的可以参照实验.如果对于Designer设计工作流的方法不是很熟悉,可以参见本博客的其他文章. 1.新建请假申请列表,创建一张请假申请表,如下图: 2.选中请假申请表,点击工作流: 3.在工作流页面,选中启动工作流: 4.回到列表页,发现工作流已经启动