大道至简,新一代企业应用无栈开发

平台之上,一种语言,可视化、脚本化、全端一体化开发

规则

自动化规则

规则是一直自动化脚本运行环境。

通过规则,可以在站点设置一些“钩子”脚本,当站点发送事件,满足条件时,会自动调用这些脚本,从而改变系统的默认行为。

.. contents:: .. sectnum::

为什么需要规则

使用规则,可将一些特殊的逻辑,附加到系统中。比如:

  • 文件夹上传文件,自动生成编号
  • 图片上传,自动进行文字识别
  • 某个文件夹上传图片后,需要自动进行OCR扫描识别
  • 某个文件夹不能上传.exe的文件
  • 某个文件夹的总容量不能超过1G
  • 某个文件夹上传文件,自动变成保密
  • 上传文件,需要自动通知相关人员
  • 上传图片后,需要自动进行OCR文字识别

这些需求,不是有用户主动发起的,而是需要改变平台内在的一些运行逻辑。

诸如此类的逻辑,可采用系统规则功能实现。

开发人员在扩展应用中预先定义好规则; 网站各栏目的管理人,将规则绑定到网站某个位置,激活规则的使用。

规则的定义

  • 某个对象发生某种事件
  • 满足一定条件时
  • 执行一些脚本操作

规则脚本

规则脚本可以使用如下内置变量:

  • root:所在站点
  • context: 发生事件的对象
  • container: 规则分配的位置,如果有关联的扩展属性设置,也是扩展属性设置的地方
  • request: 请求对象
  • event: 事件, 详细见下面,不同的事件有不同的参数

规则事件

不同的事件,会有不同的参数,供脚本使用。

created: 容器中添加新对象

包括移入和创建 :

  • event.object: 添加的内容

removed:容器中去除对象

包括删除和移出

  • event.object: 删除的内容

modified: 修改,

  • event.object: 修改的内容

movein: 移入的事件

  • event.object : 移入的内容

moveout:移出的事件

  • event.object:移出的内容

comment-added: 添加评注

  • event.object: 评注对象

  • event.comment: 当前的评注对象::

    {''body':body, 'author':author, 'attachments':attachments, 'time':time}

login: 登入,

登录系统

file-downloaded 文件下载,

teamgroup-added: 组添加

teamgroup-removed': 组删除

teamgroup-modified': 组修改,

tag-added': 添加标签,

'tag-removed': 去除标签,

relation-added': 添加关系,

relation-removed': 删除关系,

new-revision': 新版本,

version-fixed': 定版

status-added: 对象新增某个状态

  • event.item: 新增的状态
  • event.old_stati: 之前的状态

status-removed: 对象去除某个状态

  • event.item: 去除的状态
  • event.old_stati: 之前的状态

clock: 站点定时事件

这个事件每小时触发一次。为方便调试,可以主动访问这个页面来触发::

/@zopen.debug:notify_hour_clock

workflow-executed 工作流执行某步骤

工作流规则中,可以利用下面的变量编写脚本:

  • event.workitem 当时的工作项
  • event.workitem.md['step'] 步骤
  • event.workitem.actions[-1]['action_name'] 操作名
  • event.object : 流程单

授权权限: acl-changed

发生授权的时候,会触发次规则。

event有如下属性:

  • event.context: 授权的内容
  • event.roles: 授权的角色
  • event.pids: 用户
  • event.action: 操作:grant/deny/unset

规则的分配管理

查看已经分配的规则::

context.rules.list_assignments()

分配规则::

context.rules.assign(rule_ids, enabled=True, bubbles=False)

注:

  • rule_id 为 应用名:规则文件名 如zopen.outlook:remove_files
  • enabed表示这个规则是否启用生效
  • bubbles表示子文件夹的内容,也使用这个规则,否则仅仅单层内容生效。

变更规则::

context.rules.update(rule_id, enabled=True, bubbles=False)

去除一个规则::

context.rules.remove(rule_id)