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

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

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

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

Убрать привязку документ-родитель - документ-ответ

  • Автор темы FixeR
  • Дата начала
O

Omh

Не, я стараюсь делать документы так, что бы и при создании через композ всё было красиво.
Т.е. что бы при создании и через композ и через CreateDocument работало максимально одинаково.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
Только нужно помнить, что в данном случае в QuerySave будет Source.IsNewDoc = True, соответственно проверять нужно Source.Document.IsNewNote
А о минусах можете рассказать?
В кратце минусы - противоположность плусов)) Но главное это то, что "свидетели врали и путались в показаниях" (с) :) Если создать Compose'ом, а потом не сохраняя переоткрыть док, допустим для обновления ричтекста, то IsNewNote правильно вернёт True, а IsNewDoc облажается. Люди для этого что-то мудрят с прописывание каких-то промежуточных флагов док, что документ, типо, не новый, если на QO и PO есть какие-либо действия только для нового документа... короче, IMHO, всё это геморрой.
IsNewDoc стараюсь не использовать вообще. Если всё анализировать по IsNewNote и создавать док с помощью CreateDocument, то общий функционал можно заточить на IsNewNote и всё будет работать корректно + этот общий функционал становится доступным на QO форм/подформ.

Вот ещё немножко из разряда "недостатков" (из моей личной БЗ):
Тема: -28363 Err - User-defined error

В лог (методом NotesLog.LogError) эта ошибка записывается как "Error (4294938933)".

Причины: документ создаётся методом NotesUIWorkspace.ComposeDocument(), но не может открыться на экране; вызывающий скрипт генерирует эту ошибку.

Ситуации и возможные решения:

1. На QO создаваемого документа Continue устанавливается в False (допустим на QO вызывался диалог и в нём нажали "Отмена").
Решение: культурно обработать эту ошибку по On Error -28363 Resume Next не получается - на этапе выполнения возвращается Err=13 (Type mismatch), поэтому для данного случая нужно в скрипте после метки общей обработки игнорировать эту ошибку.

2. При создании документа в форме установлены галки "Наследовать значения полей из веделенного документа..."
2.а). Курсор установлен не на документе, а на категории.
Решения:
- проверять в скрипте, выделен ли документ или нет;
- проще всего - включить в виде галку "Evaluate actions for every document change" и скрывать действия, где есть такой код, если курсор установлен не на документе.
2.б). Курсор установлен на документе, но в выделенном документе есть вычисляемое поле, которое неверно вычислилось, и в нём вместо нормальных значений записано сообщение об ошибке "Error...". Часто такое бывает на вычисляемых AUHTORS/READERS-полях.
Решение:
1). Откорректировать формулу поля на форме.
2). Написать скрипт, который находит документы, в поле которых содержится сообщение об ошибке; очистить эти поля и вызвать пересчёт полей формы по исправленной формуле с помощью NotesDocument.ComputeWithForm(), сохранить документ NotesDocument.Save(False, False), проверить результат работы обоих методов.

[quote post='155754' date='15:12:2009, 10:23 ']Кстати, UNID доступен всегда, в отличие от Noteid[/quote]Точно :) :D

Кстати, не вижу проблем/противопоказаний использования $RefOptions — оно всё равно CFD и в доке не сохраняется/память не занимает.
Противопоказаний нет, это наверное дело вкуса. Я не люблю лишнее, если можно без него обойтись; об этом поле ещё помнить нужно...
 
K

K-Fire

А я люблю хранить рефы не в поле $REF, а своих, и затем использовать DEFAULT $REF=myField во вьюшках.

Тогда все формы типа Document, и всякие разнообразные проблемы с $REF меня не колышат :)

Плюс можно хранить в одном доке несколько рефов на другие, т.е. множественные деревья наследования.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
K-Fire, это классно. Но хочется, чтобы NotesDocument.Responses работало. Хоть иногда))
Меня вот здесь "забанили" :rolleyes:
Голосуйте "ЗА" - я тогда полностью согласен! :)
 
I

iki

Лично я использую $RefOptions и form type = document. имх самый удобный способ не требует никакого шаманства при создании и прикреплении\откреплении доков.

пс. для проверки новый ли документ лучше всгео юзать
If Implode (Evaluate ({@NoteID}, gl_doc)) = "NT00000000" Then - 100% проверка при всех возможных способах создания
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
для проверки новый ли документ лучше всгео юзать
If Implode (Evaluate ({@NoteID}, gl_doc)) = "NT00000000" Then - 100% проверка при всех возможных способах создания
Это аналог IsNewNote. В документе, созданном с помощью Compose, на QO этот код работать не будет (gl_doc как-то ещё получить нужно, а он равен Nothing), потому вся универсальность (в общих функциях) накрывается медным тазом. Т.е. как раз важен именно метод создания документа.
А вообще вариант интересный :rolleyes:

to All
Единственный недостаток CreateDocument (с которым трудно смириться :) ) - это то, что @IsNewDoc не работает в формулах скрытия; но я вместо этого использую !@IsAvailable($UpdatedBy), хотя здесь можно использовать ту же проверку: @NoteID="NT00000000".
 
N

nvyush

Это аналог IsNewNote. В документе, созданном с помощью Compose, на QO этот код работать не будет (gl_doc как-то ещё получить нужно, а он равен Nothing), потому вся универсальность (в общих функциях) накрывается медным тазом. Т.е. как раз важен именно метод создания документа.
А вообще вариант интересный :rolleyes:

to All
Единственный недостаток CreateDocument (с которым трудно смириться :) ) - это то, что @IsNewDoc не работает в формулах скрытия; но я вместо этого использую !@IsAvailable($UpdatedBy), хотя здесь можно использовать ту же проверку: @NoteID="NT00000000".
Если универсальность — священная корова, то !@IsAvailable($UpdatedBy) плохая проверка, т.к. не будет правильно работать в анонимных формах (поле $UpdatedBy отсутствует по определению).
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
Если универсальность — священная корова, то !@IsAvailable($UpdatedBy) плохая проверка, т.к. не будет правильно работать в анонимных формах (поле $UpdatedBy отсутствует по определению).
Плохая ещё и потому, что оно появляется только после переоткрытия документа, а дёргать программно из-за такой чепухи не очень хорошо...
Потому я и повысил рейтинг iki за отличную идею :rolleyes: /жаль, что тут смайликов нет "рукопожатие" и "палец вверх"/
 
T

TIA

VladSh
Сразу скажу, что создание через CreateDocument-EditDocument мне нравится и часто использую. Но надо всегда взвешивать плюсы и минусы решения. А минусы, помимо IsNewDoc мне известны такие:

1. Не работают UI-примочки при создании документа, такие как "Formulas inherit values from selected document" и "Inherit entire selected document into rich text field"
2. Не работает создание документа из меню "Create\...", когда во вьюшке нет документов.
3. Cложно через меню "Create\..." отличить, когда надо создать документ первого, когда более нижнего уровня и требуется дополнительная обработка в событиях формы, что должно не конфликтовать с нашей операцией создания документа (CreateDocument-EditDocument)
4. Необходимо специальным образом прописывать имя формы
5. Необходимо специальным образом устанавливать респонсное отношение.
6. Не работает @InheritedDocumentUniqueID
7. Параметр Isnewdoc в QO тоже False

Имхо, были ещё изощрённые ошибки, но сейчас не вспомню.
 
K

K-Fire

K-Fire, это классно. Но хочется, чтобы NotesDocument.Responses работало. Хоть иногда))
Меня вот здесь "забанили" :rolleyes:
Голосуйте "ЗА" - я тогда полностью согласен! :)
IdeaJam бесполезный сайт. Большинство самых очевидных улучшений висит там уже больше 2х лет и IBM не чешется чтобы их реализовать (ну разве что кроме LS-редактора нового). Вместо этого они бросают своих криворуких индусов и китайцев реализовывать XPages и другие не особо полезные идеи. Я уже давно бросил надеятся что из лотуса получится нормальное средство разработки.

Сорри за оффтоп.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
TIA
Ок, я отвечу уголками на каждый пункт, так будет более сжато.

> 2, 3.
Не использую меню Create, ни какие-либо другие, т.к. пользователям трудно запомнить куда надо идти. Простой принцип - однообразность: если действие относится к СЭД - все работают из Action Bar'ов, если надо использовать функциональность самого клиента - идут в меню. Иногда использую меню для специфических действий, например запуск агентов чисто для разработчика/админа.

> 4. Необходимо специальным образом прописывать имя формы
В функциии классов передаётся имя формы, оно там вглубине и прописывается.
Для документов, созданных Compose, когда документ новый, для доступа внутри формы приходится явно создавать поле Form с именем формы в значении по умолчанию.

> 5. Необходимо специальным образом устанавливать респонсное отношение.
NotesDocument.MakeResponse, по моему это не сложно - всё на классах, где всё один раз прописано и действует везде.

> 1. Не работают UI-примочки при создании документа, такие как "Formulas inherit values from selected document" и "Inherit entire selected document into rich text field"
Не использую их, т.к. это источник очень неприятных глюков (писал выше). Всё на общих библах. + ещё картинки (логотип и всякое такое) можно впихнуть в ричтекст до открытия, и всё будет корректно отображаться. О5 же весь функционал зашит в классах.

> 6. Не работает @InheritedDocumentUniqueID
Задумался... не припоминаю ни одного случая, где бы это понадобилось.

> 7. Параметр Isnewdoc в QO тоже False
Всегда используется IsNewNote.

В общем получается - о5 же личные предпочтения :rolleyes: Но выработаны они разными точками отсчёта.
Так что тут "у каждого своя правда".

Добавлено:
IdeaJam бесполезный сайт. Большинство самых очевидных улучшений висит там уже больше 2х лет и IBM не чешется чтобы их реализовать (ну разве что кроме LS-редактора нового).
Это больше для очистки совести - просто надо высказаться :)

Вместо этого они бросают своих криворуких индусов и китайцев реализовывать XPages и другие не особо полезные идеи.
'Не_особая_полезность' XPages - это ещё вопрос. Думаю, всё будет зависеть от конечной реализации. Но уже сейчас мне кажется это интересным.

Я уже давно бросил надеятся что из лотуса получится нормальное средство разработки.
Я тоже бросил, но 8.5.1 очень отличается в лучшую сторону (сравниваю с 6.5.1, на котором раньше сидел). Конечно много багов в Дизайнере, но это можно пережить и, думаю, поправят. Мне в LS не хватает сниппетов, а так очень даже ничего :)
 
T

TIA

VladSh, я прекрасно представляю методы обхода минусов для CreateDocument-EditDocument, в том числе и метод "не использую" :rolleyes: Но и указанные минусы Compose, тоже легко обходятся. Потому и говорю, что для принятия решения о выборе того или иного способа необходимо взвесить плюсы и минусы обоих. Не всегда разработчику может быть доступен выбор, например, исходя из того же принципа "однообразности", который Вы упомянули. Скажем, достаточно того, чтобы пользователи привыкли создавать документы через меню и выбор у разработчика ограничится.

Вобщем, я лишь уточняю (для потомков наверно), что следующие формулировки не точны.

Единственный недостаток CreateDocument (с которым трудно смириться smile.gif ) - это то, что @IsNewDoc не работает в формулах скрытия;
Ведь не единственный же, не так ли?

В том-то вся и прелесть, что работает абсолютно для любых типов!
Работает, но с некоторыми ограничениями (меню Create и т.п.). И "просто так" Compose не заменишь, нужны дополнительные корректировки.

никаких проблем с пересохранением в UI, "отцеплением" и "прикреплением"
Проблем никаких, но прибавляется других. Мелких, но всё же...

Если всё анализировать по IsNewNote и создавать док с помощью CreateDocument, то общий функционал можно заточить на IsNewNote и всё будет работать корректно
"Всё" работать не будет.


А в ситуации, в которой работаете Вы (см. пост 31), я бы, наверно, тоже через CreateDocumetn документы всегда создавал.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
Вобщем, я лишь уточняю (для потомков наверно), что следующие формулировки не точны.

VladSh сказал(а):
Единственный недостаток CreateDocument (с которым трудно смириться smile.gif ) - это то, что @IsNewDoc не работает в формулах скрытия;
Ведь не единственный же, не так ли?
Конечно же хотел сказать "единственный недостаток" ДЛЯ МЕНЯ, т.е. для той схемы, по которой работаю, т.к. всё остальное не используется.
Выразился излишне категорично) Всё верно.

Если Вы не против давайте на "ты" :rolleyes:
 
Мы в соцсетях:

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