• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Antigo
  • Дата начала
A

Antigo

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

afest

Проверь в каком режиме открывается док - read/edit, ну и refresh дока проверь, могет поле и изменяется, но показывает старые данные
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
При создании нового - 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 секунд и данные должны меняться при каждом открытии документа ;)
 
A

Antigo

При создании нового - 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 597
310
BIT
179
если документ создан не через Compose, то uidoc.IsNewDoc будет false.
 

erdi

Green Team
20.08.2008
264
17
BIT
0
в 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 597
310
BIT
179
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
Впрочем, это дело вкуса на мой скромный взгляд.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!