# 前言
这里介绍如何在插件中设置自定义object范式
配置了自定义object范式可以扩展下列功能
- 扩展工作流条件校验
- 扩展自动化规则
# 如何使用object
# 创建object
# 创建插件

插件管理操作参考: 插件管理
# 定义对象
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
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
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
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
2
3
4
5
6
7
8
9
10
11
工作流condtion引用自定义对象

状态流转条件判断


# 自动化流程联动
# 自动化规则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
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
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引用扩展对象


# 完整示例
# 配置字段示例
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
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