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

Тема в разделе "Lotus - Программирование", создана пользователем wowa, 30 июн 2010.

  1. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Добрый день.

    Создаю документ кодом. Вот основной кусок:
    Код (Text):
    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 не помогает, но секунды запомнило правильно.
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Попробуйте установить для поля тип Computed. Формулы полей Computed When Compose вычисляются при создании документа из УИ, а Вы создаёте документ в бэкэнде.
     
  3. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Возможно при пересчете возникает ошибка и очередь до поля CreationDate не доходит. Установи второй параметр в ComputeWithForm в True и проверь.
     
  4. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо. ДА и оно же где-то помнит нужные мне даже секунды
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Тогда создавайте документ с помощью notesUIWorkspace.ComposeDocument(...) или @Command([Compose]; ...). По-другому, имхо, не получится.
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Получится. Уже давно использую subform с cwc-полями и всё отлично работает при любом способе создания документа. Главное, чтобы ошибок не было

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Тогда другая версия. Поле находится в контролируемой секции, на редактирование которой у пользователя нет доступа. У меня в таком случае cwc поля не работали, а c — без проблем.
     
  8. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Действительно ошибка,
    Notes error: Cannot convert text to a number:
    Сейчас буду искать поле.
     
  9. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0

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

    Код (Text):
    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
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    В дизайнере найди все поля, что типом число, и погляди в какое какие данные попадают.
     
  11. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Поля на форме пересчитываются по порядку: сверху вниз, слева направо. Поэтому смотришь какие поля не создались. Поле с ошибкой находится раньше.

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    По-моему, всё-таки слева направо-сверху-вниз.
     
  13. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Да, так и есть. Неправильно написал.
     
  14. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    ComputeWithForm - ужасный метод.
    Мне религия не позволяет его использовать, только в исключительных случаях юзаю.
     
  15. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    Call docNewProposal.ComputeWithForm(True,False) - иначе не будет сопоставление типов полей

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    ;)
     
  17. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    это системный параметр, любой документ в лотусе содержит штампы времени, если не ошибаюсь зашито это все в ID или UNID
     
Загрузка...

Поделиться этой страницей