
在 SAP Gateway 项目里,我们经常会写出一些并不完全属于某个具体 OData 服务的公共 ABAP 代码。它可能是一段日志组件,也可能是一套通用的权限检查逻辑,还可能是被多个应用共同调用的业务类。麻烦恰恰出现在这里,同一段 ABAP 代码既可能由传统 SAP GUI 事务触发,也可能由后台 Job 调用,还可能运行在 SAP Gateway 的 OData 请求处理链路里。代码执行到这一层之后,我们偶尔会需要回答一个很具体的问题,当前这一轮 ABAP 执行,到底是不是某个 OData 服务请求的一部分。如果答案是肯定的,还会继续产生另一个问题,目前正在处理的是哪个 OData 服务。SAP Gateway Foundation 为这类需求准备了一个非常小巧的入口类/IWBEP/CL_DIAGNOSTICS_FACADE。SAP 官方把这一能力称为Service Context Facade,也就是服务上下文门面。官方文档明确给出了两个非常有代表性的方法,IS_GATEWAY_SERVICE用来判断当前代码是否位于 OData 服务处理上下文中,GET_CURRENT_GATEWAY_SERVICE则用于获得当前正在处理的 OData 服务。这个 API 看上去只有两行代码,真正有价值的地方却不在语法,而在于它解决的是 ABAP 运行时上下文识别问题。Service Context Facade 解决的其实是运行来源识别传统 ABAP 开发人员对运行上下文并不陌生