2017-03-09 2 views
0

현재 SAPUI5/OpenUI5를 사용하여 OData Services를 사용하고 수정하고 있습니다.SAPUI5 OData - 기존 엔티티와 연결하여 새 엔트리를 만드는 방법은 무엇입니까?

HTTP POST 요청을 통해 새 제품 항목을 만들고 범주에 대한 연결을 올바르게 구성하는 데 문제가 있습니다. 개발을 위해이 metadata과 함께 OData Service이라는 참조 번호를 사용하고 있습니다. 제품에는 이미 오른쪽 카테고리 엔트리 세트에 NavigationProperty가 있습니다.

var oCategory = oModel.getData("/Categories(0)"); 
var oEntry = {}; 
oEntry.ID = "10"; 
oEntry.Name = "Beer"; 
oEntry.Category = oCategory; 

oModel.create("/Products", oEntry, { 
    method: "POST", 
    success: function(data) {...}, 
    error: function(response) {...} 
}); 

제품이 성공적으로 /Products(10) 만들어 지지만 기존의 카테고리 /Products(10)/Category에 관계가 제대로 작동하지 않습니다 :

<NavigationProperty Name="Category" Relationship="ODataDemo.Product_Category_Category_Products" FromRole="Product_Category" ToRole="Category_Products"/> 

내 컨트롤러에 다음과 같은 자바 스크립트 코드를 사용하고 있습니다. 대신 동일한 ID와 정보를 가진 새로운 카테고리가 생성됩니다 (이것은 '딥 인서트'를 의미합니까?)하지만 선출 된 카테고리를 사용하고 싶습니다.

카테고리를 다르게 참조해야합니까, 아니면 어떻게 든 수동으로 연관을 만들 수 있습니까? OData 서비스가 카테고리 ID가 이미 존재하는지 확인한 다음 기존 항목을 사용해야합니까?

이러한 사례에 대한 모범 사례가 있습니까?

답변

0

OData V2 서비스를 사용하고 있다는 점에 유의해야합니다. 네, 당신이하고있는 방식대로 요청을 작성하면, 실제로 깊은 삽입을하고있는 것입니다.

새로운 제품을 기존 카테고리에 연결하기 위해 전체 카테고리 정보를 전송할 필요가 없기 때문에 생각하면됩니다. 카테고리 데이터에서 무엇인가를 변경하면 어떨까요? 딥 인서트로 업데이트해야합니까?

어쨌든 OData v2에는 "링크"라는 것이 있습니다 (OData 용어 - www.odata.org 참조). 기본적으로 엔티티 간의 "연결"은 이러한 링크를 통해 나타납니다. 엔티티와 별도로 이러한 링크를 관리 할 수 ​​있습니다 (예 : 엔티티 자체를 변경하지 않고도 기존 엔티티 간의 연결을 제거하고 만들 수 있음 - OData v2 operations, 2.9 ~ 2.12 장 참조).

사용중인 데이터 형식 (기본적으로 sap.ui.model.odata.v2.ODataModel을 사용하는 경우 JSON)에 따라 새 항목을 만들 때 동시에 엔티티 링크를 만들 수 있습니다. 이 대답을 확인하십시오 : https://stackoverflow.com/a/4695387/7612556. 대단히 감사합니다,

oModel.create("/Products", { 
    ID: "10", 
    Name: "Beer", 
    Category: {__metadata: {uri: "/Categories(0)"}} 
}, { 
    method: "POST", 
    success: function(data) {...}, 
    error: function(response) {...} 
}); 
+0

대 : 간단히 말해서

, 당신의 라인을 따라 뭔가를 작성해야! –

관련 문제