2016-09-30 73 views
0

我想爲包含名稱或地址的子串的特定條目在我的UI中輸入時搜索OData-Service。 sap.ui.model.odata.v2.ODataModel對象有一個方法「read()」,它只是爲了做到這一點,但我沒有得到任何文檔。 我想爲我的OData-Service的集合「PatientSet」搜索特定的名稱子字符串。此外,我想用相同的搜索查詢搜索同一服務中的某些地址。 「AddressSet」是一個通過導航屬性「Addresses」鏈接到「PatientSet」的集合。現在我的搜索查詢是這樣構造的:在sap.ui.model.odata.v2.ODataModel中搜索

this.oModel.read(
       "/PatientSet?$expand=Addresses(/Name/Family='" + familyName + "',/Name/First='" + firstName + "')",     
       { 
        success: function(data, result) {console.log(result)}, 
        error: function(err) {alert(err)} 
       } 
      ); 

查詢中尚未包含對地址的搜索。該文檔說read() - Method將「觸發一個GET請求到模型構造函數中指定的odata服務,數據將存儲在模型中,請求的數據與響應一起返回。」 然而,我得到該請求的響應說完全不同的東西:

Request 
URL:http://XXXXXXXX/proxy/http/XXXXXXXXX/sap/opu/odata/XXXXXXXXX/$batch 
Request Method:POST 
Status Code:202 Accepted 
Remote Address:[::1]:54273 


Response 
--9D0C08B072143EFCC9C3A1A7A24358190 
Content-Type: application/http 
Content-Length: 1796287 
content-transfer-encoding: binary 

HTTP/1.1 200 OK 
Content-Type: application/atom+xml;type=feed 
Content-Length: 1796172 
dataserviceversion: 2.0 

以下是包含「PatientSet」集合的第一個千項的XML響應。 那麼爲什麼「read()」 - 方法觸發一個包含POST請求的批處理請求?爲什麼沒有過濾?

回答

0

我認爲你應該更熟悉v2.ODataModel。是否有一個原因,你爲什麼手動調用read()而不是讓ODataModel在幕後做所有這些事情?

無論如何,通常你會使用過濾器。看看this code of Navigation & Routing tutorial。如果您需要某種「全文搜索」,則需要在OData 2.0中發送一個自定義參數(如果使用SAP GW,則爲「搜索」)。在OData 4.0中,甚至有一個標準的「$ search」可用,但官方的UI5和SAP GW仍然不支持OData 4.0的生產...對於另一個問題:在v2.ODataModel中默認啓用批處理。

+0

這是我想要實現的: http://stackoverflow.com/questions/39791655/odata-v2-filtering-in-expanded-collection – doktormatte