aiM18开发者中心 aiM18开发者中心
文档主页
  • 平台

    • 平台总体概述
    • 前端开发须知
    • 后台开发须知
    • EBI开发须知
    • JSF组件属性表
    • BPM扩展接口
    • 一查到底扩展接口
    • 手机App设置
  • ERP

    • ERP 后端扩展
    • ERP 应用配置
    • ERP 前端扩展
  • 教程

    • 设置Eclipse开发环境
    • 创建App教程
  • 平台相关

    • API授权
    • 通用的数据对象
    • 核心的API
    • EBI相关接口
  • 企业资源规划
  • 人力资本管理
  • 业务流程处理
  • 日程管理
  • 文档管理
  • 教程

    • 通过API与aiM18进行交互
教程
GitHub (opens new window)
文档主页
  • 平台

    • 平台总体概述
    • 前端开发须知
    • 后台开发须知
    • EBI开发须知
    • JSF组件属性表
    • BPM扩展接口
    • 一查到底扩展接口
    • 手机App设置
  • ERP

    • ERP 后端扩展
    • ERP 应用配置
    • ERP 前端扩展
  • 教程

    • 设置Eclipse开发环境
    • 创建App教程
  • 平台相关

    • API授权
    • 通用的数据对象
    • 核心的API
    • EBI相关接口
  • 企业资源规划
  • 人力资本管理
  • 业务流程处理
  • 日程管理
  • 文档管理
  • 教程

    • 通过API与aiM18进行交互
教程
GitHub (opens new window)
  • 通用

    • 访问授权
    • 通用JSON对象
    • 核心服务
      • 实体的 CRUD Web 服务
        • 创建实体
        • HTTP 请求
        • 参数
        • 结果
        • 读取实体
        • HTTP 请求
        • 参数
        • 结果
        • 保存实体
        • HTTP 请求
        • 参数
        • 简化的实体JSON
        • 结果
        • 删除实体
        • HTTP 请求
        • 参数
        • 结果
      • 通过编号获取ID的Web服务
        • HTTP 请求
        • 参数
        • 结果
      • 数据搜索Web服务
        • HTTP 请求
        • 参数
        • 条件详情
        • 结果
      • 附件Web服务
        • 获取附件列表
        • HTTP 请求
        • 参数
        • 结果
        • 获取附件文件
        • HTTP 请求
        • 参数
        • 结果
        • 上传附件文件
        • HTTP 请求
        • 参数
        • 结果
        • 传输文件密码的方法
      • 通知Web服务
        • 获取通知列表
        • HTTP 请求
        • 参数
        • 通过用户ID获取通知列表
        • HTTP 请求
        • 参数
        • 结果
        • 获取通知
        • HTTP 请求
        • 参数
        • 结果
      • 公告 Web 服务
        • 获取公告列表
        • HTTP 请求
        • 参数
        • 结果
        • 获取公告
        • HTTP 请求
        • 参数
        • 结果
        • 一查到底 - 获取相关记录
        • HTTP 请求
        • 参数
        • 结果
        • 一查到底 - 通过语音指令获取结果
        • HTTP 请求
        • 参数
        • 结果
      • 文件打印Web服务
        • 获取PDF 文件
        • HTTP 请求
        • 参数
        • 结果
      • 上传图片 Web服务
        • HTTP 请求
        • 参数
        • 结果
      • 保存草稿 Web 服务
        • HTTP 请求
        • 参数
        • 简化的实体JSON
        • 结果
    • 商业智能
    • 错误码说明
  • 业务流程管理

    • 业务流程管理
  • 日程管理

    • 日程管理
  • 文档管理

    • 文档管理系统
  • 企业资源规划

    • API授权流程
    • 基础资料
    • 财务
    • 财务EBI
    • 委外代销
    • EBI
    • 仓库管理方案
    • 零售
    • 零售储值
    • 零售和第三方物流
    • 生产
    • 贸易和财务
    • 采购
    • 销售
    • 库存
    • 委外
  • 人力资本管理

    • API授权流程
    • 绩效管理
    • 考勤管理
    • 临时工
    • 人事管理
    • 请假管理
    • 医疗索偿
    • 薪资管理
    • 招聘管理
    • 培训&资助
  • Web Services中文
  • 通用
Multiable
2024-02-23
目录

核心服务

版本: 1.0 | 发布日期: 14/8/2018

# 实体的 CRUD Web 服务

一个实体是指 aiM18 模块中的一条记录,aiM18提供了以下与实体相关的Web服务:

  • 创建
  • 读取
  • 更新
  • 删除

# 创建实体

获取一个特定模块的空SqlEntity

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/entity/create/employee?menuCode=employee")
  .post()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

POST http://[server]/jsf/rfws/entity/create/[module]?menuCode=[menuCode]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module String(Path) 必填. 模块类型,可以在数据字典里找到
menuCode String(Query) 必填. 菜单编号,例如‘员工’,可以在数据字典中找到
param json String(Query) 特殊操作的附加参数

# 结果

如果 API 运行成功,响应状态码将为 200,然后它将返回一个空的 SqlEntity。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个空的SqlEntity
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个CheckMsg JSON 数组

# 读取实体

获取特定模块的现有 SQLEntity。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/entity/read/employee?menuCode=employee&id=1")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/entity/read/[module]?menuCode=[menuCode]&id=[id]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module String(Path) 必填. 模块类型,例如‘员工’,可以在数据字典中找到
menuCode String(Query) 必填. 菜单编号,例如‘员工’,可以在数据字典中找到
id long(Query) 必填. 实体的id
param json String(Query) 特殊操作的附加参数
iRev int(Query) 如果要读取实体的旧版本,请设定此值。如果要读取一个已删除实体,请设定该实体的 id 和 iRev。

# 结果

如果 API 运行成功,响应状态码将是 200,然后它将返回该模块的一个正确 SqlEntity。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个正确的SqlEntity
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个 CheckMsg JSON 数组

# 保存实体

将 SqlEntity 保存到特定模块。

OkHttpClient client = new OkHttpClient();

MediaType jsonMT = MediaType.parse("application/json; charset=utf-8");
RequestBody rb = RequestBody.create(jsonMT, 
                 "[Simplified Entity JSON]" or "array of [Simplified Entity JSON]");

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/entity/s/save/employee?menuCode=employee")
  .put(formBody)
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

PUT http://[server]/jsf/rfws/entity/s/save/[module]?menuCode=[menuCode]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module String(Path) 必填. 模块类型,例如‘员工’,可以在数据字典中找到
menuCode String(Query) 必填. 菜单编号,例如‘员工’,可以在数据字典中找到
param jsonString(Query) 特殊操作的附加参数
entity jsonString(Query) 简化的实体 JSON,结构请参考下文。请注意,JSON需要使用 URL 编码.
entitys_in_entity String(Body) 简化的实体 JSON,结构请参考下文。建议在请求体中传实体 JSON。如果要处理多个实体,请传一个简化的实体 JSON 数组。
autoSubmit boolean(Query) 是否允许自动送批,值为TRUE时自动送批

# 简化的实体JSON

{
	"employeepic": {
		"values": []
	},
	"employee_attach": {
		"values": []
	},
	"employee": {
		"values": [
          {"code": "000171","desc": "abcd"}
        ]
	}
}
  • JSON 包含模块中不同表的对象,每个表都包含一个 “values ”JSON 数组,用于指定表中每个字段的值。
  • 模块的主表是必要的。关于哪个表是主表,用户可以参考数据字典。
  • 如果未提供表格或字段值,则不会保存。

# 结果

如果 API 运行成功,响应状态码将是 200,然后它将返回此 SqlEntity 的正确 ID。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 所保存的SqlEntity的ID
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个CheckMsg JSON 数组

# 删除实体

从特定模块删除 SqlEntity。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/entity/delete/employee?menuCode=employee&id=1")
  .delete()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

DELETE http://[server]/jsf/rfws/entity/delete/[module]?menuCode=[menuCode]&id=[id]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module String(Path) 必填. 模块类型,例如‘员工’,可以在数据字典中找到
menuCode String(Query) 必填. 菜单编号,例如‘员工’,可以在数据字典中找到
id long(Query) 必填. 实体的id
param json String(Query) 特殊操作的附加参数

# 结果

如果 API 运行成功,响应状态码将是 200。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Status 状态码是 200
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个CheckMsg JSON 数组

# 通过编号获取ID的Web服务

通过用模块中的单据编号获取实体 ID.

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/entity/getIdByCode/employee?menuCode=employee&code=001")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/entity/getIdByCode/[module]?menuCode=[menuCode]&code=[record code]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module String(Path) 必填. 模块类型,例如‘员工’,可以在数据字典中找到
menuCode String(Query) 模块的菜单编号,可在数据字典中找到
code string(Query) 必填. 单据的编号
beId int(Query) 如果模块是特定BE的,则需要提供 beID。BE 在 aiM18 中指企业法人,即勾选 BE 复选框的[部门]记录。

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个 JSON 对象。JSON 对象包括 id、withRight 和 withMulti。id 的类型是 long。withRight 和 withMulti 的类型是布尔型。withRight 为 true 时,表示当前用户可以访问此单据。withMulti 为 true 时,表示有两个或更多单据使用此编号。

如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个JSON 对象包括 id、withRight 和 withMulti。
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个CheckMsg JSON 数组

# 数据搜索Web服务

使用lookup类型在 aiM18 中搜索数据。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/search/search?stSearch=employee&startRow=1&endRow=10")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/search/search?stSearch=[stSearchName]&startRow=[startRow]&endRow=[endRow]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
stSearch String(Query) 必填. Lookup 类型,例如‘员工’,可以在数据字典或UDF Lookup中找到。
startRow int(Query) 搜索的起始行
endRow int(Query) 搜索的结束行
beId long(Query) 如果搜索是特定BE的,则 beId 需要填写
formatId long(Query) 搜索格式 ID
conds String(Query) 请查看 条件详情
sorts String(Query) 排序字段,用“; ”分隔。如果不是升序,请使用“!”;示例:"code;!desc”
resultFields String(Query) 如果要返回某些字段值,请使用此参数。
lookupField boolean(Query) 如果值为 true,则结果数据将是没失效、没锁定和已批准的。
quickSearchStr String(Query) 如果要使用快速搜索,请设定此值。
fieldDesc boolean(Query) 如果值为 true,将返回字段的名称和mess值。
viewDeleted boolean(Query) 如果要搜索已删除的数据,请设置此值为 true。

# 条件详情

Conds 格式:

Id=lessThan=5=and=id=largerOrEqual=3=or=(name=contains =ss=or=name=contains=bb)

意思是:

Id<5 and id >=3 or (name like ‘%ss%’ or name like ‘%bb%’)

请使用这些格式来编写 conds:

("equal", "="),

("unequal", "<>"),

("largerThan", ">"),

("lessThan", "<"),

("largerOrEqual", ">="),

("lessOrEqual", "<="),

("contains", "like"),

("doseNotContain", "notlike"),

("in", "in"),

("notIn", "notin"),

("startWith", "like"),

("endWith", "like");

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个SqlTable。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个SqlTable
fail Header(error_info) 一个CheckMsg JSON数组

# 附件Web服务

# 获取附件列表

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/attach/getAttach?module=dept&stSearch=dept&code=ADMIN")
  .get()
  .addHeader("authorization", "Bearer OGFiZmU2ZTktMzYzMS00NjIwLWJhNGYtYWU2OGQyNTZhMmNi")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://127.0.0.1:8080/jsf/rfws/attach/getAttach?module=[module Name]&stSearch=[stSearch code]&code=[recod's code]

# 参数

名字 类型 说明
authorization string(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id string(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
module string(Query) 必填. 目标 FM/交易单据的模块编号
code string(Query) 必填. 目标 FM/交易单据的编号
stSearch string(Query) 默认 = 模块,StSearchinfo,供系统使用
beId long(Query) 如果模块是特定BE的,则需要提供 beID。BE 在 aiM18 中指企业法人,即勾选 BE 复选框的[部门]记录。

# 结果

类型 位置(error_id) 说明
success Body 一个 json 数组

json 数组示例

[
	{"needPassword":"false",
	"code":"M18_GZWZ2017050801-FIXED.docx",
	"fileSize":823092.0,
	"author":"admin",
	"createUser":"admin",
	"remark":"",
	"id":9,
	"createUid":5,
	"desc":"M18_GZWZ2017050801-FIXED",
	"createDate":"2017/07/04 10:52:25",
	"tags":""},

	{"needPassword":"true",
	"code":"M18_GZWZ2017051801.docx",
	"fileSize":108683.0,
	"author":"admin",
	"createUser":"admin",
	"remark":"",
	"id":10,
	"createUid":5,
	"desc":"M18_GZWZ2017051801",
	"createDate":"2017/07/04 10:52:25",
	"tags":""}
]


参数名称 含义
id 附件ID
code 附件编号
desc 附件标题
fileSize 附件的文件大小
author 附件的作者
tags 附件的标签
remark 附件的备注
createUser 创建附件的用户名
createUid 创建附件的用户ID
createDate 附件的创建日期
needPassword 文件是否用密码加密

# 获取附件文件

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/attach/getFile?module=dept&stSearch=dept&code=ADMIN&id=10")
  .get()
  .addHeader("authorization", "Bearer OGFiZmU2ZTktMzYzMS00NjIwLWJhNGYtYWU2OGQyNTZhMmNi")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://127.0.0.1:8080/jsf/rfws/attach/getFile?module=[module Name]&stSearch=[stSearch code]&code=[recod's code]&id=[Attachment ID]

# 参数

名字 类型 说明
authorization string(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id string(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
module string(Query) 必填. 目标 FM/交易单据的模块编号
stSearch string(Query) 默认 = 模块, StSearchinfo,供系统使用
code string(Query) 目标 FM/交易单据的编号
Id string(Query) 必填. 附件ID
password string(Query) 文件使用密码加密时必须填写。附件的密码。此密码需要加密。

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个文件。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个文件
fail Header(error_info) 一个CheckMsg JSON数组

# 上传附件文件

OkHttpClient client = new OkHttpClient();
File file = new File("C:\\script.txt");
MediaType mt = MediaType.parse("application/octet-stream");
RequestBody rb = RequestBody.create(mt, file);

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/attach/upload?module=dept&stSearch=dept&code=ADMIN&fileName=script.text&title=attachment&author=aa&tags=program;aiM18;script&remark=aabbcc")
  .post(rb)
  .addHeader("authorization", "Bearer OGFiZmU2ZTktMzYzMS00NjIwLWJhNGYtYWU2OGQyNTZhMmNi")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

POST http://127.0.0.1:8080/jsf/rfws/attach/upload?module=[module Name]&stSearch=[stSearch code]&code=[recod's code]&fileName=[Attachment’s filename]&title=[file name]&author=[user name]&tags=[tags]&remark=[remark]

# 参数

名字 类型 说明
authorization string(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id string(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
module string(Query) 必填. 目标 FM/交易单据的模块编号
stSearch string(Query) 默认 = 模块, StSearchinfo,供系统使用
code string(Query) 目标 FM/交易单据的编号
fileName string(Query) 必填. 附件的文件名称
title string(Query) 必填. 文件名(将用作附件编号,与当前系统逻辑相同)
author string(Query) 默认 = 当前用户的用户名。附件作者
tags string(Query) 附件标签
remark string(Query) 附件备注
overwrite boolean(Query) 是否替换记录中第一个文件名相同的附件。如果设置为 “true”,将搜索当前附件列表,并替换第一个匹配的具有相同附件编号的附件。如果设为 false,则会一直追加到附件列表中。
password string(Query) 密码是否需要加密
beId long(Query) 如果模块是特定BE的,则需要提供 beID。BE 在 aiM18 中指企业法人,即勾选 BE 复选框的[部门]记录。

# 结果

如果 API 运行成功,响应状态码将是 200。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 状态码200
fail Header(error_info) 一个CheckMsg

# 传输文件密码的方法

请注意,附件模块支持对文件进行密码加密。如果用户想通过密码对文件进行加密或解密,为了安全起见,用户需要先对密码进行加密。我们的系统使用 AES 模式对Web服务传输的密码进行加密。

以下是示例代码:

	private static Key aesKey = new SecretKeySpec("Mac02017Dms02017".getBytes(), "AES");

	public static String encryptDmsTransferPassword(String password) {
		try {
			Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
			// encrypt the text
			cipher.init(Cipher.ENCRYPT_MODE, aesKey);
			byte[] encrypted = cipher.doFinal(password.getBytes());
			return DatatypeConverter.printHexBinary(encrypted);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

# 通知Web服务

# 获取通知列表

获取系统通知列表

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/sysAlert/getList?rowLimit=10&page=1&readMode=2")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/sysAlert/getList?rowLimit=[no. of row]&page=[pagination]&readMode=[readMode]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
rowLimit int(Query) 行数,默认 = 5
page int(Query) 通知列表的分页,默认 = 1
readMode int(Query) 读取状态 0 = 全部, 1 = 已读, 2 = 未读
count boolean(Query) 如果 count 为 true,则返回通知的计数

# 通过用户ID获取通知列表

通过用户ID获取系统通知列表

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/sysAlert/getAlertList?uid=1&rowLimit=10&page=1")
  .post()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

POST http://[server]/jsf/rfws/sysAlert/getAlertList?uid=[uid]&rowLimit=[no. of row]&page=[pagination]&readMode=[readMode]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
uid long(Query) 必填. 用户ID
rowLimit int(Query) 行数,默认 = 5
page int(Query) 通知列表的分页,默认 = 1
readMode int(Query) 读取状态 0 = 全部, 1 = 已读, 2 = 未读
count boolean(Query) 如果 count 为 true,则返回通知的计数

# 结果

如果 API 运行成功,将返回一个 SqlTable。如果 count 为 true,则将返回通知的计数。

位置 说明
Body 一个sqlTable json string
Header 如果 count 为 true,返回通知的计数

# 获取通知

获取系统通知

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/sysAlert/get?alertId=1")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/sysAlert/getList?alertId=[id of alert record]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
alertId long(Path) 必填. 通知记录的id

# 结果

如果 API 运行成功,它将返回一个 SqlTable。

位置 说明
Body 一个 SqlTable JSON string

# 公告 Web 服务

# 获取公告列表

获取系统公告列表

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/ancm/getAncmList?page=1&pageSize=50&orderField=ancmDate&orderAsc=DESC&readMode=0")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/ancm/getAncmList?page=[pagination]&pageSize=[pageSize]&orderField=[order field]&orderAsc=[order type]&readMode=[read mode]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
pageSize int(Path) 必填. 页面大小
page int(Query) 必填. 公告列表的分页
readMode int(Query) 读取状态 0 = 全部, 1 = 已读, 2 = 未读
orderField string(Query) 使用哪个字段进行排序。
orderAsc String(Query) 排序类型,值可以是 ASC 或 DESC。默认为 DESC。
excludeIds String(Query) 使用此值排除某些公告。可以是一个 id,也可以是多个 id。如果是两个或多个 id,id 之间必须用 ,分隔。
getCount boolean(Query) 如果 getCount 为 true,则返回公告的计数
quickSearch String(Query) 如果该值不为空,则可用于搜索标题、公开日期和重要性

# 结果

如果 API 运行成功,它将返回一个 SqlTable。如果 getCount 为 true,则将返回公告列表的计数。如果 getCount 为 false,则将返回公告列表的信息。

位置 说明
Body 一个 SqlTable JSON string

# 获取公告

获取系统公告

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/ancm/read?ancmId=1")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/ancm/read?ancmId=[id of announcementrecord]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
ancmId long(Path) 必填. 公告记录的id

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个SqlEntity。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个 SqlEntity JSON string
fail Header(error_info) 一个 CheckMsg JSON 数组

# 一查到底 - 获取相关记录

给定一条记录,返回与该记录相关的所有其他记录。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/telescope/getRelatedRecord/user/2")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/telescope/getRelatedRecord/{lookupType}/{recordId}

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
lookupType String(Path) 必填. 搜索类型
recordId long(Path) 必填. 源记录id

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个JSON。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

[
    {
        "ids": [
            1,
            114
        ],
        "lastModifyDate": 1553229061000,
        "module": "dept",
        "moduleDisplay": "Department"
    },
    {
        "ids": [
            182,
            120
        ],
        "lastModifyDate": 1555925150000,
        "module": "employee",
        "moduleDisplay": "Employee"
    }
]
类型 位置 说明
success Body 一个SqlEntity JSON string
fail Header(error_info) 一个CheckMsg JSON 数组

# 一查到底 - 通过语音指令获取结果

一查到底 NPL 触发器,根据移动应用程序设置返回匹配的一查到底结果。

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/telescope/telescopeNlp?tags=staff&tags=Jacky")
  .get()
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

GET http://[server]/jsf/rfws/telescope/telescopeNlp?tags={keyword}

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id String(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
tags String(Query) 必填. 搜索关键词

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个JSON。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

{
    "stSearch": "employee",
    "formatFieldDesc": {
        "code": "",
        "desc__lang": "Name(Current Language)",
        "iRev": "Inner Version",
        "lastModifyDate": "Last Modified Time",
        "employee.lastModifyUid.simpleUser.desc__lang": "Last Modified By(Current Language)",
        "id": "",
        "desc": ""
    },
    "size": 2,
    "stSearchDisplay": "Employee",
    "values": [
        {
            "code": "Havid0012",
            "desc__lang": "Raindrop_en",
            "iRev": 11,
            "lastModifyDate": "2019-04-22 17:27:57",
            "employee.lastModifyUid.simpleUser.desc__lang": "Raindrop_en",
            "id": 382,
            "desc": "Raindrop_en",
            "st_desc": "Raindrop_en",
            "st_id": 382,
            "st_code": "Havid0012"
        },
        {
            "code": "Havid0018",
            "desc__lang": "B",
            "iRev": 8,
            "lastModifyDate": "2019-04-22 17:27:57",
            "employee.lastModifyUid.simpleUser.desc__lang": "Raindrop_en",
            "id": 398,
            "desc": "B",
            "st_desc": "B",
            "st_id": 398,
            "st_code": "Havid0018"
        }
    ],
    "fieldDesc": {
        "code": "Code",
        "st_id": "st_id",
        "st_code": "st_code",
        "desc__lang": "Name(Current Language)",
        "st_desc": "st_desc",
        "employee.lastModifyUid.simpleUser.desc__lang": "Name(Current Language)",
        "iRev": "Inner Version",
        "id": "Key ID",
        "lastModifyDate": "Last Modified Time",
        "desc": "Name"
    }
}
类型 位置 说明
success Body 一个 SqlEntity JSON string
fail Header(error_info) 一个 CheckMsg JSON 数组

# 文件打印Web服务

# 获取PDF 文件

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/jrPrint/fetchPdf?menuCode=employee&recId=1")
  .post()
  .addHeader("authorization", "Bearer OGFiZmU2ZTktMzYzMS00NjIwLWJhNGYtYWU2OGQyNTZhMmNi")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

POST http://127.0.0.1:8080/jsf/rfws/jrPrint/fetchPdf?menuCode=[Menu code]&recId=[Record Id]

# 参数

名字 类型 说明
authorization string(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id string(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
menuCode string(Query) 必填. 菜单编号,如 “员工”,可在数据字典中找到
recId long(Query) 必填. 实体的id
printOptionId long(Query) 打印选项id

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回一个文件。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 一个文件
fail Header(error_info) 一个CheckMsg JSON 数组

# 上传图片 Web服务

OkHttpClient client = new OkHttpClient();
File file = new File("C:\\Sample.jpg");
MediaType mt = MediaType.parse("application/jpg");
RequestBody rb = RequestBody.create(mt, file);

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/image/uploadImage?imgName=Sample.jpg")
  .post(rb)
  .addHeader("authorization", "Bearer OGFiZmU2ZTktMzYzMS00NjIwLWJhNGYtYWU2OGQyNTZhMmNi")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

POST http://127.0.0.1:8080/jsf/rfws/image/uploadImage?imgName=[Image Name]

# 参数

名字 类型 说明
authorization string(Header) 必填. 通过 OAuth2 获取的访问令牌
client_id string(Header) 必填. 在[授权应用列表]中注册时,由 aiM18 生成
imgName string(Query) 图片名字

# 结果

如果 API 运行成功,响应状态码将是 200,然后会返回 imgCode。 如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body imgCode
fail Header(error_info) 一个CheckMsg JSON 数组

# 保存草稿 Web 服务

保存草稿.

OkHttpClient client = new OkHttpClient();

MediaType jsonMT = MediaType.parse("application/json; charset=utf-8");
RequestBody rb = RequestBody.create(jsonMT, 
                 "[Simplified Entity JSON]" or "array of [Simplified Entity JSON]");

Request request = new Request.Builder()
  .url("http://127.0.0.1:8080/jsf/rfws/draft/s/save/employee?menuCode=employee")
  .put(rb)
  .addHeader("authorization", "Bearer MjZhZGNjMDctODVhZS00MmE0LWI3ZmEtNzRhMTQwZGZiNTY0")
  .addHeader("client_id", "C-SGF2aWQncyBhcHBsaWNhdGlvbjIwMTctMDItMTAxNjc=")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

# HTTP 请求

PUT http://[server]/jsf/rfws/draft/s/save/[module]?menuCode=[menuCode]&beId=[beId]&templateCode=[templateCode]&entity=[entity]

# 参数

名字 类型 说明
authorization String(Header) 必填. 通过 OAuth 获取的访问令牌
client_id String(Header) 必填. 在aiM18 [授权应用列表]中的Client ID
module string(Path) 必填. 模块类型,例如‘员工’,可以在数据字典中找到
menuCode string(Query) 必填. 菜单编号,例如‘员工’,可以在数据字典中找到
beId int(Query) 如果模块是特定BE的,则需要提供 beID。BE 在 aiM18 中指企业法人,即勾选 BE 复选框的[部门]记录。
templateCode string(Query) 模板编号可在模块的模板对话框中找到。
entity jsonString(Query) 简化的实体 JSON,结构请参考下文。请注意,JSON需要使用URL 编码。
entity_in_entity jsonString(Body) 简化的实体 JSON,结构请参考下文。建议在请求体中传实体 JSON。如果要处理多个实体,请传一个简化的实体 JSON 数组。
footerMergeMode string(Query) 适用于使用了模板,且Entity数据中某个Footer不为空。默认值为"override",如果值为"override"时,以Entity数据为准,直接覆盖。值为"append"时,保留模板数据。
footerUseTemplateIfMissing boolean(Query) 适用于使用了模板,但传入的Entity没有某个Footer,或有该Footer但数据为空。默认值为"true",如果为true,使用模板数据。为false时,忽略模板数据。

# 简化的实体JSON

{
    "employeepic": {
        "values": []
    },
    "employee_attach": {
        "values": []
    },
    "employee": {
        "values": [
          {"code": "000171","desc": "abcd"}
        ]
    }
}
  • JSON 包含模块中不同表的对象,每个表都包含一个 “values ”JSON 数组,用于指定表中每个字段的值。
  • 模块的主表是必要的。关于哪个表是主表,用户可以参考数据字典。
  • 如果未提供表格或字段值,则不会保存。

# 结果

如果 API 运行成功,响应状态码将是 200,则会返回已保存草稿的编号。如果 API 运行失败,响应状态码将是 400,然后将返回 CheckMsg。你可以在响应头中,从关键字为 “error_info ”中获取一个 CheckMsg JSON 数组。

类型 位置 说明
success Body 所保存的草稿的编号
fail Header(error_id=1) 采用JSON数组格式描述的多种错误
fail Header(error_info) 一个CheckMsg JSON 数组
Last Updated: 2025/04/09, 02:58:38
通用JSON对象
商业智能

← 通用JSON对象 商业智能→

Theme by Vdoing | Copyright © 1990-2025 Multiable | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式