2017-05-04 4 views
0

J'essaye d'envoyer des données au service sap gateway. J'utilise cette example la méthode "enregistrer", mais quand j'essaye de le faire dans mon code j'obtiens une erreur "OData n'est pas défini"SAPUI5 - OData n'est pas défini

Voici la méthode quand j'essaye de le faire.

 handleConfirmationMessageBoxPress: function(oEvent) { 
     var bCompact = !!this.getView().$().closest(".sapUiSizeCompact").length; 
     MessageBox.confirm(
      "Deseja confirmar a transferência?", { 
       icon: sap.m.MessageBox.Icon.SUCCESS, 
       title: "Confirmar", 
       actions: [sap.m.MessageBox.Action.OK, sap.m.MessageBox.Action.CANCEL], 
       onClose: function(oAction) { 
        if (oAction == "OK") { 
         var oParameters = {}; 
         oParameters.loginfrom = this.getView().byId("multiInput").getValue(); 
         oParameters.loginfrom = this.getView().byId("loginPara").getValue(); 
         oParameters.loginfrom = this.getView().byId("datade").getValue(); 
         oParameters.loginfrom = this.getView().byId("datapara").getValue(); 

         OData.request({ 
          requestUri : "http://<host name>:<port no>/sap/opu/odata/sap/ZMM_EMP_SRV/EmployeeSet", 
          method : "GET", 
          headers : {...} 
             }, 
             function(data, response) { 
               ... 
                var oHeaders = { 
             ... }; 
          OData.request({ 
                requestUri : "http://<host name>:<port no>/sap/opu/odata/sap/ZMM_EMP_SRV/EmployeeSet", 
                method : "POST", 
                headers : oHeaders, 
                data:oParameters 
             }, 
                function(data,request) { 
                MessageToast.show("Transferência realizada!");  
                location.reload(true); 
             },   function(err) { 
                MessageToast.show("A transferência falhou!"); 
             }); 
          }, function(err) { 
                var request = err.request; 
                var response = err.response; 
                alert("Error in Get — Request " + request + " Response " + response); 
             }); 


        } else { 
         ... 
+0

X n'est pas défini signifie généralement qu'une variable donnée X est encore indéfinie. Vous devez initialiser correctement votre variable OData. Malheureusement, après avoir lu votre exemple, je ne sais pas ce que l'auteur pensait .. peut-être OData est un var global dans son exemple? – Marc

Répondre

0

Vous tentez d'utiliser l'objet global OData à partir de la bibliothèque datajs. Cette bibliothèque est en effet livrée avec OpenUI5, mais vous ne devriez pas l'utiliser directement (mais utilisez les méthodes du OData model, il n'y a aucune garantie réelle que UI5 ​​continuera d'expédier cette bibliothèque tierce à l'avenir).

L'erreur est probablement due au fait que la bibliothèque n'a pas encore été chargée par UI5. Les bibliothèques sont généralement chargées par chargement par UI5, vous devrez donc demander à UI5 de le charger pour vous (dans le tutoriel que vous avez lié, il a été chargé en coulisses par le modèle OData). Pour ce faire, vous pouvez soit utiliser jQuery.sap.require (jQuery.sap.require ("sap.ui.thirdparty.datajs")) soit lister la dépendance à l'intérieur de votre appel sap.ui.define au début du contrôleur (par exemple sap.ui.define(['sap/ui/thirdparty/datajs'], function(datajs){...})).

Modification ultérieure: vous pouvez également utiliser l'appel jQuery.sap.require("sap.ui.model.odata.datajs");, mais le module a été déplacé à partir de cet emplacement et il vous redirige efficacement vers le nouvel emplacement.

+0

Je télécharge le fichier datajs-1.0.1.min.js, le mets dans mon répertoire et l'inclue dans mon index.html, donc ça marche. Est-ce correct? –

+0

Vous n'avez pas besoin de télécharger les données séparément. Comme je l'ai mentionné dans la réponse, "Cette bibliothèque ** est expédiée ** avec OpenUI5". Cela signifie que UI5 ​​a par défaut la bibliothèque à l'intérieur, mais il ne le charge que lorsqu'il en a besoin ou que vous le demandez. Pour le demander, vous pouvez utiliser les appels require/define comme expliqué dans la réponse. –

+0

Merci Serban, je l'ai compris et résolu –

0

Ceci est un exemple très ancien, et les anciennes techniques utilisées. Vous devez ajouter cette ligne à votre code:

jQuery.sap.require("sap.ui.model.odata.datajs"); 

Cela devrait résoudre votre problème oData est indéfini. En général, vous devriez lire des exemples plus récents où la fonction read() du modèle odata est utilisée.

+0

Je télécharge datajs-1.0.1.min.js, mets dans mon répertoire et l'inclue dans mon index.html, donc ça marche. Est-ce correct? –