あるデータベースに、別のデータベースに新しいドキュメントを作成するアクションがあります。新しいドキュメントを保存した直後に、(少なくとも) 元のドキュメントへのドキュメント リンクが新しいドキュメントに含まれていると、非常に便利です。
そのために、新しいドキュメントのフォームに計算された RT アイテムを作成し、スクリプトによって Querysave イベントにドキュメント リンクを挿入します。ただし、RT アイテムは常に空です。これを機能させるための基本的な手順は何ですか?
(注 8.5)
あるデータベースに、別のデータベースに新しいドキュメントを作成するアクションがあります。新しいドキュメントを保存した直後に、(少なくとも) 元のドキュメントへのドキュメント リンクが新しいドキュメントに含まれていると、非常に便利です。
そのために、新しいドキュメントのフォームに計算された RT アイテムを作成し、スクリプトによって Querysave イベントにドキュメント リンクを挿入します。ただし、RT アイテムは常に空です。これを機能させるための基本的な手順は何ですか?
(注 8.5)
を使用rtitem.AppendDocLink(doc, "Title")して、必要なドキュメント リンクを作成できます。
rtitem新しく作成されたドキュメントの RichText アイテムです。
doc新しいドキュメントを作成するためのボタンがある最初のデータベースで現在選択されているドキュメントです。
満足のいく解決策を得るには、少しの課題があります。新しいドキュメントを作成するボタンに次の行を入れると
...
Set docSelected = session.DocumentContext
Set docNew = dbTarget.CreateDocument()
Set rtitem = docNew.CreateRichTextItem("Doclink")
Call rtitem.AppendDocLink(docSelected, "Title")
Call docNew.Save(True, True) ' <--- that is necessary :(
...
Call workspace.EditDocument(True, docNew)
次に、新しいドキュメントにリンクを作成し、すぐに表示されます。ただし、新しいドキュメントを保存した場合にのみ機能します。ユーザーが保存せずにドキュメントを閉じただけでも、ドキュメントはデータベースに残るため、これはお勧めできません。
したがって、別の解決策を探す必要があります。
ユーザーが保存した後、新しいドキュメントがドキュメント リンクを作成するようにしましょう。このために、新しいドキュメントに、リンク ドキュメントのデータベースと UniversalID に関する情報を提供する必要があります。新しいドキュメントを作成するボタンでそれを行います
Set docNew = dbTarget.CreateDocument()
docNew.LinkDb = session.CurrentDatabase.FilePath
docNew.LinkUniversalID = session.DocumentContext.UniversalID
新しいドキュメントのフォームで、計算された RichText フィールド「Doclink」を作成します。フィールドにリンクを入力するのに適した時期はいつですか? 私が理解したように、Querysaveイベントは早すぎます。フィールド「Doclink」は、標準のドキュメント保存中に破損します。解決策は、それまで待っQuerycloseて、そこにリンクを設定することです。ただし、ユーザーがドキュメントを一度だけ保存した場合にのみ実行する必要があります。そのため、Querysaveイベントを監視し、ユーザーがドキュメントを保存したというフラグを設定する必要があります。リンクを作成するときQuerycloseに、フィールド「LinkDb」と「LinkUniversalID」を削除し、保存フラグが設定されていてドキュメントにフィールド「LinkDb」が含まれている場合は、ドキュメントを再度保存します。
フォームのコードは次のとおりです。
(Declarations)
Dim bSaved As Boolean
Sub Initialize
bSaved = False
End Sub
Sub Querysave(Source As Notesuidocument, Continue As Variant)
bSaved = True
End Sub
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If bSaved Then
Dim session As New NotesSession
Dim doc As NotesDocument
Dim dbLink As NotesDatabase
Dim docLink As NotesDocument
Dim rtitem As NotesRichTextItem
Set doc = Source.Document
If doc.HasItem("LinkDb") Then
Set dbLink = session.GetDatabase(doc.ParentDatabase.Server, doc.LinkDb(0), False)
Set docLink = dbLink.GetDocumentByUNID(doc.LinkUniversalID(0))
doc.RemoveItem("Doclink")
Set rtitem = doc.CreateRichTextItem("Doclink")
Call rtitem.AppendDocLink(docLink, "Link")
doc.RemoveItem("LinkDb")
doc.RemoveItem("LinkUniversalID")
Call doc.Save(True, True)
End If
End If
End Sub
ドキュメント リンクを追加する前に、RichText フィールドを削除して新しく作成することが重要です。