从复杂属性回到复杂类型,深入理解 /IWBEP/IF_MGW_ODATA_CMPLX_PROP
在 SAP Gateway 项目里调试$metadata时,经常会遇到一种很有意思的模型关系。一个 Entity Type 里的属性并不是Edm.String、Edm.Decimal这样的简单类型,而是直接指向另一个结构化类型。业务伙伴的地址、员工的姓名、订单的金额组合、公司的通信信息,都很适合用这种方式组织。这类属性在 OData 术语里叫作 Complex Property,它引用的模型对象则叫 Complex Type。/IWBEP/IF_MGW_ODATA_CMPLX_PROP正是 SAP Gateway Foundation 在 ABAP 模型层里为 Complex Property 提供的接口。SAP 官方对它的定义非常短,这个接口表示一个基于 Complex Type 的 OData Complex Property 对象。它公开的核心方法只有GET_COMPLEX_TYPE,用于取得这个属性背后引用的 Complex Type,对应的返回参数为RO_COMPLEX_TYPE。文档只有几行,但把它放到整个 SAP Gateway 元数据对象模型中,就会发现这个接口承担的是一个很明确的职责,它把「属性」和「类型」连接了起来。一个只有一个核心方法的接口,为什么仍然很重要理解/IWBEP/IF_MGW_ODATA_CMPLX_PROP之前,需要先把 OData 的 Property 和 Complex Type 分开来看。普