XPages:浏览文档集合

时间:2015-06-21 08:57:39

标签: java xpages

我创建了一个文档集,并且能够将第二个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);
}
}

2 个答案:

答案 0 :(得分:1)

为了回应Frantisek和其他人,更新文档并非最佳做法。如何实现它的关键是考虑一些问题:

  1. 你的意思是第一次下一个和以前的工作?
  2. 涉及的工作数量是多少?
  3. 您/用户如何最大限度地减少/解决保存冲突?
  4. 如何处理删除以确保参照完整性?#
  5. 当您需要存档数据时会发生什么?
  6. 如果它适用于所有用户并且创建了下一个日期,请根据创建的日期创建视图。除非你处理大量的工作(在这种情况下你应该考虑存档),否则创建更快,完全否定保存冲突或删除的问题并且没有显着的性能损失。

    如果是少量作业,请将它们存储在Java Map中。但是你需要处理删除。因为您在加载应用程序时会加载地图,所以归档不是问题。

    如果是每个用户的下一个/上一个,则更好的方法是将订单存储在数据库中的每个人的文档中。如果不涉及副本,则可以使用注释ID,并且将更短。它将否定拯救冲突。但它可能会导致大量作业出现问题 - 您可能需要以编程方式创建新字段并处理删除。

    DonMaro的建议适合顶点(作业)之间边缘(第三个文档)的图形数据库方法。

    在大多数情况下,视图将是最简单和最推荐的方法。 IBM在9.0.1 FP3中包含了视图索引增强功能,并允许在下一个版本中将视图索引存储在NSF之外。

    即使您确信可以构建比Domino中已包含的更好的索引系统,还有其他方面,例如需要处理的保存冲突,而您的决定可能不允许未来的功能要求,如安全性,删除,存档等。

答案 1 :(得分:0)

嗯,尽管指出要真正考虑Frantisek Kossuth的评论(因为UNID会更改,以防您可能需要将文档复制/粘贴回数据库,例如备份;尝试使用@Unique生成唯一值) :
只需创建第三个文档对象“prevJob”,并在更改为下一个文档之前/之前将前一个文档存储在那里。

然后,您可以像访问“prevJob.getUniversalID()”一样访问UNID,并将其存储在您当前正在处理的文档中。