2011-10-06 89 views
1

我們的Domino開發人員告訴我們,在文檔之間移動子文檔是「技術上不可能的」。這是真的?今年Lotus Domino不能將子文檔從一個文檔移動到另一個文檔?

此前,他爲我們提供以下數據庫圖表寫了課程註冊系統:

database diagram

現在,我們問他怎麼輪候登記從完整的培訓課程轉移到那些沒有會話。他說這是不可能的。他說我們需要重新輸入(手動重新創建,複製和粘貼)等待列表記錄,因爲Domino不能將參與者從一個會話移動到另一個會話。

我們有超過1000名參加者在我們的等候名單中。

他是否正確?這是真的嗎?我們希望有一個解決方案。

+0

我有時間思考技術問題,並想出了2種方法可以實現此功能。請看下面的答案 – giulio

回答

2

如何做到這一點取決於文件鏈接的方式。但無論如何應該可以使用代碼(公式/ lotusscript/java)重新鏈接文檔。

Lotus設計人員的幫助包含大量有關應用程序開發的信息。另一個資源是IBM developerworks

有許多蓮花相關blogs

從Lotus Designer幫助: MakeResponse:使一個文檔到另一個文檔的答覆。這兩個文件必須在同一個數據庫中。

Dim session As New NotesSession 
Dim db As NotesDatabase 
Dim view As NotesView 
Dim docA As NotesDocument 
Dim docB As NotesDocument 
Set db = session.CurrentDatabase 
Set view = db.GetView("All documents") 
Set docA = view.GetFirstDocument 
Set docB = view.GetNextDocument(docA) 
Call docB.MakeResponse(docA) 
docB.Form = "Response" 
Call docB.Save(True, True) 
+0

謝謝賈斯珀!你有我可以與我們的開發人員分享的URL(教程)嗎?或者,也許有一個問題,我可以讓他找出這些文檔如何鏈接,然後給出他的答案,我可以與他分享一個教程如何做這個「重新鏈接」過程。他聽起來像是真的不知道如何。我認爲「將此參加者移至[此課程其他課程的下拉列表]」控制對於我們所需要的已足夠,您是否同意? –

+0

這真的取決於應用程序的結構。如果這是一次「轉換」,最好的辦法就是成立一個lotusscript代理。互聯網上有很多資源。我已通過幾條鏈接更新了我的答案 –

+0

這不會是一次性的,因爲註冊人每天都會進來,會話每週都會打開。 (我們在聖誕節前開放50個新的「響應需求」會議....)請告訴我們:代碼是否只是將子文檔分配給一個新的「父文檔」,然後保存它?我自己是一名ex-SQL開發人員,所以我喜歡任何示例代碼。這聽起來很基本。 –

1

有2種方法的文檔可以鏈接: - 通過按鍵,軟辦法 - 分層,使用文檔響應鏈接(即父母與子女)

如果只存在邏輯鏈接,使用密鑰,您只需調整關鍵字段。如果存在「物理」文檔響應鏈接,則可以輕鬆中斷並重新創建該鏈接。在LotusScript中,有NotesDocument.MakeResponse方法將任何文檔附加到新父項。如果同時使用這兩種方法,當然需要恢復某些鏈接,但這種方法很實用,您需要同時進行這兩項更改。通常情況下,一些關鍵領域是從父重複子

只是爲了測試目的,你可以試試這個: - 選擇要在其他地方掛 的響應文件 - 按Ctrl-X - 選擇新的父文件 - Ctrl-V

在測試數據庫中執行此操作,因爲關鍵字段不會自動更新。順便說一下:粘貼這樣的響應文件後,可以編寫代碼來修復密鑰。

0

如果你想保留現有的文件,你可以編程方式複製/複製它們。 使用copyAllItems方法很容易。

看的Domino幫助(例如)here

你可以重複使用的NotesView對象(getFirstDocument()/ getNextDocument()方法)的文件,重複上notesdocument.responses方法迴應...

信任我們,這是可能的,多米諾靈活:-)

0

基本上有2種方式這個數據是在你所描述的數據模型聯繫起來。如果數據通過響應文檔層次結構鏈接,則與基於關鍵字的文檔結構略有不同。

向您的開發人員顯示此信息,他應該能夠插入代碼以啓用您所談論的「移動參與者」要求。

有幾件事要注意。

  • 我假設你需要操縱的所有數據都在一個數據庫中。
  • 我把你的圖表從字面上提供。
  • 對於基於關鍵字的文檔結構,您需要檢查使用的視圖和鍵值o查找與會者文檔。具體地檢查這些2行中的 「MoveAttendeesKeyBased」 子:

    集vwAttendeesByCourseID = db.GetView( 「(LkupAllAttendeesByCourseID)」)

    集dcAttendees = vwAttendeesbyCourseID.GetAllDocumentsByKey(docCourseFrom.CourseID(0),真)

  • 該代碼旨在查看名爲「CourseID」,「狀態」和「等待列出」的值,以獲取要移動的與會者的狀態值。

  • 編寫這個函數的兩個版本花了大約20分鐘。

對於基於響應文檔結構

Sub MoveAttendeesResponseBased(docCourseFrom As notesDocument, docCourseTo As NotesDocument) 
%REM 
    A simple move attendees function if the relationship between courses and attendees is based on 
    response document hierarchies 
%END REM 
    On Error Goto errHandle 
    Dim dcAttendees As notesDocumentCollection 
    Dim docAttendee As notesDocument 
    Dim iAvailablePlaces As Integer 
    Dim bMoved As Boolean 

    If Not (docCourseFrom Is Nothing Or docCourseTo Is Nothing) Then   
     iAvailablePlaces = docCourseTo.availablePlaces(0) 
     If 0 < iAvailablePlaces Then 
      bMoved = False 
      Set dcAttendees = docCourseFrom.Responses 
      Set docAttendee = dcAttendees.GetFirstDocument 
      While Not docAttendee Is Nothing And 0 < iAvailablePlaces 
       If Ucase(Trim(docAttendee.Status(0)))= "WAIT LISTED" Then 
        Call docAttendee.MakeResponse(docCourseTo) 
        If docAttendee.Save(True,True) Then 
         iAvailablePlaces = iAvailablePlaces - 1 
         bMoved = True 
        End If 
       End If 
       Set docAttendee = dcAttendees.GetNextDocument(docAttendee) 
      Wend 
      If bMoved Then 
       docCourseTo.availablePlaces = iAvailablePlaces 
       Call docCourseTo.Save(True,False) 
      End If 
     End If 
    End If 
    Exit Sub 
errHandle: 
    Messagebox Lsi_info(2) + " - " + Str(Err) + " : " + Error(Err) + ", at line " + Str(Erl) 
    Exit Sub 
End Sub 

對於基於關鍵文檔結構

Sub MoveAttendeesKeyBased(docCourseFrom As notesDocument, docCourseTo As notesDocument) 
%REM 
    A simple move attendees function if the relationship between courses and attendees uses 
    (non-response) key based documents 
%END REM 
    On Error Goto errHandle 
    Dim session As New notesSession 
    Dim dcAttendees As notesDocumentCollection 
    Dim docAttendee As notesDocument 
    Dim iAvailablePlaces As Integer 
    Dim bMoved As Boolean 
    ' a view that lists attendees by Course ID 
    Dim vwAttendeesByCourseID As notesView 
    Dim db As notesDatabase 

    If Not (docCourseFrom Is Nothing Or docCourseTo Is Nothing) Then   
     iAvailablePlaces = docCourseTo.availablePlaces(0) 
     If 0 < iAvailablePlaces Then 
      Set db = session.CurrentDatabase 
      ' do a lookup of all attendees based on the CourseFrom document course id 
      Set vwAttendeesByCourseID = db.GetView("(LkupAllAttendeesByCourseID)") 
      ' this is the collection of all attendees under the CourseFrom document 
      Set dcAttendees = vwAttendeesbyCourseID.GetAllDocumentsByKey(docCourseFrom.CourseID(0), True) 
      bMoved = False 
      Set docAttendee = dcAttendees.GetFirstDocument 
      ' While there are attendee documents to process and there are available places to goto 
      While Not docAttendee Is Nothing And 0 < iAvailablePlaces 
       ' if the attendee's status is "Wait Listed" then move them 
       If Ucase(Trim(docAttendee.Status(0)))= "WAIT LISTED" Then 
        ' Update the course ID for the Attendee 
        docAttendee.CourseID = docCourseTo.CourseID(0) 
        If docAttendee.Save(True,True) Then 
         ' decrement the available places 
         iAvailablePlaces = iAvailablePlaces - 1 
         bMoved = True 
        End If 
       End If 
       Set docAttendee = dcAttendees.GetNextDocument(docAttendee) 
      Wend 
      If bMoved Then 
       ' available places may be >= 0. Just update the available places so you don't over book the course 
       docCourseTo.availablePlaces = iAvailablePlaces 
       Call docCourseTo.Save(True,False) 
      End If 
     End If 
    End If 
    Exit Sub 
errHandle: 
    Messagebox Lsi_info(2) + " - " + Str(Err) + " : " + Error(Err) + ", at line " + Str(Erl) 
    Exit Sub 
End Sub 

基於密鑰文件的更多一點的工作,但我認爲是一個更好的結構,因爲你可以很容易地在數據庫中移動文檔並從備份中恢復,複製和粘貼。有了回覆文件,您可能會遇到恢復備份的問題,因爲回覆文件使用父母文件UNID來關聯自己,而且如果您偶然移動了與會者,就不可能知道哪個課程沒有原始課程信息而讓與會者重新回到上面,因此引導您回到基於文檔的關鍵結構(但這只是我的觀點).....

相關問題