0

我在 Windows 上将 Java API 与 Case Manager 5.2.1 一起使用。

我的网络服务执行以下操作:

// Create a brand new case
CaseType myCaseType = CaseType.fetchInstance(osRef, myCaseTypeName);
Case newPendingCase = Case.createPendingInstance(myCaseType);

// Save it now to get access to the Case ID
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY);
newCaseIdentifier = newPendingCase.getIdentifier();

// Fetch a fresh copy of the case instance
Case cs = Case.fetchInstanceFromIdentifier(osRef, newCaseIdentifier);

// Now set a whole bunch of properties, add documents, etc. etc.
...

// Finally, save all our updates: to "cs", not "newCaseIdentifier"
cs.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY);

问题:我间歇性地收到此错误:

“MyCaseTypeName”类的对象 {52EECAC2-38B2-4CB5-8F22-BAF33D6C35EC} 未更改或删除,因为自从应用程序检索到它后,它在存储库中被修改了一次或多次。更新序列号不匹配;请求的 USN = 0,数据库 USN = 1

知道只有两个 case.save() 调用:一个用于“newPendingDocument”,另一个(很久以后)用于“cs”。

我多次执行相同的代码:有时它可以工作,有时如果因“更新序列号不匹配”错误而失败。

问:关于如何解决此问题的任何想法/建议?

4

1 回答 1

1

查看您提供的代码,我很困惑为什么要创建第二个 Case 实例。我想你最好这样做:

// Create a brand new case
CaseType myCaseType = CaseType.fetchInstance(osRef, myCaseTypeName);
Case newPendingCase = Case.createPendingInstance(myCaseType);

// Save it now to get access to the Case ID
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY);
newCaseIdentifier = newPendingCase.getIdentifier();

// Fetch a fresh copy of the case instance (not sure if this is necessary)
newPendingCase = Case.fetchInstanceFromIdentifier(osRef, newCaseIdentifier);

// Now set a whole bunch of properties, add documents, etc. etc.
...

// Finally, save all our updates: to "newPendingCase"
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY);

我没有与 Case Manager 合作过,但与 P8 合作过。api 调用非常相似。

USN 号码可能有点棘手。如果有任何时间段您正在等待外部调用(例如到第 3 方 REST 接口),您可能希望newPendingCase.Refresh()在调用之后执行一个,然后重新填充任何需要的案例属性。

于 2016-06-21T13:51:26.633 回答