将ODataModel转换为JSON模型

时间:2016-03-29 08:16:15

标签: json odata sapui5

由于读取UI5公共表的所有行的问题,并且表中的{ uri : "rtsp://[rtsp-address-as-published-on-the-app]", streamTimeout:12000, reconnectWaitTime:12000, rtpTransportMode:"udp", rtspValidationFrequency:15000, rtspFilterUnknownTracks:true, rtspStreamAudioTrack:false, rtspStreamVideoTrack:true, rtpDebugSession:true, rtspSessionTimeout:12000, rtspConnectionTimeout:12000 } 方法提供了模型。

我以为我可以使用JSONModel而不是我的ODataModel,现在的问题是如何将ODataModel转换为JSONModel。
因为JSON提供了一些有用的双向绑定选项。

我尝试读取一些set并将其绑定到JSONModel,问题是我无法将新模型绑定到视图中,因为它没有提供一些设置。

以下是我的代码片段。希望这应该更容易修复,因为读取所有表行:

getModel()

我看到表行绑定找到了它应该获得的正确数据长度,但是列绑定不起作用。这是行绑定的代码片段,然后是列

//Erstellung des Modells
var oModel2 = new sap.ui.model.odata.ODataModel(url, true, username, password);
var oModel = new JSONModel(jQuery.sap.getModulePath("QuickStartApplication.model", "/Search.json"));

oModel2.setSizeLimit(8000000);
var pspJSONModel = new sap.ui.model.json.JSONModel();
var oODataJSONModelDLSet = new sap.ui.model.json.JSONModel();
var oODataJSONModelProjectSet = new sap.ui.model.json.JSONModel();
var oODataJSONModelPSPset = new sap.ui.model.json.JSONModel();
var debitorJSONModel = new sap.ui.model.json.JSONModel();
this.getView().setModel(pspJSONModel, "jsonmodel2");
this.getView().setModel(oODataJSONModelDLSet, "jsonmodel");
this.getView().setModel(oODataJSONModelProjectSet, "jsonmodel3");
this.getView().setModel(oODataJSONModelPSPset, "jsonmodel4");
this.getView().setModel(debitorJSONModel, "jsonmodel5");
this.getView().setModel(oModel, "saves");
// etc

oModel2.read("/SEARCH_DLSet", null, null, false, function (oData, oResponse) {
    oODataJSONModelDLSet.setData({ DLSet: oData });
});
oModel2.read("/Search_ProjectsSet", null, null, false, function (oData, oResponse) {
    oODataJSONModelProjectSet.setData({ ProjectSet: oData });
});
oModel2.read("/SEARCH_PSPSet", null, null, false, function (oData, oResponse) {
    oODataJSONModelPSPset.setData({ PSPset: oData });
});
oModel2.read("/DebitorSet", null, null, false, function (oData, oResponse) {
    debitorJSONModel.setData({ DebitorSet: oData });
});
oModel2.read("/PSPSet", null, null, false, function (oData, oResponse) {
    pspJSONModel.setData({ Pspset2: oData });
});
var json1 = pspJSONModel.getJSON();
var json2 = oODataJSONModelDLSet.getJSON();

此外,我的两个OData模型在sPath下获得了第一个绑定属性集合名称,但我的新属性不会获得此属性。

以下是调试中的一些屏幕:

OModel 1 with first property of binding

New Model with first property of binding but no right path

更新json结果的示例:
PSPSet:

                            <Text text="PSP(A-Nr.)" class="sapUiResponsiveMargin" ></Text>
                            <ComboBox id="combo1"  items="{path: 'jsonmodel2>/Pspset2/results'}">
                                <core:Item key="{jsonmodel2>Psp}" text="{jsonmodel2>Psp}" />
                            </ComboBox>         

                            <Text text="Abrechnungsstatus" class="sapUiResponsiveMargin" ></Text>
                            <ComboBox id="Abrechnungsstatus"></ComboBox>                    
                        </l:VerticalLayout>
                    </l:HorizontalLayout>
                </l:VerticalLayout> 
             </l:HorizontalLayout> 
             </ScrollContainer> 
         </Panel>   
     <Panel visible="false" height="80%" width="98%" id="__layout15" class="__layout5">
<Button text="Edit" id="edit" type="Transparent" class="buttons" press="onEditRow"> </Button>
        <t:Table class="table0" id="table1" selectionMode="MultiToggle" rows="{jsonmodel>/DLSet/results}">
            <t:columns>
                <t:Column class="columns"  width="105px">
                    <Label text="Kontrakt Nr." id="lKontrakt" >
                    </Label>    
                    <t:template>
                        <commons:TextField id="Kontrakt" editable="false" value="{jsonmodel>KontraktNr}" ></commons:TextField>
                    </t:template>                   
                </t:Column>

和DLSet:

{
  "Pspset2": {
    "results": [
      {
        "__metadata": {
          "id": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/PSPSet('00014158001')",
          "uri": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/PSPSet('00014158001')",
          "type": "Z_TBRKNPRO_SEARCH_DL_SRV.PSP"
        },
        "Psp": "00014158001"
      },
      {
        "__metadata": {
          "id": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/PSPSet('00030173001')",
          "uri": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/PSPSet('00030173001')",
          "type": "Z_TBRKNPRO_SEARCH_DL_SRV.PSP"
        },
        "Psp": "00030173001"
      }
    ]
  }
}

2 个答案:

答案 0 :(得分:1)

由于您的代码似乎不太清楚,这里指出了如何实现它:

您将OData响应读入JSONModel:

var oModel2 = new sap.ui.odata.ODataModel();
var oODataJSONModelDLSet = new sap.ui.json.JSONModel();

this.getView().setModel(oODataJSONModelDLSet, "jsonmodel");

// etc

oModel2.read("/SEARCH_DLSet" + filterString, null, null, false, function (oData, oResponse) {
    oODataJSONModelDLSet.setData({ DLSet: oData });
});

...然后绑定到您的视图:

<t:Table rows="{jsonmodel>/DLSet/results}">
    <t:columns>
        <t:Column>
            <Label text="Kontrakt Nr." /> 
            <t:template >
                <commons:TextField value="{jsonmodel>KontraktNr}" />
            </t:template>                   
        </t:Column>

编辑:根据更新的问题更新了答案

答案 1 :(得分:0)

首先:您是否使用&#39; jsonmodel&#39;正确地将JSONModel附加到您的视图中?名称(因为你在表格的约束中引用它)

然后,你检查过oData对象的结构了吗?你问的是:

{ oData : { results : [... ] } }

最后在文本字段中,您没有引用&#39; jsonmodel&#39;再次,你应该放{jsonmodel&gt; KontraktNr}而不仅仅是{KontraktNr}