
在经典 SAP Gateway 项目里维护一个 OData V2 服务时,经常会碰到一种很具体的业务需求。前端调用的并不是标准的实体查询,也不是普通的新增、修改或者删除,而是一段具有明确业务语义的操作。它接收几个参数,后台执行一段业务逻辑,最终返回一组结构化结果。SAP 官方文档里就有一个很典型的例子,Function Import 名为GetFlightDetails,它根据航班相关参数返回一个FlightDetails结构。这里返回的数据并不天然对应数据库里某张业务表,也未必应该成为一个可以独立寻址、拥有主键并出现在 Entity Set 中的 OData Entity。对于这样的返回结果,Complex Type往往比Entity Type更自然。这正是/IWBEP/IF_MGW_ODATA_ACTION~SET_RETURN_COMPLEX_TYPE出现的地方。SAP 对这个方法给出的定义非常简洁,它用于为 Function Import 设置返回的 Complex Type。传入参数IV_COMPLEX_TYPE_NAME指向当前 OData Model 中已经声明的 Complex Type。SAP 同时明确指出,在这套经典 SAP Gateway 实现里,Function Import 返回 Complex Type 时只允许返回单个 Complex Type,不能返回 Complex Type Collection,因此 multiplicity 应采用单实体语义。这几句话看起来并不复杂,但如果把它放进整个