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

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

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

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

когда дочерний документ перестает быть респонсом после сохранения

  • Автор темы hosm
  • Дата начала
H

hosm

В базе создаются документы по форме "Document", создаются при клике по кнопке из любой другой базы открытого документа. Т.е. часть полей копируются в новый документ, документ сохраняется.
Все бы ничего, но потребовалось создавать не просто документы, но еще и в некоторых случаях респонсы. Разрулил это довольно просто: юзеру, который давит кнопку выдается запрос что делать, если респонс, выдают пиклист выбора документа родителя. И все бы ничего, документ создается, только не респонсом. При этом нужно создать документ по той же форме, что и родитель -"Document"
Проблема:
Если респонс сделан на той же форме, что и документ (у формы Type = Document), то после пересохранения респонса через UI $REF отвалится и документ перестанет быть респонсом.
Решение (автор Mihal, [post="92740"]отсюда[/post]):
Поле $RefOptions="1" позволяет игнорировать настройки типа формы - Document, Response и всё такое, что даст возможность сохранить дочерний документ пользователем при форме с Type=Document без потери поля $REF.

Код:
Set doc = collection.GetFirstDocument
Set NewDoc = dbNewDoc.CreateDocument
Call NewDoc.MakeResponse( doc )
Call NewDoc.ReplaceItemValue("Form", "Document")
Call NewDoc.ReplaceItemValue("$RefOptions", "1") 
' заполнение нужных полей ...
Call ws.EditDocument(True,NewDoc)
P.S. Код слегка подправлен. Исправлено на ReplaceItemValue, в оригинале был такой синтаксис: NewDoc.~$RefOptions="1"
(имхо, в хелпе описано про ~, но если кто не знает, указан пример краткой записи для подобных полей)
Есть об этом в теме link removed:
Ну я уже давненько ставлю на формы поле CFD поле $RefOptions с формулой @If(@IsAvailable($REF); "1"; ""), которое позволяет игнорировать респонсовость формы: т.е. пересохраннётый документ-респонс с Form Type = Document не перестаёт быть респонсом.
С этим полем я могу строить иерархии из документов с Form Type = Document без страха, что при пересохранении что-то сломается.
Т.е. у меня у всех форм в базе Form Type = Document.
Но при этом так же присутсвуют многоуровневые иерархии.
Заметка. Если конфликтный документ (а он является респонсом к неконфликтоному) пересохранить в UI, то он перестаёт быть респонсом.

Тема Описание оргструктуры предприятия также может кому-то помочь:
$refOptions забивает свойство формы Type и позволяет сохранять респонсные документы по форме с тайп Document и наоборот
Разместите cwd-поле $refOptions с формулой @If(@IsResponseDoc; "1"; "0")
в форме документа Подразделения (только не в подформе) - иначе при интерфейсном сохранении ответные документы станут главными (если тип формы - Document) или нотес будет ругаться при сохранении главных документов (если тип формы - Response)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
Из 2-й ссылки (как я делаю):
Что такое Form Type не равная Document я уже и забыл.
А я забыл, что такое Form Type РАВНАЯ Document :rolleyes:

Всё проще даже без поля $RefOptions.
Формы, по которым планируется создание ответов делаются типом Response, доки создаются методом CreateDocument - никаких проблем с пересохранением в UI, "отцеплением" и "прикреплением" по новой, и никаких лишних полей типа $RefOptions..
 
Мы в соцсетях:

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