Environnement :
Framework : SAPUI5 V.1.38.39
IDE : WebIde
Requirement :
I created a JSON file Data.json in the model folder and i would like to use in in the onInit of my controller to create a JSONmodel, my actual problem is that it's always returning me a 404 response on Data.json .
The folder tree it the initial one from SAPUI5 application template
Problem in code & test :
test 1 in webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
test 2 in webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("../model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
test 3 in webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("my/namespace/model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
APPENDIX - process to reproduce :
In Webide for SAPUI5 create new from template SAPUI5 application selection SAP version 1.38.39, initialize your namespace and your view/controller name.
In model create new Data.json :
{
"Set1": [{
"Status": "status1",
"Number": 10
}, {
"Status": "status2",
"Number": 20
}, {
"Status": "status3",
"Number": 30
}, {
"Status": "status4",
"Number": 40
}]
}
in your view :
<mvc:View
controllerName="your.namespace.controller.App"
xmlns:l="sap.ui.layout"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns:viz="sap.viz.ui5.controls"
xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds"
xmlns:viz.data="sap.viz.ui5.data"
xmlns:com="sap.suite.ui.commons"
xmlns="sap.m">
<Shell id="shell">
<App id="app">
<pages>
<Page id="page" title="{i18n>title}">
<content>
<l:VerticalLayout class="sapUiContentPadding" width="100%">
<com:ChartContainer id="chartContainer" showFullScreen="true" showPersonalization="false" autoAdjustHeight="false"
personalizationPress="attachPersonalizationPress" contentChange="attachContentChange" title="chart">
<com:content>
<com:ChartContainerContent icon="sap-icon://line-chart" title="Line Chart">
<com:content>
<viz:VizFrame id="idVizFrame_1" height='400px' width="100%" vizType='column' uiConfig="{applicationSet:'fiori'}">
<viz:dataset>
<viz.data:FlattenedDataset data="{CompaniesModel>/Set1}">
<viz.data:dimensions>
<viz.data:DimensionDefinition name="Status" value="{CompaniesModel>Status}"/>
</viz.data:dimensions>
<viz.data:measures>
<viz.data:MeasureDefinition name="Number" value="{CompaniesModel>Orders}"/>
</viz.data:measures>
</viz.data:FlattenedDataset>
</viz:dataset>
<viz:feeds>
<viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Number"/>
<viz.feeds:FeedItem uid="categoryAxis" type="Dimension" values="Status"/>
</viz:feeds>
</viz:VizFrame>
</com:content>
</com:ChartContainerContent>
</com:content>
</com:ChartContainer>
</l:VerticalLayout>
</content>
</Page>
</pages>
</App>
</Shell>
</mvc:View>
And in your controller :
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
], function (Controller, JSONModel) {
"use strict";
return Controller.extend("your.namespace.controller.App", {
onInit: function () {
//copy here one of the controller described in Problem in code & test
}
});
});
EDIT (other option than manifest) :
I add this possibility here if you don't want to use manifest, for using manifest go to the accepted answer of @Cmdd :)
if you don't want to use manifest you can do :
oModel.loadData("../../../../../webapp/model/Data.json");