# Condition配置(工作流流程校验)

# 关键配置

conditions:            # 条件扩展
  - code: demo_condition2 # 条件对象code (特殊校验任务condition)
    type: progress # 需要执行type,固定为progress
    data: # 返回任务结果
      handler: progress.data
    desc: 这是一个condition demo对象 # 条件对象描述
    icon: progress # 扩展显示的图标,固定为: progress
    name: 插件condiiton Demo2 #条件对象名
    related:
      - story
      - bug
      - task
1
2
3
4
5
6
7
8
9
10
11
12

# 数据接口

示例中的condition.data.handler表示在项目文件中的modules/autotasks/progress.js文件定义了一个data方法,TAPD进行条件判断前,会调用这个方法获取数据,然后与规则配置的数据进行比对,得出条件判断结果。

  • 数据格式

1.调用参数

参数 类型 说明
workspace_id integer tapd项目ID
object_code string 对象名(story,bug,task)
object_id integer 对象ID

2.返回数据

参数 类型 说明
status integer 状态,候选值:1(成功)2(执行中)0(失败)
msg string 错误信息
data object 自定义显示字段,支持text和link

示例1:

/**
 * 返回数据,用于条件比对
 * @returns {Object} 组件配置JSON
 */
module.exports.data = function () {
    return {
        status: 1,
        msg : '',
        data: [ // 自定义显示字段
            {
                field: '执行详情',
                type: 'link',
                value: 'https://www.qq.com',
            },
            {
                field: '执行时间',
                type: 'text',
                value: '2022-09-20 12:30:30',
            },
        ],
    };
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

示例2(任务异步校验):

const tapd = require("@tencent/tplugin-core/src/tapd")

/**
 * 执行自定义任务
 */
function executeTask(taskCode) {
    // todo 这里实现触发任务的逻辑
}

/**
 * 查询任务某次执行结果
 */
function queryTask(taskCode, buildId) {
    // todo 这里实现查询任务结果的逻辑
}


function getResult(pipelineResult){
    switch (pipelineResult) {
        case 'success':
            return 1;
        case 'processing':
            return 2;
        case 'fail':
            return 0;
    }
    return 2;
}

/**
 * 返回任务执行结果数据,用于条件比对
 * @returns {Object} 状态JSON
 */
module.exports.data = function (data) {
    // todo 这里是示例代码,请根据实际情况修改
    const storyId = data['object_id'];
    const storageDocument = 'story_pipeline_record_cache';
    const taskCode = 'task1';
    // 这里用缓存记录任务异步执行结果
    const result = await tapd.storageQuery({
        document: storageDocument,
        condition: {
            storyId: storyId,
        },

    })
    // 如果之前执行过校验任务,则查询执行结果
    if(result){ // 如果查到缓存,查一下任务是否执行完了
        const buildId = result['buildId'];
        // 调用接口查询流水线执行结果
        const pipelineResult = queryTask(taskCode,buildId);

        return {
            status: getResult(taskCode,buildId),
            msg : '',
            data: [ // 自定义显示字段
                {
                    field: '执行详情',
                    type: 'link',
                    value: 'https://www.qq.com',
                },
                {
                    field: '执行时间',
                    type: 'text',
                    value: '2022-09-20 12:30:30',
                },
            ],
        };
    }else{ // 如果查不到缓存,则执行一下任务,缓存需求对应的构建ID
        // 调用接口执行任务
        const pipelineResult = executeTask(taskCode);
        // 记录一下任务buildId和需求对象的关联关系
        const result = await tapd.storageSave({
            document: storageDocument,
            data: {
                storyId: storyId,
                buildId: pipelineResult['buildId'],
            },
        });
        // 返回:校验任务正在执行中
        return {
            status: 2,
            msg : '',
            data: [ // 自定义显示字段
                {
                    field: '执行详情',
                    type: 'link',
                    value: 'https://www.qq.com',
                },
                {
                    field: '执行时间',
                    type: 'text',
                    value: '2022-09-20 12:30:30',
                },
            ],
        };
    }


};

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

# 关联配置

related字段用来指定哪些对象可以配置自定义condition。

  • 附常用对象:
story
task
bug
1
2
3
上次更新: 2023-08-22 17:11:38