使用UI5,JSON文件扩展模拟数据

时间:2017-01-17 02:05:55

标签: sapui5

我正在尝试基于现有和工作的oData模型来模拟一些数据。模拟服务器工作,但我正在努力使$expand做它的工作。我认为这主要是因为我不了解存储JSON的位置或方式。

元数据文件从工作服务逐字复制,包含所有实体,实体集,关联等。

以下是一些相关内容。来自Users实体:

<NavigationProperty Name="Dealers" Relationship="Y_DP_CORE_SRV.User_Dealer" FromRole="FromRole_User_Dealer" ToRole="ToRole_User_Dealer" />

协会:

<Association Name="User_Dealer" sap:content-version="1">
  <End Type="Y_DP_CORE_SRV.User" Multiplicity="1" Role="FromRole_User_Dealer" />
  <End Type="Y_DP_CORE_SRV.Dealer" Multiplicity="*" Role="ToRole_User_Dealer" />
  <ReferentialConstraint>
    <Principal Role="FromRole_User_Dealer">
      <PropertyRef Name="Id" />
    </Principal>
    <Dependent Role="ToRole_User_Dealer">
      <PropertyRef Name="Id" />
    </Dependent>
  </ReferentialConstraint>
</Association>

我可以Users('PRX-00015')。我无法获得Users('PRX-00015')/DealersUsers('PRX-00015')?$expand=Dealers。没有错误,也没有数据。

这是Users.JSON

[{
    "__metadata": {
        "id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')",
        "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')",
        "type": "Y_DP_CORE_SRV.User"
    },
    "Id": "PRX-00015",
    "FullName": "Jorg",
    "Email": "",
    "Telephone": "",
    "InternalUser": false,
    "Enabled": true,
    "Dealers": {
        "results": [{
            "__metadata": {
                "id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
                "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
                "type": "Y_DP_CORE_SRV.Dealer"
            },
            "Id": "AA2002"
        }, {
            "__metadata": {
                "id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
                "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
                "type": "Y_DP_CORE_SRV.Dealer"
            },
            "Id": "AA1046"
        }]
    },
}]

我还可以使用未扩展版本的Dealers并将数组移动到它自己的Dealers.json文件中,在这种情况下,该行看起来像

"Dealers": {
    "__deferred": {
        "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')/Dealers"
    }
}

Dealers.json

[{
    "__metadata": {
        "id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
        "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
        "type": "Y_DP_CORE_SRV.Dealer"
    },
    "Id": "AA2002"
}, {
    "__metadata": {
        "id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
        "uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
        "type": "Y_DP_CORE_SRV.Dealer"
    },
    "Id": "AA1046"
}]

所有这些都导致空Dealers数组(Dealers.length为0)。有谁知道这是如何工作的?

2 个答案:

答案 0 :(得分:0)

通常项目结构如下:

webapp/
 - localService/
   - mockdata/
     - Y_DP_CORE_SRV.User
     - Y_DP_CORE_SRV.Dealer.json
   - metadata.json

但是文件的位置并不重要,重要的是你的MockServer是如何实现的。 MockServer应该模拟真实服务器的真实网址,并从您提供的文件中返回虚假数据。您是否已经看过这个例子 - https://sapui5.hana.ondemand.com/test-resources/sap/ui/templateapps/demokit/master-detail/webapp/localService/mockserver.js

关于扩展。通常,在xml视图中,您可以通过定义expand参数来扩展具有绑定属性的相关实体。在JavaScript中它的工作方式类似。当我到达我的计算机时,我可以提供一些示例,但它与MockServer并不真正相关,因为所有扩展参数保持不变,无论它是来自真实后端的模拟数据还是真实数据......

更新:以下是如何从视图和访问属性中扩展模型的示例:

<QuickView
    binding="{path: 'to_Supplier', parameters: { expand: 'to_Address,to_PrimaryContactPerson' }}">
    <QuickViewPage
        title="{CompanyName}"
        description="{to_PrimaryContactPerson/FormattedContactName}">
            <QuickViewGroup>
                <QuickViewGroupElement value="{to_Address/FormattedAddress}"/>
            </QuickViewGroup>
    </QuickViewPage>
</QuickView>

答案 1 :(得分:0)

您为读取OData编写了哪些代码? OData在读操作时需要urlParameters:

oModel.read("/User", {
                    urlParameters:{
                        "$expand" : "Dealers"
                    },
                    success: function (oData) {
                        var oJson = new sap.ui.model.json.JSONModel();
                        oJson.setData(oData);
                        oVista.setModel(oJson);
                    }
            });

您必须阅读用户集并使用经销商的导航属性进行扩展,因此您必须获得一个具有相应用户经销商的树,其来自用户JSON对象的经销商属性,类似于:

User: {
 property1 : value1,
 ...       : ...,
 Dealers   : [
     { dealer1Property1 : dealer1Value1,
        ....            :    .... },
     { dealer2Property1 : dealer2Value2,
        ....            :    .... },
     ... ]
     }

之后,Skay的xml代码必须成功。