2009年12月17日木曜日

文書リンクから非表示フィールドへアクセスする


フォームのプロパティで「印刷/転送/クリップボードへのコピーを不可」が有効な場合、そのフォームで作成した文書をプロパティで覗くと、各アイテムの値等がグレーアウトされます。
その状態ではスクロールもできないので、隠しフィールドにある値が確認できない、といったことがあります。
 
そこで、アイテムの値を簡単に確認できるものを作ってみました。
 
下記はフォーム上のホットスポットボタンに書いた Lotus Script です。
フォームにはこのボタンの他にリッチテキスト・フィールド "Body" があります。
 
ユーザーはこのリッチテキスト・フィールドへ対象文書のリンクを貼り付けた後、ボタンをクリックします。
すると文書内にある読者フィールドまたは作成者フィールドのアイテム名と値をステータスバーへ表示します。
 
Sub Click(Source As Button)
 Dim ws As New NotesUIWorkspace
 Dim db As New NotesDatabase("", "")
 Dim doc As NotesDocument, tdoc As NotesDocument
 Dim rti As NotesRichTextItem
 Dim rtnav As NotesRichTextNavigator
 Dim rtlink As NotesRichTextDocLink
 Dim DUMMYID As String, tmpType As String
 DUMMYID = String$(32, "0")

 Call ws.CurrentDocument.Refresh(True) '保存せずリンクへアクセスするための Refresh

 Set doc = ws.CurrentDocument.Document
 Set rti = doc.GetFirstItem("Body")
 Set rtnav = rti.CreateNavigator
 If rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
  Set rtlink = rtnav.GetElement
  If rtlink.DocUnID <> DUMMYID Then
   If db.OpenByReplicaID(rtlink.ServerHint, rtlink.DbReplicaID) Then
    Set tdoc = db.GetDocumentByUNID(rtlink.DocUnID)
    If Not (tdoc Is Nothing) Then
     Forall item In tdoc.Items
      If item.IsAuthors Or item.IsReaders Then
       If item.IsAuthors Then
        tmpType = "AUTHORS"
       Else
        tmpType = "READERS"
       End If
       Print "Item : " & item.Name & " , Type : " & tmpType & " , Value : " & item.Text
      End If
     End Forall
    End If
   End If
  End If
 End If
End Sub

上記では文書にあるすべてのアイテムのタイプを調べていますが、アイテム名がわかっている場合はフォーム上で指定できてもいいかもしれませんね。
 
まあ、結果をPrint 文で表示しているあたり、いいかげんに作ったことがバレバレですが....失礼。
 
上記フォームのフィールド SaveOptions へ "0" をセットしておくと、すんなりとフォームを閉じることができます。

0 件のコメント:

コメントを投稿