2015-06-21 70 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

我如何去了解內部響應層次嗎?你有沒有參考我? –