在 SAP Gateway 项目里,最令人头疼的接口问题往往并不是 OData 请求直接返回500 Internal Server Error,而是接口明明已经发现了业务问题,却不知道应该把什么信息返回给前端。
销售订单保存失败了,后台 BAPI 返回十几条消息。到底哪一条应该显示在 SAP Fiori 页面顶部,哪一条应该定位到具体输入字段,哪些消息只是给 ABAP 开发人员排查问题使用,哪些技术细节绝对不能暴露给最终用户。
这正是 SAP Gateway 所说的Error Response Control for Backend Data Provider要解决的问题。
在经典 SAP Gateway OData V2 开发模型里,真正执行业务逻辑的通常是 Data Provider Class,也就是 DPC,实际增强代码一般落在DPC_EXT。SAP 官方当前培训材料依然把 MPC 定义为服务模型和元数据的提供者,把 DPC 定义为业务实现的提供者,并明确说明自定义实现应该放进扩展类,而不是修改生成类,因为重新生成 SEGW 项目时,基础类可能被覆盖。
当请求进入 DPC 以后,我们并不是只能在发生错误时写一句RAISE EXCEPTION。SAP Gateway 提供了一整套错误表达机制,核心成员包括/IWBEP/CX_MGW_BUSI_EXCEPTION、/IWBEP/CX_MGW_TECH_EXCEPTION、/IWBEP/IF_MESSAGE_CONTAINER、Leading Message、异常