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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#1
Всем привет! :lovecodeby:

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Сталкивался. Создал вместо них C-поля. А в QuerySave поставил SaveToDisk = False.
 
13.03.2009
625
1
#3
Уже не в первый раз замечаю, что при некоторых обстоятельствах пропадают CFD-поля.
Причем, на форме значение как бы светится, а вот скриптом можно уже и не достать.
А обстоятельства-то какие? Могу например предположить, что в queryOpen документа их еще нет. Если так - то оно вполне логично.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
CFD поля присутствую только при УИ - вот и все обьстоятельства
попытка обновить фоновый док зависимый от CFD приведет к трагедии :lovecodeby:
 

TIA

:-)
Lotus team
15.05.2009
790
3
#5
Кто-нить сталкивался с таким поведением нотеса, как боролся?
Да. Но только со скрытыми CFD. После их отображения эффект пропадал. Глюк появился в одной из 7к. Заменяли на вычисление скриптом или COFU с SaveToDisk=False
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#6
А обстоятельства-то какие?
Если бы я знал какие у этого нотеса внутрях обстоятельства ))
Простой пример:
- новая форма;
- на форме 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?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#10
Ой, туплю. Я тоже так делал, но в каких-то случаях, не помню точно, оно глючило, отказался. Может покручу еще...

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#11
В принципе, можно использовать ws.CurrentDocument.Refresh(TRUE)
Говнотес в действии - uidoc.Refresh(TRUE) почему-то "забывает" обновлять формулы скрытия элементов формы, хотя uidoc.Refresh(FALSE) успешно с этим справляется.
зы: не забывайте uidoc.RefreshHideFormulas()

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#12
в квери клозе юзаю Source.FieldGetText
полагаю, что и просто uidoc.FieldGetText даст такойже эффект