2016-03-30 7 views
1

Vor der Verwendung einer Manifest-Datei habe ich benutzerdefinierte Header zur Konfiguration meines oData-Modells hinzugefügt. Ab dem SAP UI5 1.30 verwendet Component.js nun eine Manifest-Datei und sobald die Runtime die Funktion Component.js init() aufruft, ist das Modell bereits geladen und eine erste Anfrage ist bereits an meinen Dienst gestellt. Ich brauche einen Weg, um meine benutzerdefinierten Header zur Laufzeit und bevor die erste Anfrage an meinen Dienst gemacht wird.SAP UI5> 1.30, wie man benutzerdefinierte Modell-Header vor der ersten Anfrage setzt

Vorher:

// The service URL for the oData model 
    var oServiceConfig = this.getMetadata().getConfig().serviceConfig; 
    var sServiceUrl = oServiceConfig.serviceUrl; 

    // the metadata is read to get the location of the i18n language files later 
    var mConfig = this.getMetadata().getConfig(); 
    this._routeMatchedHandler = new sap.m.routing.RouteMatchedHandler(this.getRouter(), this._bRouterCloseDialogs); 

    // create oData model 
    this._initODataModel(sServiceUrl); 

// _initODataModel function 

    headers = {custom: 'hello world'}; 
    var oConfig = { 
     metadataUrlParams: {}, 
     json: true, 
     // loadMetadataAsync : true, 
     defaultBindingMode: "OneWay", 
     defaultCountMode: "Inline", 
     useBatch: true, 
     headers: headers 
    }; 

    var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, oConfig);  
    this.setModel(oModel); 
+0

Können Sie Code hinzufügen? Momentan denke ich, was Sie ohne Manifest getan haben, war metadataUrlParams vor dem Laden des Modells übergeben? Ich denke in Manifest existiert das auch .. "models": -> "" -> Einstellungen -> metadataUrlParams ... in JSON Style. – zyrex

+0

@zyrax Sorry, wenn ich nicht klar war, muss ich meine Header-Werte zur Laufzeit berechnen ... – Pieter

Antwort

0

Sie das Objekt angeben, die an den Modellen Konstruktor im manifest.json in sap.ui5/models/MyModel/Einstellungen geben wird:

"sap.app": { 
    "dataSources": { 
    "myDatasource": { 
     "uri": "/sap/hba/r/apf/core/odata/apf.xsodata", 
     "type": "OData", 
     "settings": { 
     "odataVersion": "2.0" 
     } 
    } 
    } 
}, 
"sap.ui5": { 
    "models": { 
    "myModel": { 
     "datasource": "myDatasource", 
     "settings": { 
      "headers": { 
      "headername1":"headervalue1", 
      "headername2":"headervalue2", 
      } 
     } 
    } 
    } 
} 
+0

Sorry, wenn ich nicht klar war, muss ich meine Header-Werte zur Laufzeit berechnen ... – Pieter

+0

aus meiner Sicht dies ist genau dasselbe, was du vorher getan hast. Sie haben die Header während der Initialisierung des Modells übergeben. Das ist das gleiche in der App-Deskriptorsprache ... vielleicht bekomme ich den Point nicht? Aber denkst du kannst es nicht zur Laufzeit machen, jetzt hab ich es verstanden. Aber oData Model hat eine Methode "setHeaders" ... vielleicht hilft das? – zyrex

+0

Die manifest.json unterstützt keine dynamische Konfiguration. Das Manifest wird gelesen und die Modelle werden initialisiert, bevor die init() -Methode aufgerufen wird, so dass Sie die Modellinstanziierung weder beeinflussen noch die Manifestdaten vorher ändern können. Sie müssen das Modell in der init() -Methode instanziieren. Du könntest kors noch die Datenquelle im Manifest definieren und [lies die Werte wie uri aus dem Manifest] (https://sapui5.netweaver.ondemand.com/#docs/api/symbols/sap.ui.core.Component). html # getManifestEntry) in der init() -Methode, um Ihr Modell mit zu konfigurieren. – schnoedel

1

Die Datei manifest.json, die als App-Deskriptor bezeichnet wird, ist nicht so dynamisch, wie Sie sie benötigen würden. Mit anderen Worten: Mit dem App-Deskriptor können Sie nicht erreichen, was Sie wollen. Dies ist ein Nachteil der Verwendung des Anwendungsdeskriptors.

Sie könnten stattdessen Ihre Component.js verwenden, um etwas Dynamisches zu haben. Dort könnten Sie das Modell manuell instanziieren ... Vielleicht könnten Sie die Komponente auch "alt" ohne die manifest.json-Datei konfigurieren.

Verwandte Themen