在实际业务当中,我们经常需要初始化一些原子数据,比如模块a-cms
内置提供的文章审批工作流定义
,再比如更常用的资源定义
一般而言,可以通过模块的Bean组件version.manager
的init
方法初始化原子数据。由于这种场景非常常见,为了近一步简化开发,CabloyJS4.0引入了静态原子
的概念
静态原子
的基本逻辑:通过模块的meta
文件,定义一组原子数据,系统在启动时,会自动读取静态原子
,并写入数据库
此外,通过atomStaticKey + atomRevision
的组合,自动判断静态原子
是否有变更,如果有变更,就自动更新数据库里的数据
下面以模块a-cms
为例,说明静态原子
的具体用法
定义静态原子
定义一个静态原子
数组。由于工作流定义
的内容比较长,所以,这里将工作流定义
分为独立的文件
src/module-system/a-cms/backend/src/config/static/flowDefs.js
- 1const articlePublish = require('./flowDef/articlePublish.js');
- 2
- 3module.exports = app => {
- 4 const flowDefs = [
- 5 articlePublish(app),
- 6 ];
- 7 return flowDefs;
- 8};
src/module-system/a-cms/backend/src/config/static/flowDef/articlePublish.js
- 1module.exports = app => {
- 2 const moduleInfo = app.meta.mockUtil.parseInfoFromPackage(__dirname);
- 3 const content = {
- 4 listener: null,
- 5 process: {
- 6 nodes: ...,
- 7 edges: ...,
- 8 },
- 9 };
- 10 const definition = {
- 11 atomName: 'CMS Article Publish',
- 12 atomStaticKey: 'flowArticlePublish',
- 13 atomRevision: 0,
- 14 description: '',
- 15 content: JSON.stringify(content),
- 16 };
- 17 return definition;
- 18};
名称 | 说明 |
---|---|
atomName |
原子数据的标题 |
atomStaticKey |
系统会自动添加模块名称作为前缀,从而形成系统唯一的原子Key,比如这里的:a-cms:flowArticlePublish |
atomRevision |
从0开始。当静态原子有任何属性变更时,将atomRevision 依次递增,系统就会自动更新数据库里的数据 |
- 更多属性字段:不同的原子类型有不同的业务字段,都可以在这里设置,与方法
ctx.bean.atom.write
中参数item
的字段清单一致,请参见:原子操作
注册静态原子
前面定义好一组静态原子
,接下来就需要在模块的meta
文件中进行注册
src/module-system/a-cms/backend/src/meta.js
- 1const staticFlowDefs = require('./config/static/flowDefs.js')(app);
- 2
- 3const meta = {
- 4 base: {
- 5 statics: {
- 6 'a-flow.flowDef': {
- 7 items: staticFlowDefs,
- 8 },
- 9 },
- 10 },
- 11};
名称 | 说明 |
---|---|
a-flow.flowDef | 原子类型的全称。在这里,原子类型flowDef 是由模块a-flow 提供的 |
items | 静态原子数组 |
评论: