例: BeginInsert method

次のエージェントは、(ユーザーの指定に応じて) アイテムの最初か最後に、または第 n 段落目の前か後にテキストを挿入します。

Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim beginningText As Variant, endText As Variant
Dim beforeText As Variant, afterText As Variant

Sub Initialize
  Set session = New NotesSession
  Set db = session.CurrentDatabase
  Set dc = db.UnprocessedDocuments
  If dc.Count = 0 Then
    Messagebox "No document selected",, "No doc"
    Exit Sub
  End If
  Set doc = dc.GetFirstDocument
  Set body = doc.GetFirstItem("Body")
  Set rtnav = body.CreateNavigator
  
  REM Get user command and parse
  If body.Text <> "" Then
    inp$ = Inputbox$("Beginning, End, Before n, or After n", _
    "Where do you want the new text?")
    If inp$ = "" Then Exit Sub
    inp$ = Lcase(inp$)  
    If Left(inp$, 9) = "beginning" Then
      beginningText = True
    Elseif Left(inp$, 3) = "end" Then
      endText = True
    Elseif Left(inp$, 7) = "before " Then
      nthStr$ = Right(inp$, Len(inp$) - 7)
      beforeText = True
    Elseif Left(inp$, 6) = "after " Then
      nthStr$ = Right(inp$, Len(inp$) - 6)
      afterText = True
    Else
      Messagebox inp$,, "Bad option"
      Exit Sub
    End If
    If beforeText Or afterText Then
      If Isnumeric(nthStr$) Then
        nth% = Cint(nthStr$)
      Else
        Messagebox nthStr$,, "Not numeric"
        Exit Sub
      End If
    End If
  End If
  
  REM Position navigator
  REM (not necessary for "end" or empty item)
  If beginningText Then
    Call rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)
  Elseif beforeText Or afterText Then
    If Not rtnav.FindNthElement(RTELEM_TYPE_TEXTPARAGRAPH, _
    nth%) Then
      Messagebox nth%,, "No paragraph at this position"
      Exit Sub
    End If
  End If
  
  REM Begin insert (not necessary for "end" or empty item)
  If afterText Then
    Call body.BeginInsert(rtnav, True)
  Elseif beginningText Or beforeText Then
    Call body.BeginInsert(rtnav)
  End If
  
  REM Get text from user and append
  it$ = Inputbox$("Enter the new text", "New text")
  If it$ = "" Then Exit Sub
  If endText Or afterText Then
    Call body.AddNewLine(1)
  End If
  Call body.AppendText(it$)
  If beginningText Or beforeText Then
    Call body.AddNewLine(1)
  End If
  
  REM End insert (not necessary for "end" or empty item)
  If beginningText Or beforeText Or afterText Then
    Call body.EndInsert
  End If
  
  Call doc.Save(True, True)
End Sub