SAP標準のFiori Appを拡張しています。それらにはsap.m.ViewSettingsDialog
を作成するための1つの方法があります。今度は私自身のsap.m.ViewSettingsItem
に、sap.m.ViewSettingsFilterItem
が含まれています。イベントリスナーを取得/変更/削除する方法
今度は、イベントのconfirm
でリスナーを変更/置換/削除する必要があります。これは、バインドされたODataModelの値をSAPと同じ方法でCusomObjectに保存できないためです。
私の試みは、確認方法を強化することでした。私はSCN、StackoverflowおよびSAPUI5 APIを検索してeventhndlersのゲッターを取得しましたが、何も見つかりませんでした。どうすればそのオブジェクトを取得できますか?その下に私の問題をさらに理解するために
:
彼らの確認方法:
confirm: function (oEvent) {
//reset the buffered filter arrays
self.filterValueArray.length = 0;
var p = oEvent.getParameters(),
aFilters,
oCallback;
for (var i = 0 ; i < p.filterItems.length; i++) {
if (p.filterItems[i] instanceof sap.m.ViewSettingsCustomItem) { // custom control filter
oCallback = p.filterItems[i].getCustomData()[0].getValue();
aFilters = oCallback.apply(this, [p.filterItems[i].getCustomControl()]);
if (aFilters) {
// the filter could be an array of filters or a single filter so we transform it to an array
if (!Array.isArray(aFilters)) {
aFilters = [aFilters];
}
self.filterValueArray = self. filterValueArray.concat(aFilters);
}
} else if (p.filterItems[i] instanceof sap.m.ViewSettingsItem) { // standard filter
aFilters = p.filterItems[i].getCustomData()[0].getValue();
if (aFilters) {
// the filter could be an array of filters or a single filter so we transform it to an array
if (!Array.isArray(aFilters)) {
aFilters = [aFilters];
}
self.filterValueArray = self.filterValueArray.concat(aFilters);
}
}
}
// apply filters to the table binding
self._updateList(self.getList().getBinding("items"));
// update info toolbar
self.getView().byId("infoBarToolbar").setVisible((self.filterValueArray.length > 0) ? true: false);
self.getView().byId("infoBarFilter").setText((self.filterValueArray.length > 0) ? p.filterString: "");
// save expiry filter state for the "cancel" action
self._setExpiryFilterState();
}
マイ付加フィルター
var oBindingInfo = {
path: "/PathToTheKeyValuePairs",
template: new sap.m.ViewSettingsItem({
key: "{Key}",
text: "{Value}",
customData: new sap.ui.core.CustomData({
key: "callback",
value: function(oControl) {
debugger; //getting the data and creating filter here
}
//That would be the SAP Solution Sap does with hardcoded Filter
// key: "filter",
// value: new sap.ui.model.Filter("TargetAttribute", sap.ui.model.FilterOperator.EQ, "{Key}") //fixme It takes the string and no binding info
})
})
};
var oMyCustomFilter = new sap.m.ViewSettingsFilterItem({
key: "myCustomFilter",
text: self.resourceBundle.getText("myFilterName"),
});
oMyCustomFilter.bindAggregation("items", oBindingInfo);
this.filterDialog.addFilterItem(oMyCustomFilter);
私は何か悪いことをしました。私はEventproviderで確認を上書きしました。 (私的な属性)。私はまだ適切な解決策を探しています。 – inetphantom