最近做 SAP RAP 业务对象时,一个很容易被低估的问题又冒了出来,页面上某些字段不希望业务人员维护,API 调用方也不应该提交,draft 保存时更不能被顺手改掉。表面看,这只是把字段藏起来,放到 SAP Fiori Elements 里似乎加一个@UI.hidden就能解决。可是真正跑到 RAP 的事务层,事情没有这么轻。
在一个客服请求的场景里,业务人员需要维护Priority、DeadlineDate、CancelReason这些业务字段。客服代表可以调整优先级,可以给请求设置截止日期,也可以在取消时填写取消原因。然而CreatedAt和CreatedBy这种审计字段不能碰。它们记录的是请求创建时间和创建人,不属于业务人员的输入职责,也不应该被外部 payload、批量更新、draft 保存、EML 调用绕过。这里的关键不是页面上看不看得见,而是 RAP 行为模型是否还把这些字段当成可参与事务操作的成员。
SAP 官方文档对field(suppress)的定义很直接,它会把字段从 BDEF 派生类型以及 RAP API 中移除,并且不能用于 key 字段。这个描述非常短,但背后影响很大。因为 BDEF 派生类型正是 EML 创建、更新、删除等操作背后的类型基础。一旦字段从这一层消失,消费方就不是简单地看不到输入框,而是连事务 API 的入口都没有了。(