SAP UI5 OData V4 模型包括下列三種繫結例項:
- List Binding
- Context Binding
- Property Binding
無論哪種型別的資料繫結例項,其建立的資料服務請求,這些繫結例項都會設計一個快取,來儲存資料服務響應的資料。 如果可以從此快取中提供資料,這些繫結例項不會再次傳送資料服務請求。
應用開發人員可以使用 refresh
方法刪除絕對繫結的快取。 該方法還刪除了絕對繫結的子繫結的快取。
呼叫重新整理方法時,繫結及其子繫結不得有待處理的屬性更改,即所謂的 pending property changes
.
在刪除快取之前,使用繫結的 hasPendingChanges 方法檢查是否存在這種型別的更改。
一個例子:
onRefreshSelectedSalesOrder : function () {
// within a sap.m.Table bound to a OData V4 list binding get the OData V4 context for the selected entity
var oSalesOrderContext = this.byId("SalesOrders").getSelectedItem().getBindingContext();
if (!oSalesOrderContext.hasPendingChanges()) {
oSalesOrderContext.refresh();
}
},
更新一個 entity 後,它可能不再匹配載入實體的集合的 query 選項,特別是 $filter。 您可以決定重新整理列表繫結的上下文是否應忽略查詢選項:透過將引數 bAllowRemoval 設定為 true,可以從集合的列表繫結中刪除相應的上下文。
需要注意的是,對列表的更改(如不同的排序順序)需要重新整理整個列表。
下面是一個例子。這個應用裡的 Table
控制元件,應用了一個過濾器,以僅顯示生命週期狀態為 New
的銷售訂單。確認銷售訂單時,其狀態將更改為 In Process
,不再匹配過濾器。 此銷售訂單隨後會被重新整理,並將在 bAllowRemoval 標誌設定為 true 時,從列表中刪除。
上述邏輯的程式碼如下:
oAction.execute("confirmSalesOrderActionGroup").then(function () {
oConfirmedSalesOrderContext.refresh(undefined, true); // bAllowRemoval = true
});
在 XML 檢視裡使用絕對路徑繫結,並且指定額外 query option 的例子:
<Table items="{
path : '/SalesOrderList',
parameters : {
$expand : 'SO_2_BP',
$select : 'BuyerName,CurrencyCode,GrossAmount,Note,SalesOrderID'
}}">
...
<items>
<ColumnListItem>
<cells>
<Text text="{SalesOrderID}"/>
<Text text="{SO_2_BP/CompanyName}"/>
<Text text="{BillingStatus}"/>
</cells>
</ColumnListItem>
</items>
</Table>
<Table items="{
path : 'SO_2_SOITEM',
parameters : {
$select: "DeliveryDate,GrossAmount,SalesOrderID"
}
>
...
</Table>
上面的示例顯示了一個絕對列表繫結:使用 $expand 和 $select 查詢選項作為繫結引數將表的專案聚合繫結到 /SalesOrderList。 這些列使用路徑 SalesOrderID、SO_2_BP/CompanyName 和 BillingStatus 定義相對繫結,並將絕對列表繫結作為父繫結。
上圖 XML 檢視裡第二個 table 控制元件,即顯示行專案的表格控制元件,使用相對繫結的語法。 由於它定義了引數,一旦它接收到它的繫結上下文,它就會觸發它自己的資料服務請求。