How to find the CDS view used by an OData service in SAP Gateway?
Today I was asked how to retrieve the name or the names of CDS views being used by OData Services that have been published either using autoexposure leveraging the annoation OData.publish:true or using the Referenced Data Source approach.
Autoexposure:
If the service has been published using OData.publish: true the answer is quite simple because the technical Service name is derived by the SADL Framework from the name of the underlying CDS view by adding the Suffix _CDS.
An OData service with the name: ZS4H_C_SLSORDER_TP_CDS is thus based on the CDS view ZS4H_C_SLSORDER_TP.
Referenced Data Source:
In this case the service name is derived from the SEGW project name and typically ends with _SRV.
Though the project name in SEGW and hence the service name can be chosen freely, the names of the entity sets are equivalent to the names of the underlying CDS views.
(This is also true for OData services being created using Autoexposure => OData.publish: true)
A service called ZDX271_20_SRV having entity sets called
- SEPM_I_BusinessPartner_E
- Sepm_I_SalesOrdOverallStatus
- Zdx271_C_Slsorder_20
- Zdx271_C_Slsorderitem_20
would be based on CDS views having those four aforementioned names.
To get the names of the Entity sets there are two options:
- You can search for the service name using the catalogue Service
Run the following URL in the SAP Gateway Client:
/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/ServiceCollection?search='ZDX271_20_SRV'
Here you will find one entry
<id>http://<host>:<port>/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/ServiceCollection('ZDX271_20_SRV_0001')</id>
having an entity set called “EntitySets”
/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/ServiceCollection('ZDX271_20_SRV_0001')/EntitySets
that would list the entity sets and thus the names of the CDS views of your OData service.
- Or if you know the Service URL you can simply retrieve the service document
by using the following URL:
/sap/opu/odata/sap/ZDX271_20_SRV/?$Format=XML
that contains the names of the Entity sets
<app:workspace>
<atom:title type="text">Data</atom:title>
<app:collection href="SEPM_I_BusinessPartner_E" sap:content-version="1" sap:deletable="false" sap:updatable="false" sap:creatable="false">
<atom:title type="text">SEPM_I_BusinessPartner_E</atom:title>
<sap:member-title>EPM Demo: BuPa with External IDs</sap:member-title>
</app:collection>
<app:collection href="Sepm_I_SalesOrdOverallStatus" sap:content-version="1" sap:deletable="false" sap:updatable="false" sap:creatable="false">
<atom:title type="text">Sepm_I_SalesOrdOverallStatus</atom:title>
<sap:member-title>EPM Demo: Sales Order Overall Status</sap:member-title>
</app:collection>
<app:collection href="Zdx271_C_Slsorder_20" sap:content-version="1" sap:deletable="false" sap:updatable="false" sap:creatable="false">
<atom:title type="text">Zdx271_C_Slsorder_20</atom:title>
<sap:member-title>Sales Order Header Consumption View #20</sap:member-title>
</app:collection>
<app:collection href="Zdx271_C_Slsorderitem_20" sap:content-version="1" sap:deletable="false" sap:updatable="false" sap:creatable="false">
<atom:title type="text">Zdx271_C_Slsorderitem_20</atom:title>
<sap:member-title>Sales Order Item Consumption View #20</sap:member-title>
</app:collection>
</app:workspace>
Please note:
It will become tricky to find the names of the CDS views if someone has renamed the entity sets in the MPC_EXT class as I have described in another thread.
Hope this helps,
Andre
Hi Andre,
Thank you very much for sharing. This is very helpful.
Your tips work for me, except that it seems that I have to remove the 'Type' suffix from the end of the Entity Type name in transactoin SEGW.
E.g. SEGW project CPD_MASTERPROJECT_OVERVIEW:
Entity Type = C_MDBusPartChangeProcessType --> CDS view = C_MDBusPartChangeProcess
Kind regards.