Подмена параметра в методе Queryopen

  • Автор темы Автор темы Lariel
  • Дата начала Дата начала
Что-б отладчиком поймать было нельзя
Чего (кого) поймать? Я так понял, с помощью отладчика и было выяснено, что документ не тот, хотя не могу представить, как этого можно было добиться. Такое впечатление, что нам чего-то не договаривают.
А почему она рушится только ПОСЛЕ ПЕРЕЗАГРУЗКИ машины?
Ну, если база что-то меняет в ini-файле или где в других настройках/профилях, то вполне возможное поведение.
 
Код

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)

Print "isNewNote=", Source.Document.IsNewNote
Print "Isnewdoc=", Isnewdoc

End Sub


выводит:

isNewNote= true
Isnewdoc=false
 
Нормальное поведение, если документ создаётся в бэкэнде, а затем открывается в уи, т.е.
Код:
Set doc = New NotesDocument(db)
doc.Form = "MyForm"
Call workspace.EditDocument(True, doc)
как раз и приводит к указанному сочетанию.
doc.IsNewNote означает, что doc не сохранён в БД
uidoc.IsNewDoc означает, что документ открыт, а не создан посредством уи. Оба эти параметра = true только когда документ создаётся в уи, т.е. через Compose (Workspace.ComposeDocument или @Command([Compose]; ...)

Если на основании вышеизложенного Вы делали вывод о том, что происходит подмена документа, то глубоко заблуждались. Чтобы убедиться, что всё в порядке ориентируйтесь на unid. Перед открытием документа добавьте код Print doc.UniversalID, в Queryopen добавьте Print Source.Document.UniversalID. Должно быть одинаково.
 
Я там другое усмотрел:

UI-шный агент:

set uidoc = ws.CurrentDocument
set doc = uidoc.Document <- тут - обрабатываемый документ, тот, что надо
set db = doc.ParentDatabase <- а это уже НЕ ТА база, а почтовая

Это если отладчик запущен из под Author. С Designer всё Ок
 
Это если отладчик запущен из под Author. С Designer всё Ок
А если под автором без отладчика выполнить:
set uidoc = ws.CurrentDocument
set doc = uidoc.Document <- тут - обрабатываемый документ, тот, что надо
set db = doc.ParentDatabase <- а это уже НЕ ТА база, а почтовая
Print doc.ParentDatabase.ReplicaID
Print ws.CurrentDatabase.Database.ReplicaID
есть разница? Может отладчик просто не даёт доступ к базе пользователю с правами автора и подменяет той базой, к которой есть дизайнерские права? Правда раньше такого поведения не замечал.
 
отладчик просто не даёт доступ к базе пользователю с правами автора
насколько я знаю и пробовала - обычный отладчик лотусскрипта дает право запускать отладку под автором при открытом дизайне.
Другое дело, если на компе пользователя установлен какой-то хук, перехватывающий обращения к документу или БД - тогда хз :(
 
насколько я знаю и пробовала - обычный отладчик лотусскрипта дает право запускать отладку под автором при открытом дизайне.
Я в курсе, просто подумал, может с версии 8.5 эту дыру заткнули.
 
При чём здесь авторы?.. Разве что поговорить охота)))

Код:
set doc = uidoc.Document <- тут - обрабатываемый документ, тот, что надо
set db = doc.ParentDatabase <- а это уже НЕ ТА база, а почтовая
Это старо как мир; такое часто бывает, когда в одной базе вставлен фреймсет из другой или пытаешься открыть документ из другой базы (я об этом писал в самом начале). На событиях формы берём документ от Source, делаем его глобальным для формы (или помещаем его в библиотеку) и используем его из всех кнопок формы.

Добавлено:
насколько я знаю и пробовала - обычный отладчик лотусскрипта дает право запускать отладку под автором при открытом дизайне.
Я в курсе, просто подумал, может с версии 8.5 эту дыру заткнули.
Это не дырка, а фича. И не только под авторами, я спокойно запускаю отладчик и под Reader'ом. Как будете вылавливать ошибку, присущую определённому пользователю?
 
Код:
set doc = uidoc.Document <- тут - обрабатываемый документ, тот, что надо
set db = doc.ParentDatabase <- а это уже НЕ ТА база, а почтовая
Это старо как мир; такое часто бывает, когда в одной базе вставлен фреймсет из другой или пытаешься открыть документ из другой базы (я об этом писал в самом начале). На событиях формы берём документ от Source, делаем его глобальным для формы (или помещаем его в библиотеку) и используем его из всех кнопок формы.
1.Фрейм-сетов из др.баз там нет (разве что ссылка на док-т прислана по почте и прямо из ПЯ открывается)
2.События формы - не при делах. На всех кнопах/акциях там ui-агенты, которые получают текущий док-т и его контекст через uiWorkSpace. Просто, в отладчике обнаружили, что и у PostOpen-овского Source - та же фигня

Не к ночи помянут - "хук" :)
 
1.Фрейм-сетов из др.баз там нет (разве что ссылка на док-т прислана по почте и прямо из ПЯ открывается)
Ха! И тогда этот баг и вылазит! Было такое! Спасибо, что напомнили!
2.События формы - не при делах. На всех кнопах/акциях там ui-агенты, которые получают текущий док-т и его контекст через uiWorkSpace.
Причина не пользовать UI-агенты? :D


Добавлено:
И Source.Document.ParentDatabase возвращает на PostOpen почтовую базу?
У меня сейчас под 8-кой и Source.Document.ParentDatabase и NotesUIWorkspace.CurrentDocument.Document.ParentDatabase возвращают правильную базу! Неужели в 8-ке поправили? :)
 
Блин.. Вы читаете или нет??
А Вы?? :)
У Вас под каким клиентом данный трабл?
Добавлено:
У меня сейчас под 8-кой и Source.Document.ParentDatabase и NotesUIWorkspace.CurrentDocument.Document.ParentDatabase возвращают правильную базу! Неужели в 8-ке поправили? :(
 
OKEN, это я видел.. но мне ж не Lariel отвечает, потому и спрашиваю :)

Кстати,
проверил под 6-кой - тоже работает правильно,
думал, что это скомпиленый код под 8-кой, перекомпилил код открывающейся формы под 6-кой.. - всё равно работает!
может это что-то в почтовом шаблоне поправили? :( хотя вряд ли это зависит от шаблона...
В общем - не знаю.
 
Мы в соцсетях:

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