# 前言

这里介绍如何在插件中设置自定义object范式

配置了自定义object范式可以扩展下列功能

  • 扩展工作流条件校验
  • 扩展自动化规则

# 如何使用object

# 创建object

# 创建插件

drawing

插件管理操作参考: 插件管理

# 定义对象

   modules:
    object:
      - code: foo #声明自定义对象boo
        name: Foo #声明自定义对象boo名称
        getter:
          handler: foo.find #声明拿取自定义对象boo详情的方法 指向在modules/object/boo.js文件的find方法
        fields:
          handler: foo.getFields #声明拿取自定义对象boo所有字段的方法 指向在modules/object/boo.js文件的getFields方法
1
2
3
4
5
6
7
8
  • code(必须配置)声明了自定义对象foo的code
  • name(必须配置)声明了自定义对象foo的name
  • getter(必须配置)声明了拿取自定义对象foo详情
  • fields(必须配置)声明了拿取自定义对象foo所有字段的方法

如上,foo.getFields对应modules/object/foo.js文件下的getFields方法

//modules/object/foo.js
/**
 * 这个方法返回定义的Foo对象的字段
 * @param {any} data 上下文
 * @returns {array} 字段数组
 */
module.exports.getFields = async (_data) => {
  const fields = [
    {
      key: 'id',
      label: 'ID',
      type: 'string',
      editable: false,
    },
    {
      key: 'title',
      label: '标题',
      type: 'string',
    },
    {
      key: 'content',
      label: '内容',
      type: 'string',
    },
    {
      key: 'occur_time',
      label: '发生时间',
      type: 'datetime',
      editable: false,
    },
    {
      key: 'level',
      label: '告警等级',
      type: 'string',
    },
    {
      key: 'owner',
      label: '创建人',
      type: 'user',
    },
    {
      key: 'status',
      label: '状态',
      type: 'string',
    },
    {
      key: 'tag',
      label: '标签',
      type: 'tag',
    },
  ];

  return fields;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

如上,foo.find对应modules/object/foo.js文件下的find方法

//modules/object/foo.js
/**
 * 这个方法是拿Foo对象列表的详情
 * @param {any} _data 上下文以及Foo对象的id列表object_ids
 * @returns {array} 对象数组
 */
module.exports.find = async (_data) => {
  // data 的数据格式示例 data.params.object_ids是我们需要的关联对象foo的id列表
  // {
  //   context: {
  //     WORKSPACE: {
  //        ...,
  //     },
  //     'SYSTEM.USER': {
  //        ...,
  //     }
  //   },
  //   params: {
  //     object_ids: [
  //       '20cfde3f86be49a6b0a43360cb078b0b',
  //       '7301eb8926b44b9cab75e81bc00bbbd8'
  //     ]
  //   }
  // }

  //   const { object_ids } = data.params;
  //   const { nick } = data.context['SYSTEM.USER'];
  try {
    return [
      {
        id: '1',
        title: 'title1',
        content: 'content1',
        occur_time: '2024-11-12 15:45:50',
        level: 'level1',
        owner: 'aa;',
        status: 'xixi',
        tag: {
          tag: 'blue',
          value: 'tag1',
        },
      },
      {
        id: '2',
        title: 'title2',
        content: 'content2',
        occur_time: '2024-11-12 15:45:50',
        level: 'level2',
        owner: 'vv;cc;',
        status: 'xixi',
        tag: {
          tag: 'red',
          value: 'tag2',
        },
      },

    ];
  } catch (err) {
    console.log('foo find', err);
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

# 工作流校验

工作流扩展自定义对象注册

 app:
   modules:
     object: #声明自定义object范式配置      
     - code: foo #声明自定义对象foo
     - code: story #声明系统内置对象-story (系统内置对象只能声明关联关系)
       relations: #声明系统内置对象-story的关联关系,主体是story,1个story可能有n个关联的业务对象foo
         - code: related_foo #关联的key自定义填写即可
           name: 关联foo #关联的name自定义填写即可
           type: hasMany #hasMany
           related: foo #目标自定义对象foo
           handler: foo.getRelatedStoryFoo #声明拿取关联的自定义对象foo的id列表的方法 指向在modules/object/foo.js文件的getRelatedStoryFoo方法 
1
2
3
4
5
6
7
8
9
10
11

工作流condtion引用自定义对象

drawing

状态流转条件判断

# 自动化流程联动

# 自动化规则condition的注册

扩展story为trigger时,自动化condition规则

app:
  modules:
    object: #声明自定义object范式配置      
    - code: foo #声明自定义对象foo
    - code: story #声明系统内置对象-story (系统内置对象只能声明关联关系)
      relations: #声明系统内置对象-story的关联关系,主体是story,1个story可能有n个关联的业务对象foo
        - code: related_foo #关联的key自定义填写即可
          name: 关联foo #关联的name自定义填写即可
          type: hasMany #hasMany
          related: foo #目标自定义对象foo
          handler: foo.getRelatedStoryFoo #声明拿取关联的自定义对象foo的id列表的方法 指向在modules/object/foo.js文件的getRelatedStoryFoo方法 
1
2
3
4
5
6
7
8
9
10
11
  • 由于系统内置对象story声明了relations属性,1个story可能有n个关联的业务对象foo
  • trigger为story的时候,注册了自定义对象foo的自动化condition

如上,foo.getRelatedStoryFoo对应modules/object/foo.js文件下的getRelatedStoryFoo方法

  //modules/object/foo.js
/**
 * 这个方法是拿TAPD对象story关联的Foo对象的id列表
 * @param {any} _data 上下文
 * @returns {array} id的字符串数组
 */
module.exports.getRelatedStoryFoo = async (_data) => {
  // data 的数据格式示例 data.params.object_id是我们需要的TAPD story的id
  // {
  //   context: {
  //     WORKSPACE: {
  //        ...,
  //     },
  //     'SYSTEM.USER': {
  //        ...,
  //     }
  //   },
  //   params: { object_id: '1070134171127290631' }
  // }

  //   const { object_id } = data.params;
  //   const { nick } = data.context['SYSTEM.USER'];
  try {
    return ['20cfde3f86be49a6b0a43360cb078b0b', '7301eb8926b44b9cab75e81bc00bbbd8'];
  } catch (err) {
    console.log('getRelatedStoryFoo error', err);
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

自动化任务condition引用扩展对象

drawing drawing

# 完整示例

# 配置字段示例

app:
  code: demo 
  name: demo
  desc: demo
  icon: demo
  tag:
    - name: demo
  modules:
    object: #声明自定义object范式配置
      - code: foo #声明自定义对象foo
        name: Foo #声明自定义对象foo名称
        getter:
          handler: foo.find #声明拿取自定义对象foo详情的方法 指向在modules/object/foo.js文件的find方法
        fields:
          handler: foo.getFields #声明拿取自定义对象foo所有字段的方法 指向在modules/object/foo.js文件的getFields方法
      - code: boo #声明自定义对象boo
        name: Boo #声明自定义对象boo名称
        getter:
          handler: boo.find #声明拿取自定义对象boo详情的方法 指向在modules/object/boo.js文件的find方法
        fields:
          handler: boo.getFields #声明拿取自定义对象boo所有字段的方法 指向在modules/object/boo.js文件的getFields方法
      - code: story #声明系统内置对象-story (系统内置对象只能声明关联关系)
        relations: #声明系统内置对象-story的关联关系,主体是story,1个story可能有n个关联的业务对象foo
          - code: related_foo #关联的key自定义填写即可
            name: 关联foo #关联的name自定义填写即可
            type: hasMany #hasMany
            related: foo #目标自定义对象foo
            handler: foo.getRelatedStoryFoo #声明拿取关联的自定义对象foo的id列表的方法 指向在modules/object/foo.js文件的getRelatedStoryFoo方法
          - code: related_boo #关联的key自定义填写即可
            name: 关联boo #关联的name自定义填写即可
            type: hasMany #hasMany
            related: boo #目标自定义对象foo
            handler: boo.getRelatedStoryBoo #声明拿取关联的自定义对象foo的id列表的方法 指向在modules/object/foo.js文件的getRelatedStoryFoo方法              
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
上次更新: 2025-01-16 14:37:43