工时拦截
要求
适用环境
- 私有部署
ONES 版本
v6.3.0+
依赖包版本
{
"dependencies": {
"@ones-op/fetch": "0.46.12+",
"@ones-open/node-host": "0.4.2+",
"@ones/cli-plugin": "1.29.0+",
"@ones/cli-plugin-template": "1.10.8+",
"@ones-op/sdk": "0.46.7+"
}
}
特别地,还需要在插件 backend 也安装 @ones-open/node-host
cd backend/
npm install @ones-open/node-host@0.4.3+
能力概述
本文档提供工时拦截能力,客户可通过这个功能对工时的操作进行拦截,该能力为组织级别能力。在部分场景下,会出现同一数据多次收到多次拦截,所以使用该能力需保持行为的幂等性,保持行为的幂等性意味着即使同一拦截请求被多次触发,其效果应该如同只被触发一次一样,不会导致重复的数据处理或异常情况
工时验证器与插件
插件体系内,如何使用工时验证器呢?
在插件的 plugin.yaml 中添加工时验证器配置如下:
extension:
- manhourValidator: # 使用工时验证器功能扩展
provider: manhour # 字节数必须是8,后续不允许修改,谨慎定义。命名方式使用字母和数字组成的,不要使用其他特殊字符。
funcs:
- name: validate # 使用该能力必须注册,命名不能改
url: validate # 与插件内func名称一致
工时验证器与插件生命周期
工时验证器功能与插件生命周期操作存在绑定关系,如下表所示:
| 生命周期操作 | 私有部署 | SaaS |
|---|---|---|
| 安装 | 组织级别:注册 | 实例级别:注册 组织级别:注册 |
| 卸载 | 组织级别:注销 | 实例级别:注销 组织级别:注销 |
工时验证器实现
后端实现
- 创建文件
backend/src/manhour-validator.ts:
import { FetchAsAdmin } from '@ones-op/fetch'
import { Logger } from '@ones-op/node-logger'
import type { PluginRequest, PluginResponse } from '@ones-op/node-types'
export async function validate(body: any): Promise<PluginResponse> {
Logger.info('body', body)
const haveError = true
if (haveError) {
return {
statusCode: 200,
body: {
error: {
reason: "这是一个错误提示", // 错误提示
level: "error" //错误级别
},
},
}
}
return {
statusCode: 200
}
}