2013-03-09 3 views
2

В Rally SDK 2, как мне обновить поле хэша, как поле «Автор» для набора изменений? Я прочитал, как обновить поле «Сообщение», но я не могу понять, как обновить хэш «[DisplayName]] автора.В Rally SDK 2, как мне обновить хэш-поле?

var new_message = settings.message; 
Rally.data.ModelFactory.getModel({ 
    type: 'Changeset', 
    success: function(model) { 
     model.load('1234', { 
       fetch: [ 'Artifacts' ], 
       callback: function(result, operation) { 
         if (operation.wasSuccessful()){ 
          var message = new_message; 
          record.set('Message', message); 
          record.save({ 
           callback: function(resultset, operation) { 
            console.log("After saving:", resultset); 
            if (operation.wasSuccessful()) { 
             var that = tree.ownerCt.ownerCt.ownerCt.ownerCt; 
             that._getChangesets(); 
            } 
           } 
          }); 
         } 
       } 
     }) 
    } 

});

ответ

0

Свойство Author в Изменении имеет тип User. Как и любые другие ассоциации объектов в WSAPI Rally, вы просто устанавливаете это свойство в ref объекта, который хотите связать. Вы устанавливаете это так же, как и в настоящее время, для параметра «Сообщение» в приведенном выше фрагменте кода. (Предполагая, что автор доступен для записи после того, как набор изменений уже создан).

record.set('Author', '/user/123456'); 

Вы можете, вероятно, также избежать глубоко вложенную структуру кода немного, указав сферу ваших обратных вызовов и использование функций-членов в своем определении приложения:

_loadChangesetModel: function() { 
    //If you already have a changeset record you can get the model 
    //via record.self. Otherwise, load it fresh. 
    Rally.data.ModelFactory.getModel({ 
     type: 'Changeset', 
     success: this._onChangesetModelLoaded, 
     scope: this 
    }); 
}, 

_onChangesetModelLoaded: function(model) { 
    model.load('1234', { 
     fetch: [ 'Artifacts' ], 
     callback: this._onChangesetLoaded, 
     scope: this 
    }); 
}, 

_onChangesetLoaded: function(record, operation) { 
    if (operation.wasSuccessful()){ 
     var message = settings.message; 
     record.set('Message', message); 
     record.save({ 
      callback: this._onChangesetSaved, 
      scope: this 
     }); 
    } 
}, 

_onChangesetSaved: function(resultset, operation) { 
    console.log("After saving:", resultset); 
    if (operation.wasSuccessful()) { 
     //You shouldn't need to do this now that the scope is correct. 
     //I'm guessing 'that' was referring to the app itself? 
     //var that = tree.ownerCt.ownerCt.ownerCt.ownerCt; 
     this._getChangesets(); 
    } 
}, 

_getChangesets: function() { 
    //refresh 
} 
+0

Спасибо за быстрый ответ. На прошлой неделе я начал использовать ралли. Я не понимаю, почему я получил значение для поля «Автор» из хеш-карты, но вернул его в качестве исходного текстового поля. Я извлекаю значение следующим образом, и он отлично работает: author = this.changeset.Author ["DisplayName"]; – user2152204

+2

Объекты WSAPI Rally идентифицируются по их уникальному ref: комбинация их типа и идентификатора объекта (/ defect/1234,/user/3456). При чтении из WSAPI объекта, который вы вернетесь, например, «Автор», будет иметь свойство _ref, которое однозначно идентифицирует его. Эти ссылки - это то, как вы обновляете отношения объектов, а не отправляете назад другое представление объекта. –

+1

+1 для разъяснения Кайла - любой атрибут, который сам указывает на объект Rally, должен быть указан в операциях Create/Update как ref в виде URL-адреса REST этому объекту ... – user1373451