2016-06-09 3 views
0

Моя проблема в том, что мне нужно получить сгенерированный идентификатор созданной записи. Я хочу создать одну запись в моей ODataModel, а затем еще одну. Второй должен содержать идентификатор первого в качестве свойства.SAPUI5 OData получить сгенерированный идентификатор после вставки

Но когда я вставляю первую запись с {"Id": "0"}, поэтому идентификатор автоматически генерируется, я не вижу способа получить ответ заголовка, чтобы сохранить сгенерированный идентификатор в переменной.

Я попытался сохранить ответ из обратного вызова успеха, но переменная остается неопределенной из-за асинхронности.

ответ

2

Между тем, я решил проблему самостоятельно. Я переместил создание второй записи в обратный вызов успеха первой записи. Таким образом, я смог получить идентификатор из параметра «response» и добавил его как свойство для моей второй записи. Это, вероятно, не лучшее решение, но оно работает для меня. Возможно, у кого-то есть еще одно предложение, чтобы сделать это лучше.

Это всего лишь образец кода, но, возможно, это поможет некоторым людям, у которых возникла аналогичная проблема.

  // oView = this.getView(); 
      // First Entry for EntitySampleSet1 
      var oEntry = {}; 

      oEntry.Id = "0"; 
      oEntry.Label = oView.byId("label").getValue(); 
      oEntry.Status = oView.byId("status").getValue(); 

      // Success Callback for the first Entry Creation 
      // response contains the Response Header for the POST Request 
      var fnSuccessCallback = function(oData, response) 
      { 
       console.log("Success 1"); 

       // Success Callback for the second create methode 
       var fnSuccess2Callback = function() 
       { 
        console.log("Success 2"); 
       }; 

       // Error Callback for the second create methode 
       var fnError2Callback = function() 
       { 
        console.log("Error 2"); 
       }; 

       // Second Entry for EntitySampleSet2 
       var o2Entry = {}; 

       // ID = "0" so the ID gets automatically generated by JPA 
       o2Entry.Id = "0"; 
       o2Entry.SampleRelatedObject = response.data.Id; 

       // The second Entry gets created in the OData Model 
       oModel.create("/SampleEntitySet2", o2Entry, 
         { 
          urlParameters : null, 
          success : fnSuccess2Callback, 
          error : fnError2Callback 
         }); 
      }; 

      var fnErrorCallback = function(oError) 
      { 
       console.log("Error1"); 
      }; 

      // The first Entry gets created in the OData Model 
      // after the create worked fine the fnSuccessCallback will get 
      // called and the second entry will be created in that method 
      oModel.create("/SampleEntitySet1", oEntry, 
      { 
       urlParameters : null, 
       success : fnSuccessCallback, 
       error : fnErrorCallback 
      }); 
Смежные вопросы