例: Responses property

次の 2 つのスクリプトは関連して機能し、ユーザーインターフェースで現在開いている文書とその返答文書 (返答への返答もすべて含めます) をフォルダに入れます。最初のスクリプトは、ユーザーがワークスペースの文書から実行できるフォームアクションスクリプトです。スクリプトは現在開いている文書に対応するディスク上の文書 doc を取得して、選択されたフォルダに配置します。その後にスクリプトは PutAllResponsesInFolder サブルーチンを呼び出します。

Sub Click(Source As Button)
  Dim workspace As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Dim doc As NotesDocument
  Dim choice As String
  Set uidoc = workspace.CurrentDocument
  Set doc = uidoc.Document
  choice = Inputbox( "Please enter a folder name:", _
  "Which folder?" )
  Call doc.PutInFolder( choice )
  Call PutAllResponsesInFolder( doc, choice )
End Sub

PutAllResponsesInFolder サブルーチンは親文書とフォルダ名を取得して、親文書の返答文書と返答の返答文書を指定されたフォルダに配置します。サブルーチンは、親文書への各返答文書を指定されたフォルダに配置します。サブルーチンはそれぞれの返答ごとに自分自身を呼び出し、各返答への返答文書もすべてフォルダに配置します。このような再帰的な動作により、ネストのレベルがどれほど深くても親文書のすべての子文書にアクセスできます。返答文書がなくなるとサブルーチンは終了します。

Sub PutAllResponsesInFolder _
( doc As NotesDocument, folderName As String )
  Dim collection As NotesDocumentCollection
  Dim currentResponse As NotesDocument
  Set collection = doc.Responses
  Set currentResponse = collection.GetFirstDocument
  ' Put immediate responses to doc into the folder
  ' If there are none, sub exits and returns to calling sub
  While Not ( currentResponse Is Nothing )
    Call currentResponse.PutInFolder( folderName )
    ' Recursive call to put immediate responses to 
    ' currentResponse in folder
    Call PutAllResponsesInFolder _
    ( currentResponse, folderName )
    Set currentResponse = collection.GetNextDocument _
    ( currentResponse )
  Wend
End Sub