Controller getriggertes Aggregation Binding
In SAPUI5 / Fiori Apps ist es immer wieder erforderlich dass Tabellen oder Listen initial leer angezeigt werden und erst nachdem beispielsweise eine Selektion durchgeführt wurde die Daten geladen werden. Folgendes Code Snippet zeigt wie sich diese Anforderung anhand einer sap.m.Table umsetzen lässt. In der View muss die items Aggregation auf „{}“ gesetzt werden. Damit werden keine Daten vom Server geladen. Der Sourcecode der View sieht wie folgt aus:
<Table id="employeeTable" growing="true" growingThreshold="10" items="{}" mode="None">
<columns>
<Column id="colName">
<Text text="{i18n>employeeTable.name.title}"/>
</Column>
<Column id="colEmail">
<Text text="{i18n>employeeTable.email.title}"/>
</Column>
<Column id="colAction">
<Text text="{i18n>employeeTable.action.title}"/>
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Label text="{employee>Name}"/>
</cells>
<cells>
<Label text="{employee>Email}"/>
</cells>
<cells>
<Button icon="sap-icon://delete" press="onDeleteEmployee" />
</cells>
</ColumnListItem>
</items>
</Table>
Im Controller laden wir im ersten Schritt den Inhalt der Template Property der items Aggregation. Danach können Filter und Sorter optional gesetzt werden. Es ist zwingend erforderlich die BindingInfo mit Pfad, Template, Filtern und Sortern zu setzen. Abschließend wird das AggregationBinding auf die items Aggregation durchgeführt. Danach werden die Daten in der Tabelle der BindingInfo entsprechend angezeigt. Folgendes Code Snippet zeigt den relevanten Ausschnitt aus der Controller Implementierung:
var sParameter = "SAP";
var _oTable = this.getView().byId("employeeTable");
var oTemplate = _oTable.getBindingInfo("items").template;
var oFilter = new sap.ui.model.Filter({
path: "Department",
operator: sap.ui.model.FilterOperator.EQ,
value1: sParameter
});
var aFilters = [oFilter];
var oBindingInfo = {
path: "employee>/Employee",
template: oTemplate,
filters: aFilters
};
_oTable.bindAggregation("items", oBindingInfo);