我在一个数据库中有一个操作,它将在另一个数据库中创建一个新文档。如果(至少)新文档在保存新文档后立即包含指向原始文档的文档链接,那将非常方便。
为此,我在新文档的表单上创建一个计算的RT项目,并通过脚本在Querysave事件中插入一个doc链接。但是RT项目总是空的。让这个工作的基本步骤是什么?
(注释8.5)
答案 0 :(得分: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字段并创建新字段非常重要。
答案 1 :(得分:1)
一个选项是将NotesDocumentUNID,数据库路径和旧文档中的服务器保存在新文档的三个字段中。
然后在新文档的设计中创建一个按钮,在这两个字段中打开旧数据库中的旧文档。
创建新文档
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim oldDB As NotesDatabase
Dim oldDoc As NotesDocument
Dim newDoc As NotesDocument
Dim newDB As NotesDatabase
Set oldDB = session.CurrentDatabase
Set oldDoc = workspace.CurrentDocument.Document
Set newDB = session.GetDatabase("SERVER", "FILE")
Set newdoc =newdb.CreateDocument
newdoc.oldDocUNID= olddoc.UniversalID
newdoc.oldDBpath=oldDB.FilePath
newdoc.oldDBServer = oldDB.Server
Call newdoc.save(True,False,True)
创建按钮以打开oldDoc
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim newdoc As notesdocument
Dim oldDB As notesdatabase
Dim oldDoc As notesdocument
Set newdoc = workspace.CurrentDocument.Document
Set oldDB = session.GetDatabase(newdoc.oldDBServer(0),newdoc.oldDBpath(0))
Set oldDoc = oldDB.GetDocumentByUNID(newDoc.oldDocUNID(0))
Call workspace.EditDocument(True,oldDoc)
End Sub
DocLink选项
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim oldDB As NotesDatabase
Dim oldDoc As NotesDocument
Dim newDoc As NotesDocument
Dim newDB As NotesDatabase
Dim rtitem As NotesRichTextItem
Set oldDB = session.CurrentDatabase
Set oldDoc = workspace.CurrentDocument.Document
Set newDB = session.GetDatabase("SERVER", "FILE")
Set newdoc =newdb.CreateDocument
Set rtitem = newdoc.CreateRichTextItem("body")
Call rtitem.AppendDocLink(olddoc, "title")
Call newdoc.save(True,False,True)