Skip to Content

SAPUI5 ObjectPageLayout routing and binding

Hi Everyone,

I'm trying the following :

on my View I choose a Extui Id, I want that when opening next View binding exists corresponding to the choosen installation.

Usually when I need to do that, I use routing such as :

"name": "View3",
"pattern": "/DonneesRelevesSet/View3/{G_CC},{G_SA},{G_Extui},{G_Anlage}",
"titleTarget": "",
"greedy": false,
"target": ["View3"]

Next step is to fill parameters when calling route :

		onPressModif: function (oEvent) {
			var oCC = oEvent.getSource().getCells()[0].getText();
			var oSA = oEvent.getSource().getCells()[8].getText();
			var oExtui = oEvent.getSource().getCells()[1].getText();
			var oAnlage = oEvent.getSource().getCells()[12].getText();
			oNavigation.navTo("View3", {
				G_CC: oCC,
				G_SA: oSA,
				G_Extui: oExtui,
				G_Anlage: oAnlage
			});
		},

Nothing extravagant.

with an usual view containing table of forms, it is easy to bind entity in onInit method but in my case, table is not recognized in controller :

onInit: function () {
			// Keeps reference to any of the created sap.m.ViewSettingsDialog-s in this sample
			this._mViewSettingsDialogs = {};
			var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
			if (oRouter) {
				oRouter.getRoute("View3").attachMatched(this._onRouteFound, this);
				oNavigation = sap.ui.core.UIComponent.getRouterFor(this);
			}
		},
		_onRouteFound: function (oEvent) {
			var oArgument = oEvent.getParameter("arguments");
			var sCC = oArgument.G_CC;
			this.byId("LienCC").setText(sCC);
			var sSA = oArgument.G_SA;
			this.byId("SecteurActivite").setText(sSA);
			var sExtui = oArgument.G_Extui;
			this.byId("PDL").setText(sExtui);
			// alimentation données globales
			oPDL = sExtui;
			oSA = sSA;
			oInstallation = oArgument.G_Anlage;
		},

it works with those items but not table. it is certainly due to the fact that my table is in a subsection of view2 :

<layout:VerticalLayout>
				<m:Label text="Compte de contrat confirmé :"/>
				<m:Link text="Dummy" press="LinkCC" id="LienCC"/>
				<m:Label text="Secteur d'activité :"/>
				<m:Label text="Dummy" id="SecteurActivite"/>
			</layout:VerticalLayout>
		</headerContent>
		<sections>
			<ObjectPageSection title="Données du point de comptage" subSections="{DonneesPdlSet>/}">
				<subSections>
					<ObjectPageSubSection title="Point de comptage">
						<blocks>
							<Pdl:InfoPDCBlock id="InfoPDC" columnLayout="3"/>
						</blocks>
					</ObjectPageSubSection>
				</subSections>
			</ObjectPageSection>

corresponding subSections il like this :

<Table noDataText="Pas de données à afficher" id="table1" items="{DonneesPdlSet>/d/results}">
		<headerToolbar>
			<Toolbar>
				<Title text="Infos PDL" level="H1"/>
				<ToolbarSpacer/>
				<Button tooltip="Trier les entrées" icon="sap-icon://sort" press="handleSortButtonPressed"/>
				<Button tooltip="Filtrer les entrées" icon="sap-icon://filter" press="handleFilterButtonPressed"/>
			</Toolbar>
		</headerToolbar>
		<items>
			<ColumnListItem type="Active" id="item0">
				<cells>
					<Link text="{DonneesPdlSet>ExtUi}" press="linkExtUi"/>
					<Link text="{DonneesPdlSet>Haus}" press="linkHaus"/>
</cells>

			</ColumnListItem>
		</items>
		<columns>
			<Column id="column0">
				<header>
					<Label text="PDL" id="label4"/>
				</header>
			</Column>
			<Column id="column1">
				<header>
					<Label text="Object de raccordement" id="label5"/>
				</header>
			</Column>
		</columns>
	</Table>

How may I bind data dynamically to the subsection using selected Extui data ?

I tried this in afterRendering event :

			var oTable = this.byId("table1");
			if (oTable) {
				var oFilter1 = new sap.ui.model.Filter("Extui", FilterOperator.EQ, oPDL);
				var oFilter2 = new sap.ui.model.Filter("Sparte", FilterOperator.EQ, oSA);
				var filters = new sap.ui.model.Filter({
					and: true,
					filters: [
						oFilter1,
						oFilter2
					]
				});
				var binding = oTable.getBinding("items");
				binding.filter(filters);
			}

No problem appears but it doesn't works. Output table is empty.

maybe using index instead of filters ? Json data are like this :

{
	"d": {
		"results": [{
			"ExtUi": "15478954685471",
			"Haus": "6000000007",
			"Vstelle": "5000000032",
			"Sparte": "Gaz",
			"Vertrag": "300000069",
			"Anlage": "4000000063",			
			"HouseNum1": "13",
			"Street": "rue des Rosiers",
			"PostCode1": "27520",
			"City1": "GRAND BOURGTHEROULDE"
		}, {
			"ExtUi": "15478954685471",
			"Haus": "6000000007",
			"Vstelle": "5000000032",
			"Sparte": "Electricité",
			"Vertrag": "300000064",
			"Anlage": "4000000058",			
			"HouseNum1": "13",
			"Street": "rue des Rosiers",
			"PostCode1": "27520",
			"City1": "GRAND BOURGTHEROULDE"
		}]
	}
}
Thanks in advance. 
Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

0 Answers