修改模块数据
版本: 1.2 | 发布日期: 07/02/2024
# 引言
在任何现代交易系统中,修改数据总是不可避免的。
提供灵活的编辑环境对于增强用户体验至关重要。
# 目的
阅读本章后,你应该能够:
- 读取模块单据
- 更新模块单据
# 场景
Chris 的 ABC 水果公司网上商店经营得很好。
在客户需要更改订单时,他希望能够改善用户体验。
客户要求取消订单时必须致电 Chris,以便更正订单内容。
Chris 希望在网上商店中实现编辑功能。
Chris 设计了如下布局,用户可以通过点击不同的 订单编号
来查看销售订单的详细信息。
根据以往的经验,Chris 可以使用搜索服务列出已保存的订单列表
。
但如何显示订单的产品信息呢?
为了实现这一目标,我们需要调用 读取实体服务。
# 读取模块单据
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 。 |
该服务有三个必需参数,分别是module
,menuCode
和id
。
对于 id
参数,请参考通过编号获取 Id Web 服务或搜索数据。
在这种场景下,id
应包含在用于显示销售订单列表的搜索响应中。
获取 Id = 2 的销售订单信息的请求示例
GET
http://[server]/jsf/rfws/entity/read/oldso?menuCode=oldso&id=2
响应示例
"mainso":"{
"size":1,
"values":[
{
"id":2, "iRev":1, "code":"SO002", ...
}
]
},
"sot":"{
"size":4,
"values":[
{
"id":3, "hId":2, "itemNo":" 1, "proId": 3, "bDesc":"Peach", "qty":5.0, ...
"id":4, "hId":2, "itemNo":" 2, "proId": 1, "bDesc":"Apple", "qty":21.0, ...
"id":5, "hId":2, "itemNo":" 3, "proId": 4, "bDesc":"Orange", "qty":10.0, ...
"id":6, "hId":2, "itemNo":" 4, "proId": 1, "bDesc":"Apple", "qty":5.0, ...
}
]
}
读取现有订单并不是结束。当客户更改内容时,我们需要更新订单。
我们通过调用保存实体服务来实现这一点。
# 更新模块单据
保存实体服务
能够执行两项功能,首先创建模块单据,其次更新已经存在的模块单据。
关于模块单据的创建,前面我们已经有完整的例子,请参考创建模块数据。
那么系统如何判断该调用是添加还是修改模块单据呢?
答案是id
。
系统将检查请求是否包含 id
信息,以及 id
信息是否与数据库中的记录相对应。
# 最佳做法
每次要修改一个已经存在的模块单据时,都要先读取它,然后直接在 SqlEntity 中修改它,然后调用 保存实体服务 保存它。
# FAQ
1.是否有其他方法来确定该保存操作是创建新记录还是修改现有记录?
对于ERP相关的应用程序接口,答案是肯定的。
code
是 aiM18 记录中的另一个重要字段。将此字段指定为唯一的用户可确保code
不会重复。
存储具有相同code
的记录将被视为更新。