Нажмите кнопку, чтобы скопировать документ в другой вид - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть два вида: Компьютер и Черновик . Я создаю кнопку в компьютерном представлении, и она предназначена для создания копии компьютерного документа в черновом режиме.

Ниже мой код кнопки. Когда я нажимаю кнопку, он говорит: «Переменная объекта не установлена»

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim view As NotesView

    Set db = session.CurrentDatabase
    Set view = db.GetView( "Draft" )
    Set doc = dc.GetFirstDocument()
    Set dc = db.AllDocuments
    While Not (doc Is Nothing)
        Call doc.CopyToDatabase(db)
        Set doc = dc.GetNextDocument(doc)
    Wend
End Sub

Кто-нибудь может мне помочь? И могу ли я спросить, нужно ли вставлять какую-либо формулу в черновое представление? Спасибо за любую помощь!

Обновить вопрос Я нашел проблему и исправил свой код. Но когда я нажимаю кнопку, он копирует весь документ и показывает в обоих представлениях. Как можно получить копию документа в черновике только выбранного документа? Например, только «Активный» документ? Спасибо!

1 Ответ

1 голос
/ 18 апреля 2019

Представления не "содержат" документы. Документы находятся в базе данных, и представления показывают выбранные документы, используя формулу SELECT. Если ваш SELECT соответствует всем документам, все документы будут отображаться. Эта формула решает, какие документы являются частью представления.

Если представление A содержит ваш документ, а представление B - нет, вам необходимо адаптировать формулу SELECT в представлении B, чтобы она соответствовала документу.

например. если вы хотите, чтобы ваш текущий документ отображался в представлении B, вы можете добавить значение к текущему документу, например DocumentViews, и установить для него значение «B», а для формулы выбора SELECT B - SELECT DocumentViews = «B».

Теперь, если вы хотите что-то сделать с документом, выбранным в данный момент в представлении, вы можете использовать свойство NotesDatabase.UnprocessedDocuments. Содержит список всех выбранных документов.

Dim ns As New NotesSession
Dim db As NotesDatabase
Set db= ns.CurrentDatabase
Dim dc As NotesDocumentCollection
Set dc= db.UnprocessedDocuments
Dim doc As NotesDocument
Set doc= dc.GetFirstDocument
Dim newdoc As NotesDocument
Do Until doc Is Nothing
    ' you might have to check the status of the current document before copying...
    Set newdoc= doc.CopyToDatabase(db)
    Call newdoc.ReplaceItemValue("Status", "Draft")
    Call newdoc.Save(True, False)
    Set doc= dc.GetNextDocument(doc)
Loop
...