Skip to Content

Working on first gateway project and being asked to expand the parent child entities linked with Navigation Property with a single expansion or RFC call requires quite a bit of self learning. However, when explored the internet, I could not find blogs/links which explained in detail how to use Expansion Method of the Gateway to expand both Parent and Child Entity in a single RFC call, rather than making call first to parent entity and then to the child using $EXPAND parameter in the Odata Service Link.

This scenario is more appropriate for Gateway Hub scenario where in GW(GW_CORE, I_BEP and IW_FND) and ECC are separate systems. An RFC call is made from GW to ECC each time data is requested from UI. Therefore, if the user needs to fetch the Parent Child data using $EXPAND, the gateway framework will first call the entity set for the Parent(SOHeaderSet) and then the entity set for Children(SOItemSet). This results in 2 RFC call to fetch the required data.

In this blog, we will learn how we can reduce 2 RFC calls to a single RFC call and expand both the Parent and Child Entities in a single Odata Service Call.

In order to implement this, we will re define ‘GET_EXPANDED_ENTITYSET’ Method of the Data Provider Class.

In this example, we will use 2 entities Sales Order Header(SOHeader) and Sales Order Item(SOItem). Both are linked to each other with a navigation property SOHeaderToItem.

Entities.PNG

SOHeader.PNG

SOItem.PNG

Association.PNG

Navigation.PNG

Redefine GET_EXPANDED_ENTITYSET as explained in the attached snapshot.

GET_EXPANDED_ENTITYSET.PNG

The catch here is that, we have to tell the GW framework that we have expanded both the Header and Item entities in a single entity set call and no need to call the child entity set to fetch the the Sales Order Items. We can do this using parameter ET_EXPANDED_TECH_CLAUSES of GET_EXPANDED_ENTITYSET. Append the Navigation Property Name(SOHEADERTOITEM) in this exporting parameter, which will tell the gate way framework that the child entity has already been expanded and there is no need to call the child entity set.

An important point to not here is that the structure of the output entity set should have a field with Name same as Navigation Property Name(SOHEADERTOITEM). This field has to be a Table Type to support Header and Item relationship structure. Check structure below.

Structure.PNG

When you will call the Odata Service from the Client with $EXPAND, only the Header Entity Set will be called and no call is made to the Item Entity Set.

https://<Host Server:Port>/sap/opu/odata/sap/ZEXPAND_PARENT_CHILD_SRV/SOHeaderSet?$expand=SOHeaderToItem

In normal expansion scenario with $EXPAND, the gateway framework would first call SOHeaderSet and then the corresponding SOItemSet.

Thanks!!!!

To report this post you need to login first.

13 Comments

You must be Logged on to comment or reply to a post.

  1. chitti babu

    Hi Gill,

        Thanks for sharing a wonderful example.I tried this example i am getting only the item data,header fields showing empty data like this

    “Vbeln”: “”,

                    “Auart”: “”,

                    “Vkorg”: “”,

                    “Vtweg”: “”,

                    “SOHeaderToItem”: {

                        “results”: [

    can u help me Please to complete this scenario.

    Thanks&Regards

    chitti babu

    (0) 
    1. Kanwardeep Singh Gill Post author

      HI Chitti,

      Kindly put  a break point in the GET_EXPANDED_ENTITYSET method of the DPC extension class and debug through Gateway Client /IWFND/GW_CLIENT to ensure that you are populating the header data properly.

      I don’t see any reason why header data should not be populated in the output, if the item data is getting populated.

      If the data is populated properly, kindly share the code which you have written to support expanded entity set and I’ll look into it.

      Thanks!!!!

      (0) 
      1. Kanwardeep Singh Gill Post author

        Hi Chitti,

        If you have declared output structure ZSO_S_HEADERTOITEM as explained in this blog, there should not be any problem in populating and retrieving the data from the Odata Call.

        I would request you just not to copy the coding, but to follow the concept here.

        Thanks!!!

        (0) 
    2. Arshad Ansary

      Hi Chitti,

      I also had the same issue but the problem lies with the way you delcare you output structure

      Make sure that the header structure is .INCLUDE  and not a separate structure name  like below.

      DATABEGIN OF t_orderitems.

        INCLUDE    TYPE  zcl_ztest_fw_expand_mpc_ext=>ts_salesorderitem.

        DATA: itemtoproduct TYPE  zcl_ztest_fw_expand_mpc_ext=>ts_product,

              END OF t_orderitems.

      Regards

      Arshad

      (0) 
  2. Anju Jha

    Thanks Gill. This is nice blog. I have implemented gateway service for purchase order data in a similar way . While displaying output header data come after line item data.

    Is there any way to display header information before Line items?

    <title type=”text>PoHeaderSet(‘4590092041’)</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <category term=”Y_VRS_PO_SRV.PoHeader scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />

    <link href=”PoHeaderSet(‘4590092041’) rel=”self title=”PoHeader />

    <link href=”PoHeaderSet(‘4590092041’)/PoLineitmSet rel=”http://schemas.microsoft.com/ado/2007/08/dataservices/related/PoLineitmSet type=”application/atom+xml;type=feed title=”PoLineitmSet>

    <m:inline>

    <feed xmlns=”http://www.w3.org/2005/Atom xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices xml:base=”http://fssde1.target.com:8000/sap/opu/odata/sap/Y_VRS_PO_SRV/>

    <title type=”text>PoLineitmSet</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <author>

    <name />

    </author>

    <link href=”PoHeaderSet(‘4590092041’)/PoLineitmSet rel=”self title=”PoLineitmSet />

    <entry>

    <title type=”text>PoLineitmSet(‘4590092041’)</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <category term=”Y_VRS_PO_SRV.PoLineitm scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />

    <link href=”PoLineitmSet(‘4590092041’) rel=”self title=”PoLineitm />

    <content type=”application/xml>

    <m:properties xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices>

    <d:LEbeln>4590092041</d:LEbeln>

    <d:LEbelp>00010</d:LEbelp>

    <d:LLoekz />

    <d:LAedat>2015-02-23T00:00:00</d:LAedat>

    <d:LTxz01>Supplies</d:LTxz01>

    <d:LBukrs>1001</d:LBukrs>

    <d:LWerks>0003</d:LWerks>

    <d:LMatkl>312117ZZ</d:LMatkl>

    <d:LIdnlf />

    <d:LMenge>6.000</d:LMenge>

    <d:LEindt>2015-02-28T00:00:00</d:LEindt>

    <d:LMeins>EA</d:LMeins>

    <d:LBprme>EA</d:LBprme>

    <d:LNetpr>15.00</d:LNetpr>

    <d:LNetwr>90.00</d:LNetwr>

    <d:LBrtwr>90.00</d:LBrtwr>

    <d:LMwskz>S1</d:LMwskz>

    <d:LErekz />

    <d:LAdrn2>457882</d:LAdrn2>

    <d:LSakto>7050270</d:LSakto>

    <d:LKostl>26100003</d:LKostl>

    <d:LPrctr>3</d:LPrctr>

    <d:LPspnr>00000000</d:LPspnr>

    <d:LPosid />

    <d:LStreet>5537 W BROADWAY AVE</d:LStreet>

    <d:LCity>CRYSTAL</d:LCity>

    <d:LCountry>US</d:LCountry>

    <d:LRegion>MN</d:LRegion>

    </m:properties>

    </content>

    </entry>

    <entry>

    <title type=”text>PoLineitmSet(‘4590092041’)</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <category term=”Y_VRS_PO_SRV.PoLineitm scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />

    <link href=”PoLineitmSet(‘4590092041’) rel=”self title=”PoLineitm />

    <content type=”application/xml>

    <m:properties xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices>

    <d:LEbeln>4590092041</d:LEbeln>

    <d:LEbelp>00020</d:LEbelp>

    <d:LLoekz />

    <d:LAedat>2015-02-23T00:00:00</d:LAedat>

    <d:LTxz01>Supplies</d:LTxz01>

    <d:LBukrs>1001</d:LBukrs>

    <d:LWerks>0004</d:LWerks>

    <d:LMatkl>312117ZZ</d:LMatkl>

    <d:LIdnlf />

    <d:LMenge>3.000</d:LMenge>

    <d:LEindt>2015-02-28T00:00:00</d:LEindt>

    <d:LMeins>EA</d:LMeins>

    <d:LBprme>EA</d:LBprme>

    <d:LNetpr>15.00</d:LNetpr>

    <d:LNetwr>45.00</d:LNetwr>

    <d:LBrtwr>45.00</d:LBrtwr>

    <d:LMwskz>S1</d:LMwskz>

    <d:LErekz />

    <d:LAdrn2>457883</d:LAdrn2>

    <d:LSakto>7050270</d:LSakto>

    <d:LKostl>26100004</d:LKostl>

    <d:LPrctr>4</d:LPrctr>

    <d:LPspnr>00000000</d:LPspnr>

    <d:LPosid />

    <d:LStreet>ler Trunk Hwy</d:LStreet>

    <d:LCity>Duluth</d:LCity>

    <d:LCountry>US</d:LCountry>

    <d:LRegion>MN</d:LRegion>

    </m:properties>

    </content>

    </entry>

    <entry>

    <title type=”text>PoLineitmSet(‘4590092041’)</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <category term=”Y_VRS_PO_SRV.PoLineitm scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />

    <link href=”PoLineitmSet(‘4590092041’) rel=”self title=”PoLineitm />

    <content type=”application/xml>

    <m:properties xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices>

    <d:LEbeln>4590092041</d:LEbeln>

    <d:LEbelp>00030</d:LEbelp>

    <d:LLoekz />

    <d:LAedat>2015-02-23T00:00:00</d:LAedat>

    <d:LTxz01>Supplies</d:LTxz01>

    <d:LBukrs>1001</d:LBukrs>

    <d:LWerks>0005</d:LWerks>

    <d:LMatkl>312117ZZ</d:LMatkl>

    <d:LIdnlf />

    <d:LMenge>4.000</d:LMenge>

    <d:LEindt>2015-02-28T00:00:00</d:LEindt>

    <d:LMeins>EA</d:LMeins>

    <d:LBprme>EA</d:LBprme>

    <d:LNetpr>15.00</d:LNetpr>

    <d:LNetwr>60.00</d:LNetwr>

    <d:LBrtwr>60.00</d:LBrtwr>

    <d:LMwskz>S1</d:LMwskz>

    <d:LErekz />

    <d:LAdrn2>457884</d:LAdrn2>

    <d:LSakto>7050270</d:LSakto>

    <d:LKostl>26100005</d:LKostl>

    <d:LPrctr>5</d:LPrctr>

    <d:LPspnr>00000000</d:LPspnr>

    <d:LPosid />

    <d:LStreet>2555 W 79th St</d:LStreet>

    <d:LCity>BLOOMINGTON</d:LCity>

    <d:LCountry>US</d:LCountry>

    <d:LRegion>MN</d:LRegion>

    </m:properties>

    </content>

    </entry>

    <entry>

    <title type=”text>PoLineitmSet(‘4590092041’)</title>

    <updated>2015-02-24T11:01:48Z</updated>

    <category term=”Y_VRS_PO_SRV.PoLineitm scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />

    <link href=”PoLineitmSet(‘4590092041’) rel=”self title=”PoLineitm />

    <content type=”application/xml>

    <m:properties xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices>

    <d:LEbeln>4590092041</d:LEbeln>

    <d:LEbelp>00040</d:LEbelp>

    <d:LLoekz />

    <d:LAedat>2015-02-23T00:00:00</d:LAedat>

    <d:LTxz01>Supplies</d:LTxz01>

    <d:LBukrs>1001</d:LBukrs>

    <d:LWerks>0012</d:LWerks>

    <d:LMatkl>312117ZZ</d:LMatkl>

    <d:LIdnlf />

    <d:LMenge>2.000</d:LMenge>

    <d:LEindt>2015-02-28T00:00:00</d:LEindt>

    <d:LMeins>EA</d:LMeins>

    <d:LBprme>EA</d:LBprme>

    <d:LNetpr>15.00</d:LNetpr>

    <d:LNetwr>30.00</d:LNetwr>

    <d:LBrtwr>30.00</d:LBrtwr>

    <d:LMwskz>S1</d:LMwskz>

    <d:LErekz />

    <d:LAdrn2>457885</d:LAdrn2>

    <d:LSakto>7050270</d:LSakto>

    <d:LKostl>26100012</d:LKostl>

    <d:LPrctr>12</d:LPrctr>

    <d:LPspnr>00000000</d:LPspnr>

    <d:LPosid />

    <d:LStreet>12275 Saint Charles Rock Rd</d:LStreet>

    <d:LCity>Bridgeton</d:LCity>

    <d:LCountry>US</d:LCountry>

    <d:LRegion>MO</d:LRegion>

    </m:properties>

    </content>

    </entry>

    </feed>

    </m:inline>

    </link>

    <content type=”application/xml>

    <m:properties xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices>

    <d:HEbeln>4590092041</d:HEbeln>

    <d:HBukrs>1001</d:HBukrs>

    <d:HBsart>ZB</d:HBsart>

    <d:HAedat>2014-12-18T00:00:00</d:HAedat>

    <d:HErnam>CSVA01</d:HErnam>

    <d:HLifnr>6255</d:HLifnr>

    <d:HEkorg>1001</d:HEkorg>

    <d:HEkgrp>100</d:HEkgrp>

    <d:HWaers>USD</d:HWaers>

    <d:HBedat>2014-12-18T00:00:00</d:HBedat>

    <d:HKonnr />

    <d:HFrgrl />

    <d:HName1>SAM MORRAY DESIGN LIMITED</d:HName1>

    <d:Timestamp />

    <d:Doctypestr />

    <d:Maxpos />

    <d:Vendorstr />

    <d:HChngtimestamp>20150223151511</d:HChngtimestamp>

    <d:HJobtimestamp>20150224050148</d:HJobtimestamp>

    <d:Sitestr />

    </m:properties>

    </content>

    </entry>

    <entry>

    Thanks,
    Anju
    (0) 

Leave a Reply