SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

时间:2024-03-18 19:48:04

In part1 of this tutorial, the old way to create OData service on top of CDS view is introduced.
In SAP Help Generate Service Artifacts From a CDS View a new annotation is described:

@OData.publish: true

Just add this annotation to your CDS view and the odata service is automatically created, no need for you to go to code SEGW any more.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Once activated, the odata service with naming convention “_CDS” is available for registration in tcode /IWFND/MAINT_SERVICE:

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Metadata retrieval test ok:

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

So the question here is: How does this annotation work? How can we research the service generation process through debugging?

Here below is how I figure it out.
First check what objects have been generated: three additional artifacts are highlighted below.

(1) IWMO: SAP Gateway Business Suite Enablement – Model
(2) IWSV: SAP Gateway Business Suite Enablement – Service
(3) CLAS: provider class ZCL_ZJERRYTEST20160311 is generated

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

If I remove the annotation, or change the annotation to @OData.publish: false, and the two are gone:

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

So it means the annotation @OData.publish: true will trigger table entry insertion for type IWMO, IWSV and CLAS during view activation. Then again I switch on ST05 trace and easily find the ABAP code where the table insertion is done.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Set breakpoint on the code and observe the callstack in the runtime.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

The highlighted callstack frames are essential for odata service generation.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Let’s have a deep look at stack frame 21:
CL_WB_DDLS_SECOBJ_HNDLR_SINGLE->IF_DDIC_WB_DDLS_SECOBJ_HANDLER~ON_ACTIVATION
It will first identify which objects must be created based on delta state.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

For example, if I add @OData.publish: true to an existing CDS view and activate it, the corresponding entry will have flag N ( New ) while other existing annotation has type “U” ( Unchanged ).

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Inside this method, if annotation ODATA.PUBLISH is found,

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

and the annotation value is true, then it is considered that the odata service must be created.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙
SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙
SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

The odata service creation is implemented in CL_SADL_GTK_ODATA_SERVICE_GEN~CREATE_VIA_EXPOSURE below.

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

Complete callstack:

SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
SAP CDS view自学教程之四:SAP CDS view注解@OData.publish的奥妙