我创建了一个文档集,并且能够将第二个doc的docid放在第一个doc中,第三个放在第二个doc中,直到最后一个Document,这使我能够在用户批准作业时从第一个文档导航到第二个文档。所以,但我希望能够在用户拒绝任务时从第二个回到第一个,但我无法在第二个documnet中存储第一个的docid。以下是我目前使用的代码
Document nextJob= null;
Document thisJob =null;
DocumentCollection col = lookup.getAllDocumentsByKey(ID, true);
if (col != null){
Job= col.getFirstDocument();
while (job!= null) {
thisJob.createDocument()
thisJob =Job;
thisJob.replaceItemValue("DocID",thisJob.getUniversalID());
thisJob.save(true);
if(nextJob!= null){
nextJob.replaceItemValue("TaskSuccessor",thisJob.getUniversalID());
nextJob.save(true);
}
nextJob= thisJob
tmpDoc = Job;
Job = col.getNextDocument(Job);
}
}
答案 0 :(得分:1)
为了回应Frantisek和其他人,更新文档并非最佳做法。如何实现它的关键是考虑一些问题:
如果它适用于所有用户并且创建了下一个日期,请根据创建的日期创建视图。除非你处理大量的工作(在这种情况下你应该考虑存档),否则创建更快,完全否定保存冲突或删除的问题并且没有显着的性能损失。
如果是少量作业,请将它们存储在Java Map中。但是你需要处理删除。因为您在加载应用程序时会加载地图,所以归档不是问题。
如果是每个用户的下一个/上一个,则更好的方法是将订单存储在数据库中的每个人的文档中。如果不涉及副本,则可以使用注释ID,并且将更短。它将否定拯救冲突。但它可能会导致大量作业出现问题 - 您可能需要以编程方式创建新字段并处理删除。
DonMaro的建议适合顶点(作业)之间边缘(第三个文档)的图形数据库方法。
在大多数情况下,视图将是最简单和最推荐的方法。 IBM在9.0.1 FP3中包含了视图索引增强功能,并允许在下一个版本中将视图索引存储在NSF之外。
即使您确信可以构建比Domino中已包含的更好的索引系统,还有其他方面,例如需要处理的保存冲突,而您的决定可能不允许未来的功能要求,如安全性,删除,存档等。
答案 1 :(得分:0)
嗯,尽管指出要真正考虑Frantisek Kossuth的评论(因为UNID会更改,以防您可能需要将文档复制/粘贴回数据库,例如备份;尝试使用@Unique生成唯一值) :
只需创建第三个文档对象“prevJob”,并在更改为下一个文档之前/之前将前一个文档存储在那里。
然后,您可以像访问“prevJob.getUniversalID()”一样访问UNID,并将其存储在您当前正在处理的文档中。