Разверните макет данных с файлами UI5, JSON

Я пытаюсь подделать некоторые данные, основанные на существующих и работающих моделях oData. Макет сервера работает, но я изо $expandвсех сил пытаюсь сделать это своей работой. Я думаю, что в основном дело в том, что я не понимаю, где и как хранить JSON.

Файл метаданных копируется дословно из рабочей службы и содержит все сущности, entitysets, ассоциации и т.д.

Вот некоторые из соответствующих битов. От 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')/Dealersили Users('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.length0). Кто-нибудь знает, как это работает?

2 ответа

  1. Обычно структура проекта выглядит так:

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

    Но на самом деле не имеет значения, где находятся ваши файлы, важно, как реализован ваш MockServer. MockServer должен имитировать реальные URL на ваш реальный сервер и возвращать поддельные данные из предоставленных вами файлов. Вы уже взглянули на этот пример — https://sapui5.hana.ondemand.com/test-resources/sap/ui/templateapps/demokit/master-detail/webapp/localService/mockserver.js ?

    Относительно расширяет. Обычно в XML-представлениях можно развернуть связанные сущности со свойством binding, определив параметр expand. В javascript это работает похожим образом. Я могу привести несколько примеров, когда я получаю на свой компьютер, но это не связано с MockServer, так как все параметры расширения остаются теми же независимо от того, это mockdata или реальные данные из реального бэкенда…

    UPDATE: вот пример, как развернуть модели из представлений и свойств доступа:

    <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>
    
  2. Какой код вы написали для read 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,
            ....            :    .... },
         ... ]
         }
    

    После этого xml-код Skay должен быть успешным.