我对Rally API和JS以及Stackoverflow相当新。到目前为止,我一直在使用Stackoverflow来回答我的所有问题,但我似乎无法找到有关添加新TimeEntryValues的任何信息。
我正在构建一个允许添加新TimeEntryValues的应用。我可以添加或加载TimeEntry 项但是对于TimeEntryValues,我似乎只在浏览器中查看跟踪时发布了“小时”字段。
这是一个展示相同问题的简化代码。
launch: function(){
//For this example, pre-define Time Entry Reference, Date, and Hour value
var myTimeEntryItem = "/timeentryitem/1234";
var myDateValue = "2016-05-20T00:00:00.000Z";
var myHours = 2.5;
//Check if Time Entry Value (TEV) already exists
var TEVstore = Ext.create('Rally.data.WsapiDataStore', {
model: 'TimeEntryValue',
fetch: ['ObjectID','TimeEntryItem','Hours','DateVal'],
filters: [{
property: 'TimeEntryItem',
operator: '=',
value: myTimeEntryItem
},
{
property: 'DateVal',
operator: '=',
value: myDateValue
}],
autoLoad: true,
listeners: {
load: function(TEVstore, tevrecords, success) {
//No record found - TEV does not exist
if (tevrecords.length === 0) {
console.log("Creating new TEV record");
Rally.data.ModelFactory.getModel({
type: 'TimeEntryValue',
success: function(tevModel) {
var newTEV = Ext.create(tevModel, {
DateVal: myDateValue,
Hours: myHours,
TimeEntryItem: myTimeEntryItem
});
newTEV.save({
callback: function(result, operation) {
if(operation.wasSuccessful()) {
console.log("Succesful Save");
//Do something here
}
}
});
}
});
} else {
console.log("TEV Record exists.");
//Do something useful here
}
}
},
scope: this
});
}
我非常感谢任何暗示我做错的提示。 感谢
答案 0 :(得分:0)
这实际上是App SDK中长期存在的缺陷,原因是WSAPI属性元数据与用于将数据持久保存到服务器的客户端模型不匹配。
基本上发生的事情是DateVal和TimeEntryItem字段被标记为required和readonly,这没有意义。实际上,它们需要在创建时可写,然后在之后只读。
因此,在您尝试保存新的TimeEntryValue之前,只需将DateVal和TimeEntryItem字段标记为可持久性,您需要在应用程序中执行所有操作。您应该好好去。
//workaround
tevModel.getField('DateVal').persist = true;
tevModel.getField('TimeEntryItem').persist = true;
//proceed as usual
var newTEV = Ext.create(tevModel, {
DateVal: myDateValue,
Hours: myHours,
TimeEntryItem: myTimeEntryItem
});
// ...