1

あるデータベースに、別のデータベースに新しいドキュメントを作成するアクションがあります。新しいドキュメントを保存した直後に、(少なくとも) 元のドキュメントへのドキュメント リンクが新しいドキュメントに含まれていると、非常に便利です。

そのために、新しいドキュメントのフォームに計算された RT アイテムを作成し、スクリプトによって Querysave イベントにドキュメント リンクを挿入します。ただし、RT アイテムは常に空です。これを機能させるための基本的な手順は何ですか?

(注 8.5)

4

2 に答える 2

2

を使用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 フィールドを削除して新しく作成することが重要です。

于 2013-09-12T14:50:42.757 に答える