2017-10-10 7 views
0

J'ai configuré les informations pour accéder à mon service OData de SAP UI5 dans le manifest.jsonFail lorsque la charge OData dans SAPUI5

{ 
"sap.app": { ... 
    }, 
    "dataSources": { 
     "Test": { 
      "uri": "/sap/opu/odata/sap/ZHCM_SRV/", 
      "type": "OData", 
      "settings": { 
       "odataVersion": "2.0", 
       "localUri": "localService/metadata.xml" 
      } 
     } 
    } ... 
"sap.ui5": { 
    "rootView": { 
     "viewName": "test.view.App", 
     "type": "XML", 
     "id": "app" 
    }, ... 
    "models": { 
     "i18n": { 
      "type": "sap.ui.model.resource.ResourceModel", 
      "settings": { 
       "bundleName": "test.i18n.i18n" 
      } 
     }, 
     "Test": { 
      "type": "sap.ui.model.odata.v2.ODataModel", 
      "settings": { 
       "defaultOperationMode": "Server", 
       "defaultBindingMode": "TwoWay", 
       "defaultCountMode": "None" 
      }, 
      "dataSource": "Test" 
     } 
    }, 
    "routing": { ... 
} 

Dans mes Component.js je:

init: function() { 

     UIComponent.prototype.init.apply(this, arguments); 

     this.getRouter().initialize(); 

     this.setModel(models.createDeviceModel(), "device"); 

     // I get the Url from configuration in Manifest.json 
     var sServiceUrl = this.getMetadata().getManifestEntry("sap.app").dataSources["Test"].uri; 

     // I create the OData 
     var sabModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl); 

     // Load the MetaData. 
     sabModel.getServiceMetadata(); 

     // Binding to the Model. 
     this.setModel(sabModel, "Sabbatical"); 

quand Je vérifie le oModel je peux voir que j'ai instancié le modèle mais il est vide, pas de données ... Avez-vous eu ce comportement? Toute suggestion???

Merci beaucoup! CBR

Répondre

0

Ce que vous avez fait jusqu'à présent est: établir une connexion au modèle.

Si vous souhaitez le remplir avec des données, vous pouvez le faire en liant le modèle à un élément d'interface utilisateur, par ex. table ou en lisant les données par programme: sap.ui.model.Model getProperty().

Dans votre cas, vous appelez

var yourVariable = sabModel.getProperty('path/to/your/property'); 
+0

Merci Michel, J'envoie une structure (1 tableau) et je veux la gérer sans charger une table ou une liste. Je vais jeter un oeil à la solution que vous m'avez dit. Merci beaucoup! –

0

modèles OData ne contiennent pas de données d'entités initialement. Seules les métadonnées sont demandées lors de l'instanciation du modèle.

ensembles d'entités peuvent être recueillies dans des manières suivantes:

  • manuellement via CRUD API
  • Que les demandes de poignée UI5 ​​automatiquement en fonction de la définition de liaison agrégation ou de l'élément (de préférence):

    Les requêtes vers l'arrière-plan sont déclenchées par les liaisons de liste, les liaisons d'éléments et les fonctions CRUD fournies par l'ODat. un modèle. Les liaisons de propriétés ne déclenchent pas de demandes.

Jetez un oeil à la documentation OData V2 Model.
Voici un exemple d'un similar answer: https://embed.plnkr.co/wAlrHB/


Note: Ni getProperty ni getObject envoie une demande, mais renvoie une copie de la valeur à partir du cache.

+0

Un grand merci Boghyon, Je voudrais gérer 1 entrée que je reçois du backend. Je ne veux pas montrer l'information dans un tableau ou une liste mais dans des champs réguliers comme textedits ou Inputfields. J'ai lu à plusieurs endroits comment remplir ces objets mais pas comment gérer vous-même les informations que vous recevez du service OData. Un grand merci, je suppose que je vais revenir à vous tous! –

+0

@ CBR_2017 Dans ce cas, vous pouvez [utiliser la liaison d'éléments] (https: // stackoverflow.com/a/44280286/5846045) (w/'$ select' selon le cas) sur le contrôle d'entrée directement et lier le champ d'entrée relativement sur sa propriété' value'. Gérer l'entrée w/API à partir du modèle OData, [ContextBinding] (https://openui5.hana.ondemand.com/#/api/sap.ui.model.odata.v2.ODataContextBinding) (via 'myInput.getBindingContext'), ou l'instance [PropertyBinding] (https://openui5.hana.ondemand.com/#/api/sap.ui.model.odata.ODataPropertyBinding) (via 'myInput.getBinding (" value ")'). – boghyon

+0

Désolé Boghyon, Je suis si frais avec cette technologie. J'ai 2 jours essayant ce que vous m'avez dit mais je ne peux pas voir mes informations dans l'OModel. Je charge cette information dans Component.js et j'aimerais naviguer vers l'une ou l'autre vue en fonction des valeurs que je télécharge dans le contexte. Je n'ai aucun objet sur mon écran parce que je veux déterminer l'itinéraire à l'avance ... –