# 前言
这里介绍如何在应用中设置自定义object范式,扩展互联互通能力
互联互通能力可以扩展下列功能
- 扩展价值流对象
- 扩展自动化工作流条件
- 扩展自动化规则
扩展互联互通能力需要进行代码配置
# 如何使用object
# 扩展价值流对象
# 工作流校验
# 自动化流程联动
# 如何声明object并且编写处理逻辑
# 配置字段
# 配置字段示例
app:
code: demo
name: demo
desc: demo
icon: demo
tag:
- name: demo
envs:
- key: API_SECRET
secret: strings
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方法
events:
- code: create #声明自定义对象foo的创建事件可以作为tapd自动化规则的trigger event(tp--demo--foo::create), 事件的上报需要请求接口上报
name: 创建
- code: update #声明自定义对象foo的更新事件可以作为tapd自动化规则的trigger event(tp--demo--foo::update), 事件的上报需要请求接口上报
name: 更新
- code: status_change #声明自定义对象foo的状态流转事件可以作为tapd自动化规则的trigger event(tp--demo--foo::status_change), 事件的上报需要请求接口上报
name: 状态流转
relations: #声明自定义对象foo的关联关系,主体是foo,1个foo可能有n个关联的TAPD系统内置对象bug;1个foo可能有n个关联的自定义对象boo
- code: related_bugs #关联的key自定义填写即可
name: 关联缺陷 #关联的name自定义填写即可
type: hasMany #hasMany
related: bug #目标系统内置对象-story
handler: foo.getRelatedBug #声明拿取关联的系统内置对象bug的id列表的方法 指向在modules/object/foo.js文件的getRelatedBug方法
- code: related_boo #关联的key自定义填写即可
name: 关联Boo #关联的name自定义填写即可
type: hasMany #hasMany
related: boo #目标自定义对象boo
handler: foo.getRelatedBoo #声明拿取关联的自定义对象boo的id列表的方法 指向在modules/object/foo.js文件的getRelatedBoo方法
- 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方法
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
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
# 自定义对象的注册
- 注册了自定义对象
foo
app:
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方法
events:
- code: create #声明自定义对象foo的创建事件可以作为tapd自动化规则的trigger event(tp--demo--foo::create), 事件的上报需要请求接口上报
name: 创建
- code: update #声明自定义对象foo的更新事件可以作为tapd自动化规则的trigger event(tp--demo--foo::update), 事件的上报需要请求接口上报
name: 更新
- code: status_change #声明自定义对象foo的状态流转事件可以作为tapd自动化规则的trigger event(tp--demo--foo::status_change), 事件的上报需要请求接口上报
name: 状态流转
relations: #声明自定义对象foo的关联关系,主体是foo,1个foo可能有n个关联的TAPD系统内置对象bug;1个foo可能有n个关联的自定义对象boo
- code: related_bugs #关联的key自定义填写即可
name: 关联缺陷 #关联的name自定义填写即可
type: hasMany #hasMany
related: bug #目标系统内置对象-story
handler: foo.getRelatedBug #声明拿取关联的系统内置对象bug的id列表的方法 指向在modules/object/foo.js文件的getRelatedBug方法
- code: related_boo #关联的key自定义填写即可
name: 关联Boo #关联的name自定义填写即可
type: hasMany #hasMany
related: boo #目标自定义对象boo
handler: foo.getRelatedBoo #声明拿取关联的自定义对象boo的id列表的方法 指向在modules/object/foo.js文件的getRelatedBoo方法
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
- code(必须配置)声明了自定义对象
foo的code - name(必须配置)声明了自定义对象
foo的name - getter(必须配置)声明了拿取自定义对象
foo详情 - fields(必须配置)声明了拿取自定义对象
foo所有字段的方法 - events(可选)声明了自定义对象
foo的自动化trigger events - relations(可选)声明了自定义对象
foo的关联关系
- 注册了自定义对象
boo
app:
modules:
object: #声明自定义object范式配置
- 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方法
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- code(必须配置)声明了自定义对象
boo的code - name(必须配置)声明了自定义对象
boo的name - getter(必须配置)并且注册了拿取自定义对象
boo详情 - fields(必须配置)并且注册了拿取自定义对象
boo所有字段的方法
- 对象间的关联关系如下图
# TAPD通用价值流的自定义对象的注册
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 - 所以注册了通用价值流配置的对象foo。
- 对象foo的价值流对象可以配置在需求详情页
# 自动化规则trigger的注册
- 由于自定义对象
foo声明了events属性 - 所以注册了自定义对象
foo的trigger,并且有三种trigger event
# 自动化规则condition的注册
由于系统内置对象
story声明了relations属性,1个story可能有n个关联的业务对象foo所以trigger为
story的时候,注册了自定义对象foo的自动化condition由于自定义对象
foo声明了relations属性,1个foo可能有n个关联的TAPD系统内置对象bug;1个foo可能有n个关联的自定义对象boo;所以trigger为
foo的时候,注册了系统内置对象bug的自动化condition,自定义对象boo的自动化condition
# 自动化规则executor的注册
- 由于自定义对象
foo声明了relations属性,1个foo可能有n个关联的TAPD系统内置对象bug; - 所以trigger为
foo的时候,注册了系统内置对象bug的自动化executor(缺陷创建,缺陷字段更新)
# 代码示例
# getter方法示例
modules:
object: #声明自定义object范式配置
- code: foo #声明自定义对象foo
name: Foo #声明自定义对象foo名称
getter:
handler: foo.find #声明拿取自定义对象foo详情的方法 指向在modules/object/foo.js文件的find方法
1
2
3
4
5
6
2
3
4
5
6
如上,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: 'javierjin;',
status: 'xixi',
tag: {
tag: 'blue',
value: 'tag1',
},
},
{
id: '2',
title: 'title2',
content: 'content2',
occur_time: '2024-11-12 15:45:50',
level: 'level2',
owner: 'javierjin;gobichen;',
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
# fields方法示例
modules:
object: #声明自定义object范式配置
- code: foo #声明自定义对象foo
name: Foo #声明自定义对象foo名称
fields:
handler: foo.getFields #声明拿取自定义对象foo所有字段的方法 指向在modules/object/foo.js文件的getFields方法
1
2
3
4
5
6
2
3
4
5
6
如上,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
# getRelatedStoryFoo方法示例
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
如上,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