Заполнение Полей

Antigo

Active member
16.02.2012
40
0
#1
Господа! Такая проблемка:
Мне нужно при создании или открытии документа перезаписать некоторые существующие в документе поля из других документов.
Если делаю в queryopen методом replaceitemvalue, то при создании документа не могу взять Source.Document, и, естественно replaceitemvalue не катит.
Если пытаюсь в postopen, то при создании все гут перезаписывается, но при открытии существующего документа поля не перезаписываются. Как быть?
 

afest

Well-known member
16.06.2009
78
0
#2
Проверь в каком режиме открывается док - read/edit, ну и refresh дока проверь, могет поле и изменяется, но показывает старые данные
 

savl

Lotus team
28.10.2011
2 131
102
#4
При создании нового - PostOpen, в конце Refresh UI-объекта.
Проверять, что документ новый вот так, гарантированно определит:
Код:
	Dim macro As Variant
macro = Evaluate({@NoteID},param)
If macro(0) <> {NT00000000} Then	
' To Do
end if
Если уже создан, запускать функцию на Queryopen, которая будет производить изменения.
Записывать на этом событии вот так:
Код:
Call source.Document.ReplaceItemValue("CurrResult",msgtext)
Refresh не делать.
Проверяю я там новый документ через:
Код:
If Not Isnewdoc then
Ошибки не выдает, но сомнения такая проверка у меня вызывает.
Не мешает убедиться, что больше нигде пересчет не вызывается.

У меня такое есть, именно через Queryopen, но Save я там не делаю, подсчет небольшой и время открытия примерно 10-12 секунд и данные должны меняться при каждом открытии документа ;)
 

Antigo

Active member
16.02.2012
40
0
#5
При создании нового - PostOpen, в конце Refresh UI-объекта.
Проверять, что документ новый вот так, гарантированно определит:
Код:
	Dim macro As Variant
macro = Evaluate({@NoteID},param)
If macro(0) <> {NT00000000} Then	
' To Do
end if
а почему в постопен не проверить навый док или нет через uidoc.IsNewDoc?
 

savl

Lotus team
28.10.2011
2 131
102
#6
если документ создан не через Compose, то uidoc.IsNewDoc будет false.
 

erdi

Well-known member
20.08.2008
265
17
#7
в Queryopen у меня такая конструкция

Код:
	Dim doc As NotesDocument
Set doc=Source.Document

If doc Is Nothing Then
If Not Source.IsNewDoc Then
код
End If
Else
If Not doc.IsNewNote Then	
код
End If
End If
и здесь уже неважно как был создан документ
 

savl

Lotus team
28.10.2011
2 131
102
#8
erdi
В Queryopen есть отдельный параметр события Isnewdoc
Boolean. Read-only. True indicates that the user is creating a new document. False indicates that the user is opening an existing document.
По сути тоже самое что и doc.IsNewNote
Впрочем, это дело вкуса на мой скромный взгляд.