Skip to content

开发文档

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 afSessionafc 的会话对象,已经设置好语言,不需要重复设置无要求
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用户或组的全名
CREATORcm:creator计算用户全名
MODIFIERcm:modifier计算用户全名
LOCKERcm:lockOwner计算用户全名
OWNERcm:owner计算用户全名