• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Создание документа кодом, не все поля создаются

  • Автор темы wowa
  • Дата начала
W

wowa

Добрый день.

Создаю документ кодом. Вот основной кусок:
Код:
Set docNewProposal = New NotesDocument ( db )
Call docNewProposal.ReplaceItemValue( "Form", "Opportunity" )
Call docNewProposal.ComputeWithForm(False,False)
Call docNewProposal.Save(True,False)

На форме есть субформа. На субформе есть поле "CreationDate" типа Дата (Computed When Compose), формула @Cteated
Дак вот, после сохранения я смотрю что это поле не создано, но при открытии документа, дата с точностью до секунды показывается и якобы уже хранится верная. Но при закрытии дока, в свойстве дока этого поля опять нет.
Если я потом редактирую вручную и сохраняю, то все ок, нужная дата и время.

Как мне сделать чтобы все было нормально, но кодом, чтобы это поле отображалось во вью.
Тупо создать это поле кодом - плохая идея, т.к. документ большой и не известно сколько таких подобных полей наберется.
Может тут проблема в том что поле в субформе, и ComputeWithForm не помогает, но секунды запомнило правильно.
 
N

nvyush

Попробуйте установить для поля тип Computed. Формулы полей Computed When Compose вычисляются при создании документа из УИ, а Вы создаёте документ в бэкэнде.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Возможно при пересчете возникает ошибка и очередь до поля CreationDate не доходит. Установи второй параметр в ComputeWithForm в True и проверь.
 
W

wowa

Попробуйте установить для поля тип Computed. Формулы полей Computed When Compose вычисляются при создании документа из УИ, а Вы создаёте документ в бэкэнде.

Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо. ДА и оно же где-то помнит нужные мне даже секунды
 
N

nvyush

Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо.
Тогда создавайте документ с помощью notesUIWorkspace.ComposeDocument(...) или @Command([Compose]; ...). По-другому, имхо, не получится.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Получится. Уже давно использую subform с cwc-полями и всё отлично работает при любом способе создания документа. Главное, чтобы ошибок не было

И так ли нужно это поле? Формула @Created в любой момент вернет время создания документа.
 
N

nvyush

Получится. Уже давно использую subform с cwc-полями и всё отлично работает при любом способе создания документа. Главное, чтобы ошибок не было
Тогда другая версия. Поле находится в контролируемой секции, на редактирование которой у пользователя нет доступа. У меня в таком случае cwc поля не работали, а c — без проблем.
 
W

wowa

Возможно при пересчете возникает ошибка и очередь до поля CreationDate не доходит. Установи второй параметр в ComputeWithForm в True и проверь.

Действительно ошибка,
Notes error: Cannot convert text to a number:
Сейчас буду искать поле.
 
W

wowa

Действительно ошибка,
Notes error: Cannot convert text to a number:
Сейчас буду искать поле.


Хм, кто-н знает, как лучше всего найти это поле?
Я думал я какое-то поле неправильно заполняю, а как оказалось не в этом, видимо кто-то до меня накасячил

Код:
Set docNewProposal = New NotesDocument ( db )
Call docNewProposal.ReplaceItemValue( "Form", "Opportunity" )
success = docNewProposal.ComputeWithForm( False, True ) '!!!!!!! - > СРАЗУ ЖЕ ИДЕТ В ОБРАБОТЧИК ОШИБОК...
If success Then
Call docNewProposal.Save( True, True )
End If
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Поля на форме пересчитываются по порядку: сверху вниз, слева направо. Поэтому смотришь какие поля не создались. Поле с ошибкой находится раньше.

Добавлено: Может значение CFD-поля используется в расчетах в других полях? Дело в том, что для ComputeWithForm CFD-полей не существует. Отсюда может быть ошибка.
 
O

Omh

ComputeWithForm - ужасный метод.
Мне религия не позволяет его использовать, только в исключительных случаях юзаю.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Call docNewProposal.ComputeWithForm(True,False) - иначе не будет сопоставление типов полей

Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо
мозги включаемс а то мне страшно за вас, упереться в то, что компютед ВСЕГДА меняет и устроили такие обсуждения ;)
@If(D1=""; @Cteated; D1)
 
Мы в соцсетях:

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