#lotus-notes #lotus
#lotus-notes #lotus
Вопрос:
У меня есть два представления: компьютер и черновик. Я создаю кнопку в представлении компьютера, и она предназначена для создания копии компьютерного документа в черновом представлении.
Ниже приведен мой код кнопки. Когда я нажал на кнопку, там было написано «Объектная переменная не установлена».
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:
Представления не «содержат» документы. Документы находятся в базе данных, а в представлениях отображаются выбранные документы с использованием формулы ВЫБОРА. Если выбранный вами вариант соответствует всем документам, будут показаны все документы. Эта формула определяет, какие документы являются частью представления.
Если представление A содержит ваш документ, а представление B — нет, вам необходимо адаптировать формулу ВЫБОРА в представлении B, чтобы она соответствовала документу.
Например, если вы хотите, чтобы ваш текущий документ отображался в представлении B, вы можете добавить значение к текущему документу, например DocumentViews, и установить для него значение «B», а также задать формулу ВЫБОРА представления B для ВЫБОРА 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
Комментарии:
1. Спасибо за ответ. Я знаю о формуле ВЫБОРА, но в моем случае я хочу использовать копирование документа. Я хочу создать копию документа и отправить в черновик. В режиме черновика я могу редактировать документ, не затрагивая компьютерный документ. После этого я сохраняю копию документа как живой документ в режиме просмотра на компьютере, а старое значение компьютера я установлю как неактивное и перейду в неактивный вид. Итак, это мой первый шаг. 🙂 Надеюсь, вы понимаете. Спасибо!
2. Я добавлю некоторый код в ответ, вы можете использовать его в качестве отправной точки. Как вы собираетесь отображать один документ в компьютерном представлении, а другой — в черновом? А затем переместить первый документ в Неактивное представление, а 2-й документ в Компьютерное представление?? Я полагаю, вам нужно какое-то поле статуса в документе и перемещать документы при изменении статуса. Непросто…
3. Эй, спасибо за ваш код. Я уже использую свой код. У меня все еще есть проблема. Как я могу отличить исходный документ от документа-копии? Потому что, когда я использую код, он будет отображать копию документа также в том же виде, что и два документа. Как я могу захотеть показать единственный исходный документ в режиме просмотра компьютера и удалить копию документа, в то время как в режиме черновика отображается только копия документа? Я не знаю, как провести различие между этими двумя документами.
4. Вот где появляется ваша формула выбора. Я добавил поле состояния, но вы можете использовать любые другие поля, чтобы отметить разницу между двумя документами. Не забывайте, что ваш новый документ может однажды стать старым документом, так что в базе данных имеется несколько копий исходного документа…
5. Нет. Вы должны перебирать необработанные документы. Приведенный выше код будет изменен…