在ui5中使用odata服务中的数据创建动态表

在ui5中使用odata服务中的数据创建动态表,odata,sapui5,Odata,Sapui5,我是sap ui5的新手 我正在尝试在sap web ide中生成的网页上生成一个表。 此表的数据是通过odata服务访问的.json文件 我走了这么远: oModel生成于: function initModel() { var sUrl = "/sap/opu/odata/sap/ZGWS_someService/CollectionSet?$format=json"; var oModel = new sap.ui.model.odata.ODataModel(sUrl,

我是sap ui5的新手

我正在尝试在sap web ide中生成的网页上生成一个表。 此表的数据是通过odata服务访问的.json文件

我走了这么远:

oModel生成于:

function initModel() {
    var sUrl = "/sap/opu/odata/sap/ZGWS_someService/CollectionSet?$format=json";
    var oModel = new sap.ui.model.odata.ODataModel(sUrl, true);
    sap.ui.getCore().setModel(oModel);
}
现在,我想在我的html站点上生成一个表,其中包含.json文件中的数据。 因此,我必须根据项目的属性创建列,然后用当前数据填充行

.json如下所示:

{
"d": {
"results": [
{
"property1": "123",
"property2": "346"
},
{
"property1": "123",
"property2": "555"
}
我还没有解决办法,你能帮我吗

格里茨,
simon

我在控制器中创建了表,并通过lodash对数据进行排序

这是好的做法吗

var oTable = this.byId("table");
        oTable.addColumn(new sap.ui.table.Column({
            label: new sap.ui.commons.Label({
                text: "Info1"
            }),
            sortProperty: "INTST",
            template: new sap.ui.commons.TextView().bindProperty("text", "key")
        }));
        oTable.addColumn(new sap.ui.table.Column({
            label: new sap.ui.commons.Label({
                text: "Count"
            }),
            template: new sap.ui.commons.TextView().bindProperty("text", "value")
        }));
        $
            .ajax({
                url: '/.../ServiceSet',
                jsonpCallback: 'getJSON',
                contentType: "application/json",
                dataType: 'json',
                success: function(data, textStatus, jqXHR) {
                    var oModel = new sap.ui.model.json.JSONModel();
                    oModel.setData(data);
                    sap.ui.getCore().setModel(oModel);
                    //Create a model and bind the table rows to this model
                    //Get the forecastday array table from txt_forecast object
                    var aData = oModel.getProperty("/d/results");
                    var aData2 = _.countBy(_.map(aData, function(d) {
                        return d.VALUE;
                    }));
                    var aData3 = Object.keys(aData2).sort().map(key => ({
                        key,
                        value: aData2[key]
                    }));
                    oModel.setData({
                        modelData: aData3
                    });
                    oTable.setModel(oModel);
                }
            });
        oTable.bindAggregation("rows", {
            path: "/modelData"
        });

欢迎来到UI5世界!首先,您选择了什么样的模板来生成项目?因为
initModel
中的每一行都很糟糕。如果您刚刚开始使用UI5,我建议您从文档中的开始(因为我想您已经熟悉JS),而不是使用过时的模板。也可能对其他学习资源有所帮助。我使用了sap ui5应用程序模板。initmodel函数是通过单击new->odata服务生成的,我甚至没有自己编写它。这不是正确的方法?initModel()很好,但它应该指向整个服务,而不是单独的“CollectionSet”->类似于
var sUrl=“/sap/opu/odata/sap/ZGWS\u someService/”
。然后,您必须使用表控件创建一个视图,并在表上绑定CollectionSet。有很多教程解释了这样的简单例子。演练中有一个关于如何使用odata模型的页面:->我建议阅读整个演练,正如Boghyon所说的为什么
initModel()
很糟糕:[第1行]因为服务URL指向一个实体集。查询
$format=json“
是多余的,因为
ODataModel
的第二个参数是获取json数据的标志。[第2行]您使用的模型是。[第3行]我想知道模板是从哪里获得的。它是来自Web IDE的模板吗?