2015-06-21 65 views
0

我创建了一个文档集合,并且能够将第二个doc的docid放在第一个doc中,第三个放在第二个文档中,直到最后一个文档使我能够从第一个文档导航到第二个文档当用户批准工作等等,但是我希望当用户拒绝任务时也能够从第二个回到第一个,但是我没有能够在第二个documnet中存储第一个的docid。下面是我目前使用的代码XPages:围绕文档集合导航

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); 
} 
} 
+1

了解currentTask的对象类型(第7行)会很有用。currentJob看起来像是一个NotesDocument,但是你可以在它上面调用createDocument(),它是NotesDatabase类的一个方法。 –

+0

我已经更新了上面的问题,以便能够在第二个和第二个中存储或保存第一个Document的UNID,以便我可以在工作流中上下移动,但使用上面的代码在documentcollection中,我可以将第二个文档的docid存储在第一个和第三个文档中,依此类推,并且字段TaskSuccessor保存下一个 –

+2

的ID,重新考虑您的方法。不要在文档中存储文档的单一文件。更好的主意是拥有视图或文件夹。 –

回答

0

好了,尽管他指出,真正考虑弗朗科苏特的评论(如UNIDs的情况下得到改变,你有可能需要复制/粘贴文件回数据库,例如用于备份;请尝试使用@Unique生成唯一值:
只需创建第三个文档对象“prevJob”,并在切换到下一个文件之前/之前存储以前的文档。

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

1

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

  1. 你的意思是第一个下一个和上一个工作?
  2. 涉及的工作数量是多少?
  3. 保存冲突将如何最小化/由您/用户解决?
  4. 如何处理删除操作,以确保参照完整性?#
  5. 当您需要归档数据时会发生什么?

如果是为所有用户创建,并且下次创建日期,则根据创建的日期创建一个视图。除非你处理大量的工作(在这种情况下你应该考虑归档),否则创建会更快,完全否定保存冲突或删除的问题,并且不会造成显着的性能下降。

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

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

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

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

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

+0

感谢您的信息,我正在处理一个工作流程。在工作流程文件中有几个作业文件是对工作流程文件的响应。所以如果负责特定工作的人完成审批,工作流将发送给下一个负责人,如果被拒绝,则返回到前一个等,通过邮件发送给负责人 –

+0

Document.responses()是你想要的然后。这将按照日期创建的顺序为所有子文档(作业)提供DocumentCollection。它使用NSF的内部响应层次表,所以你不会重新发明轮子:-) –

+0

我如何去了解内部响应层次吗?你有没有参考我? –