Search code examples
sapui5

SAPUI5: getModel returns undefined if called within the same function of setModel


I'm trying to set a model and retrieving it from OData after pressing a certain button.

The problem is when I call getModel right after setting the model, it returns undefined.

However, if I call getModel from another function (after model being stetted from other functions), it returns the desired output.

Code for reference:

onPressButton1: function(){
            var vEntityURL = "/CustomerSet(ID='000')";
            var sServiceUrl = "/Customers_SRV/";
            var oServiceModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
            var oJsonModel = new sap.ui.model.json.JSONModel();

            oServiceModel.read(vEntityURL, {
                success: function(oData) {
                    oJsonModel.setData(oData);
                }
            });

            this.getView().setModel(oJsonModel, "Customers");

            var oCustomer = this.getView().getModel("Customers");
            console.log(oCustomer.getProperty("/Name"));
}

The above returns undefined in the console.

However, it works if I press another button with the following function.

onPressButton2: function(){
                var oCustomer = this.getView().getModel("Customers");
                console.log(oCustomer.getProperty("/Name"));
    }

Solution

  • This is not a sapui5 problem, it is the common behaviour of asynchronous code: you can be sure to have your data only in the success callback of the read method.

    Move the last three lines of code inside the success function and you're done :-)