1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Cfd-поля пропадают после обновления

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

  1. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    Всем привет! :lovecodeby:

    Уже не в первый раз замечаю, что при некоторых обстоятельствах пропадают CFD-поля.
    Причем, на форме значение как бы светится, а вот скриптом можно уже и не достать.
    Кто-нить сталкивался с таким поведением нотеса, как боролся?

    Спасибо заранее!
     
  2. Medevic

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

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Сталкивался. Создал вместо них C-поля. А в QuerySave поставил SaveToDisk = False.
     
  3. turumbay

    Репутация:
    0
    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    А обстоятельства-то какие? Могу например предположить, что в queryOpen документа их еще нет. Если так - то оно вполне логично.
     
  4. ToxaRat

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

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.195
    Симпатии:
    24
    CFD поля присутствую только при УИ - вот и все обьстоятельства
    попытка обновить фоновый док зависимый от CFD приведет к трагедии :lovecodeby:
     
  5. TIA

    TIA :-)
    Lotus team

    Репутация:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    1
    Да. Но только со скрытыми CFD. После их отображения эффект пропадал. Глюк появился в одной из 7к. Заменяли на вычисление скриптом или COFU с SaveToDisk=False
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    Если бы я знал какие у этого нотеса внутрях обстоятельства ))
    Простой пример:
    - новая форма;
    - на форме CFD-поле с каким-то значением;

    Експеримент:
    10- открываем сохраненный документ, либо создаем новый и сохраняем, чтобы в диалоге свойств документа были видны поля;
    20- идем в диалог свойств документа, смотрим наше CFD-поле, любуемся;
    30- закрываем диалог, нажимаем Ф9;
    40- идем в диалог свойств документа, ищем наше CFD-поле, любуемся его отсутствием;
    50- теперь можно разве что сохранить документ, при повторном обновлении по Ф9 поле не вернется.

    Теперь добавляем на форму кнопку А с кодом, например,
    Код:
    @StatusBar(@Text(@Now) + ": " + CFDField1)
    Повторяем експеримент:
    10-40
    50- теперь можно нажать кнопку А и увидим, что в панели появится правильное сообщение, и в диалоге свойств документа CFD-поле вновь будет видно;

    Теперь добавляем на форму кнопку Б с кодом, например,
    Код:
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument
    Set doc = ws.CurrentDocument.Document
    Print Now & ": " & doc.GetItemValue("CFDField1")(0)
    Повторяем експеримент:
    10-40
    50- теперь можно нажать кнопку Б и увидим, что в панели появится правильное сообщение, и в диалоге свойств документа CFD-поле вновь будет видно;

    Теперь добавляем на форму кнопку В с кодом, например,
    Код:
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument
    Call ws.CurrentDocument.Refresh(False)
    Set doc = ws.CurrentDocument.Document
    Print Now & ": " & doc.GetItemValue("CFDField1")(0)
    Повторяем експеримент:
    10-40
    50- теперь можно нажать кнопку В и увидим, что в панели появится сообщение, но значение CFD-поля НЕ считывается, и в диалоге свойств документа CFD-поле НЕ видно;
    60- снова жмем В, результат тот же;

    В принципе, можно использовать ws.CurrentDocument.Refresh(TRUE), но тогда придется следить, чтобы документ не сохранялся, этот метод удачно сохраняет документ при наличии SaveOptions = "1", если я не ошибаюсь и все варианты знаю.

    Но ws.CurrentDocument.Refresh(TRUE) & SaveOptions это уже workaround. А суть вопроса, почему пропадают CFD-поля при обновлении? :lovecodeby:

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

    Добавлено: ToxaRat, спасибо, ниче не понял, что ты хотел сказать :please:
    Естесственно, что CFD-поля работают только на УИ.

    Добавлено: TIA ,
    да-да-да! Я догадывался, что где-то в 7-ке впервые поймал такой глюк, но это было так давно, что я не мог вспомнить так ли это.
    На скрипт не могу перенести, я CFD-поле использую для скрытия, и скрипт тут не помощник.
    зы: в примере выше поле не скрыто и глючит.
    зы2: шо таке COFU?
     
  7. hosm

    hosm * so what *

    Репутация:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2.442
    Симпатии:
    9
    CWC?

    Добавлено: а у меня в голове как раз больше отложились глюки с компьютед полями... тогда мы еще извращались для пересчета с удалением полей через @deleteField, если помнишь =)
     
  8. TIA

    TIA :-)
    Lotus team

    Репутация:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    1
    Ну да. Сорри.
     
  9. nvyush

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Кое-где использую создание скриптом полей с SaveToDisk=False именно для скрытия (CFD-аналогов на форме нет). Работает.
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    Ой, туплю. Я тоже так делал, но в каких-то случаях, не помню точно, оно глючило, отказался. Может покручу еще...

    Ладно, обсуждение можно считать завершенным. Основной вывод - меня таки не глючит :KillMe:
    Но, если кому-то есть чего добавить, всегда пожалуйста.
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    Говнотес в действии - uidoc.Refresh(TRUE) почему-то "забывает" обновлять формулы скрытия элементов формы, хотя uidoc.Refresh(FALSE) успешно с этим справляется.
    зы: не забывайте uidoc.RefreshHideFormulas()

    Что я делаю не так? ;)
     
  12. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    3
    Регистрация:
    27 авг 2008
    Сообщения:
    6.406
    Симпатии:
    346
    в квери клозе юзаю Source.FieldGetText
    полагаю, что и просто uidoc.FieldGetText даст такойже эффект
     
Загрузка...

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