Concurrency ';并发性';尝试保存第二个任务时服务出错
我正在尝试将两个任务保存到同一个用户故事中。第一个请求总是成功,但第二个服务请求总是在响应中返回此消息: 并发冲突:[对象自被读取以来已被修改 在此上下文中更新]-ConcurrencyConflictException:已修改 自更新时读取:对象类:com.f4tech.slm.domain.UserStory :ObjectID: 我正在使用JavaScript SDK创建任务。我这样做了两次:Concurrency ';并发性';尝试保存第二个任务时服务出错,concurrency,rally,Concurrency,Rally,我正在尝试将两个任务保存到同一个用户故事中。第一个请求总是成功,但第二个服务请求总是在响应中返回此消息: 并发冲突:[对象自被读取以来已被修改 在此上下文中更新]-ConcurrencyConflictException:已修改 自更新时读取:对象类:com.f4tech.slm.domain.UserStory :ObjectID: 我正在使用JavaScript SDK创建任务。我这样做了两次: Rally.data.ModelFactory.getModel({
Rally.data.ModelFactory.getModel({
type : 'Task',
success : function(task) {
var record = Ext.create(task, {
Name : taskName,
State : 'Defined',
TaskIndex : 1,
WorkProduct : workProductId,
Owner : userIdsTeam[owner],
SyncDevelopmentTasktoAccuRev : accuSync,
Estimate: hours,
TargetDeployment: targetDeployment,
context: {
project:'/project/' + currentProjectId,
projectScopeDown: true
},
});
record.save({
callback : afterSaveNewTaskCallback
});
}
});
我能做些什么来消除这个错误并成功保存两个任务吗?因为您的任务都附加到同一个底层用户故事,所以创建人员都试图锁定它以设置关联,这就是为什么第二个任务失败的原因。您需要将回调链接在一起:
Rally.data.ModelFactory.getModel({
type : 'Task',
success : function(taskModel) {
//Create first task
var task1 = Ext.create(taskModel, {
//...fields...
});
task1.save({
callback: function() {
//Create second task
var task2 = Ext.create(taskModel, {
//...fields...
});
task2.save({
callback: afterSaveNewTaskCallback
});
}
});
}
});
除了Kyle的答案之外,您还可以使用
Rally.data.BulkRecordUpdater
将创建/更新排队等待 如何/在何处调用两次模型创建?它是否响应UI中的事件?请记住,AppSDK调用是异步的,因此这可能是您遇到的并发冲突的原因。如果这是连接到一个按钮,您可能希望“去敏感化”按钮,并且只在模型的回调中重新敏感它。我刚刚修复了它,结果证明它确实是异步调用的问题。我一直在循环中调用该方法。我更改了它,以便使用递归回调。现在我没有得到错误。呸。谢谢你的帮助。