开发文档
DocEase开发
注意 所有网络请求均以curl命令形式展现。
认证
登录
request
bash
curl -X POST \
'http://localhost:8080/auth/login' \
-H 'Content-Type: application/json' \
-d '{
"username": "admin",
"password": "admin",
"locale": "zh_CN"
}'
通过http payload(body),传入 用户名
、密码
、语言环境
,并获取登录结果。
response
json
{
"success": true,
"userInfo": {
"userLoginId": "admin",
"firstName": "Administrator",
"lastName": ""
},
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luSWQiOiJhZG1pbiIsInRpY2tldCI6IkFUXzNVa2RhdldlIiwiaXNzIjoiZG9jZWFzZSIsImV4cCI6MTY0OTU3MjMxM30.XWX1k24qb6po5PAQZY7JqVATjCnJe4740fjuoenWm_rpbEHUEnVP8XrM7SH7egojFSWNRFbNK35hT4rkYcEy7Q"
}
token: 一个有一定时间限制的登录token(默认24小时)。
同时接口会返回两个header:
set-x-token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luSWQiOiJhZG1pbiIsInRpY2tldCI6IkFUXzNVa2RhdldlIiwiaXNzIjoiZG9jZWFzZSIsImV4cCI6MTY0OTU3MjMxM30.XWX1k24qb6po5PAQZY7JqVATjCnJe4740fjuoenWm_rpbEHUEnVP8XrM7SH7egojFSWNRFbNK35hT4rkYcEy7Q
Set-Cookie:
token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luSWQiOiJhZG1pbiIsInRpY2tldCI6IkFUXzNVa2RhdldlIiwiaXNzIjoiZG9jZWFzZSIsImV4cCI6MTY0OTU3MjMxM30.XWX1k24qb6po5PAQZY7JqVATjCnJe4740fjuoenWm_rpbEHUEnVP8XrM7SH7egojFSWNRFbNK35hT4rkYcEy7Q
这2个一个通过cookie的方式,另一个通过命令的方式返回了与上文json中一样的token。
注意:当token的有效期不足1分钟时,任何对服务器的请求都将返回 set-x-token
头,要求客户端刷新token,这个逻辑在前端需要做拦截器处理,否则将会导致过一段时间后登录状态失效。
登出
request
bash
curl -X POST 'http://localhost:8080/auth/logoff' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luSWQiOiJhZG1pbiIsInRpY2tldCI6IkFUX2lMcUd4akFEIiwiaXNzIjoiZG9jZWFzZSIsImV4cCI6MTY0OTQ5MzYxOH0.vLFPdAI4rNFob5i5a4UzXjOIotrqknVZrrPqhqwxFyHyO_XwPAgzZPL4xphlH6iIuyo-sdes5ZXFuFh7QYY3Xg'
请求头里需要增加 authorization
,并将token上传(需要添加 Bearer
前缀,后面有个空格),表示注销该token。
response
json
{
"success": true
}
服务调用
request
bash
curl -X POST 'http://localhost:8080/api/v1/bpm/{p}/{m}' \
-H 'x-locale: zh_CN' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luSWQiOiJhZG1pbiIsInRpY2tldCI6IkFUX01jRXNzRVVRIiwiaXNzIjoiZG9jZWFzZSIsImV4cCI6MTY0OTU3NTk4NX0.VsiwcWC7tILBptx6E95ulIaInPO7OGu7_-BDu-Fx08nEp_eYJgyBKZaqSZhiRXvNN_4nfxD8YCivCbklxxrH2A' \
支持的请求类型
GET
POST
请根据业务实际情况合理选择调用方式。
如需请求的数据量较大,建议使用 POST
。
参数说明
参数 | 说明 |
---|---|
p | 业务模块名称,为类的名字,如 TestComponent |
m | 方法名,如 sayHello |
header说明
header | 说明 |
---|---|
x-locale | 语言环境,默认 en_US |
Authorization | 带有前缀的token |
服务端开发
以下说明以 TestComponent 为例。
java
@P
public class TestComponent implements IBpm {
@M
@MandatoryArgNames({"date"})
public CommonResult<?> sayHello(IAfSession afSession, Locale locale,
@Arg("doc_name") String docName,
String name,
int intV,
Integer nullV,
long longV,
double doubleV,
boolean bV,
MultipartFile file,
Date date, Set<User> users, User user) {
System.out.println(locale);
System.out.println(afSession);
System.out.println(docName);
System.out.println(arg("name"));
System.out.println(name);
System.out.println(intV);
System.out.println(nullV);
System.out.println(longV);
System.out.println(doubleV);
System.out.println(bV);
System.out.println(date);
System.out.println(users);
System.out.println(user);
return CommonResult.success("hello, test component called.");
}
@M
public StreamResult download(String name) throws MalformedURLException {
System.out.println(name);
return new StreamResult().setFileName("abc.xls")
.setContentType(ContentTypeHelper.getContentTypeByExtension("xls"))
.setResource(new FileUrlResource("/Users/Val/Desktop/行权计算器.xls"));
}
}
模块定义
需要增加 @P
注解,该注解在同时也代表该类是一个spring bean。
类名为组件id,请注意不要有重复的类出现,否则应用无法启动。
如果需要一些工具方法,如获取一些参数(实际上可动态自动注入),则可以实现 IBpm
接口。实现该接口不是必选项。
方法定义
需要增加 @M
注解,请注意不要在同一个类中出现相同的方法名,否则应用无法启动。
如需要检查参数列表,则增加@MandatoryArgNames
注解,框架会进行提前检测来确保列表中的参数必填。
入参支持
参数类型 | 说明 | 参数名要求&注意事项 |
---|---|---|
IAfSession afSession | afc 的会话对象,已经设置好语言,不需要重复设置 | 无要求 |
Locale locale | 语言环境 | |
T argName | 请求参数,T支持 String boolean/Boolean int/Integer long/Long double/Double float/Float Date 支持的日期格式: yyyy/MM/dd yyyy/MM/dd HH:mm:ss yyyy-MM-dd yyyy-MM-dd HH:mm:ss yyyyMMddHHmmss | 参数名: 如设置了 @Arg(<argName>) 则无要求 如未设置则需要跟参数名一样值注意:如使用包装类且没有传入参数,则注入null值 如使用开箱类且没有传入参数,则注入默认值 (如boolean为false,int为0) |
MultipartFile file | 上传的文件 | 参数名为上传文件的字段名,如 <input name='file'... 里的 file |
其他 pojo 类 | 反序列化能力 | 请求的参数同名,使用 fastjson 的反序列化能力尝试解析数据到 pojo |
出参支持
- object:自由模式,与原来相同
- CommonResult<?>:返回给客户端的json模型
- StreamResult:输出给客户端的文件,可支持文件打开或下载
代码样例,流类型可通过setStreamType方法进行设置
java
@M
public StreamResult download(IAfSession afSession, String name) throws MalformedURLException {
System.out.println(name);
return new StreamResult().setFileName("abc.xls")
.setContentType(ContentTypeHelper.getContentTypeByExtension("xls"))
.setResource(new FileUrlResource("/Users/Val/Desktop/行权计算器.xls"));
}
AQL扩展支持
AQL中除了产品默认的部分计算字段,如PERMISSIONS ASPECTS等,在docease-ext中新增了一些新的计算字段可供select时候使用。当使用select *时将会默认带出。
sql
select OWNER, EXTENSION, SIZE... from cm:content where ...
计算字段 | 说明 |
---|---|
AUTHNAME | 用户或组的短名 |
AUTHDISPLAYNAME | 用户或组的全名 |
CREATOR | cm:creator计算用户全名 |
MODIFIER | cm:modifier计算用户全名 |
LOCKER | cm:lockOwner计算用户全名 |
OWNER | cm:owner计算用户全名 |