2016-09-29 69 views
0

我想在我的OData V2服務中創建一個新條目。該集合稱爲「PatientSet」,條目類型爲「Patient」。我也想包含一個地址和我的新條目,這是一個關聯的實體類型。所以還有一個集合「AddressSet」。這兩個集合通過關聯連接。該協會是這樣的:深入插入與sap.ui.model.odata.v2.ODataModel

<Association Name="PatientAddress" sap:content-version="1"> <End Type="PatientService.Patient" Multiplicity="1" Role="FromRole_PatientAddress" /> <End Type="PatientService.Address" Multiplicity="*" Role="ToRole_PatientAddress" /> </Association>

現在我們已經想出瞭如何創建患者收集與相關的地址與包含XML有效載荷,看起來像這樣一個POST請求的新條目:

<?xml version="1.0" encoding="utf-8"?> 
<entry xml:base="http://XXXXXX/sap/opu/odata/XXX/XXX/" 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">     <id>http://XXXXXX/sap/opu/odata/XXX/XXX/PatientSet</id> 
<title type="text">PatientSet</title> 
<category term="PatientService.Patient" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> 
<link href="PatientSet" rel="edit" title="Patient"/> 
<link href="PatientSet/Addresses" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Addresses" type="application/atom+xml;type=feed" title="Addresses"> 
<m:inline> 
<feed xml:base="http://XXXXXX/sap/opu/odata/XXX/XXX/"> 
<id>http://XXXXXX/sap/opu/odata/XXX/XXX/PatientSet/Addresses</id> 
<title type="text">AddressSet</title> 
<author> 
<name/> 
</author> 
<link href="PatientSet/Addresses" rel="self" title="AddressSet"/> 
<entry> 
<id>http://XXXXXX/sap/opu/odata/XXX/XXX/AddressSet</id> 
<title type="text">AddressSet</title> 
<category term="PatientService.Address" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> 
<link href="AddressSet" rel="edit" title="Address"/> 
<content type="application/xml"> 
    <m:properties> 
    <d:Street>Am Kamp 13</d:Street> 
    <d:City>Sickte</d:City> 
    <d:PoBox/> 
    <d:ZIPCode>38173</d:ZIPCode> 
    <d:CountryISO>DE</d:CountryISO> 
    <d:AddressType>Home</d:AddressType> 
    </m:properties> 
</content> 
</entry> 
</feed> 
</m:inline> 
</link> 
<content type="application/xml"> 
<m:properties> 
    <d:Name m:type="PatientService.PersonName"> 
    <d:Family>Schmitz</d:Family> 
    <d:First>Roswitha</d:First> 
    <d:Prefix/> 
    <d:Title>Frau</d:Title> 
    <d:Affix/> 
    </d:Name> 
    <d:Gender/> 
    <d:BirthDate>19330523</d:BirthDate> 
    <d:isActive>true</d:isActive> 
    <d:NationalityISO/> 
    <d:BirthCountryISO/> 
    <d:BirthPlace/> 
    <d:BirthName/> 
    <d:MPI_ID>mpi 1234</d:MPI_ID> 
</m:properties> 
</content> 
</entry> 

我POST請求的數據對象看起來像這樣的時刻:

var oData = { 
      "Name": { 
         "Family": familyName, 
         "First": firstName,       
         },          
      "NationalityISO": nationality, 
      "BirthCountryISO": birthCountry, 
      "BirthPlace": birthPlace 
      }     
this.oModel.create("/PatientSet", oData, {success: function(result){alert(result)}, error: function(err){alert(err)}}) 

如何將我的模型的官方發展援助ta-object的方式,使我能夠同時發佈到PatientSet和AddressSet,同時考慮到兩個條目之間的關聯,換句話說,我該如何構建oData對象,使其能夠精確地生成XML -payload服務需要進行深入插入?

回答

0

您將擁有關聯的導航屬性,例如toAddress(我不知道您的實際導航屬性)。 如果你再念你可以通過這個導航屬性導航到一個特定的實體:

/PatientSet(「您的鑰匙」)/的toAddress

創建深插入的工作方式相同:

var oData = { 
     "Name": { 
        "Family": familyName, 
        "First": firstName,       
        },          
     "NationalityISO": nationality, 
     "BirthCountryISO": birthCountry, 
     "BirthPlace": birthPlace 
     }; 
oData.toAddress = []; 
oData.toAddress.push(oYourAddressObject); 
// Perform the actual oData Call 
this.getModel.create("/PatientSet", oData, {success: function(result){alert(result)}, error: function(err){alert(err)}}); 

這應該與oDataModel V2一起工作,但不要忘記也要實現這個網關端。

+0

導航屬性如下所示: 「/ PatientSet('3373964')/地址」將帶我到鏈接的地址條目。令我困惑的是,我必須在查詢中包含實際的密鑰。在提交請求時我不知道密鑰,密鑰是在創建PatientSet中的條目時生成的。或者,oModel對象通過例如來處理這個問題。批量請求? – doktormatte

+0

您不需要在這裏輸入密鑰,因爲您要用新地址創建一個新病人。 如果您在對象通過創建功能傳給你會發現的通話將被定向到網關的DPC_EXT類的方法如下: /IWBEP/IF_MGW_APPL_SRV_RUNTIME〜CREATE_DEEP_ENTITY 在這裏,你將需要實施/打電話給你深入插入邏輯。 – rpanneel