Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Java: внутри файла MS Excel 2007. Часть четвёртая   В публикуемой сегодня части статьи заканчивается описание процедур загрузки электронной таблицы и начинается описание самого интересного - каким образом получить данные, хранящиеся в ячейках таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть третья   В предлагаемой вниманию читателя третьей части статьи о структуре файла электронной таблицы Microsoft Excel формата 2007 речь идёт о коде Java, "разархивирующем" файловый поток и формирующем объекты, с которыми предстоит взаимодействовать при дальнейшей обработке данных электронной таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть вторая   В настоящем материале автор постарается систематизировать свои знания о том, как устроено хранение данных электронной таблицы, и презентовать небольшую Java-библиотеку, предоставляющую возможность чтения данных и заполнения файла электронной таблицы Microsoft Excel
Шаблоны и примеры Читать статью
 


Советы

Главная   Библиотека   Советы

Создание диалогового окна (третья часть)

Николай Норкин,
Вятские Информационные Технологии, Киров
Часть первая >>>
Часть вторая >>>

Решение четвертое
Задача усложняется ввиду того, что результаты отбора снова (по сравнению с третьим решением) показываются в списковом поле List2View. Обновление документа, требуемое для обновления списка выбора этого поля, невозможно вызвать @-командой @Command([ViewRefreshFields]) (успешно применяемой в первом и втором решениях) или ее скриптовым аналогом Call notesUIDocument.Refresh в событии PostRecalc. При компиляции программы возникает ошибка, связанная с недопустимостью "рекурсивного" вызова события обновления документа - пересчета полей
К счастью, удается обмануть компилятор, вызывая сохранение документа, что влечет за собой его обновление. Размещение в форме поля SaveOptions со значением "0" препятствует реальному сохранению документа из интерфейса или интерфейсного объекта (но не сохраняйте бэкэндовый объект документа!)
Вместе с тем, уход в бесконечную рекурсию становится необходимо обработать вручную
Для обработки рекурсии вводится глобальная переменная формы forDialog:
Dim doRefresh

Значение переменной перед вызовом метода сохранения документа устанавливается в True, после вызова - в False. Первое, что следует проверить в коде обработки события PostRecalc - значение переменной
А вот, собственно, и код события (жирным выделены строки, отличающие его от кода третьего решения):
Sub Postrecalc(Source As Notesuidocument)
Dim item As NotesItem
Dim curvalue As Variant
Dim value As Variant
Dim res As Variant

If doRefresh Then
doRefresh = False ' флаг можно снимать здесь
Exit Sub
End If

If uidoc.CurrentField = "List1View" then
curvalue = Evaluate(|@Trim(@Replace(List1Value; List2; ""))|, curdoc)
If curvalue(0) = "" Then ' нового элемента не выбрано, следует проверить список на удаление элемента (снятие галки)
curvalue = Evaluate(|@Trim(@Replace(List2; List1Value; ""))|, curdoc)
If curvalue(0) = "" Then Exit Sub
' curvalue содержит удаленный элемент списка
Set item = curdoc.GetFirstItem("List2")
value = item.Values
res = ArrayGetIndex(value, curvalue(0))
If IsNull(res) Then Exit Sub
value(res) = ""
value = FullTrim(value)
Else ' curvalue содержит добавленный элемент списка
Set item = curdoc.GetFirstItem("List2")
value = item.Values
If value(0) = "" Then
value = curvalue
Else
value = ArrayAppend(value, curvalue)
End If
End If
item.Values = value
doRefresh = True
Call uidoc.Save ' реальному сохранению документа препятствует наличие поля SaveOptions со значением "0"
doRefresh = False ' флаг можно снимать и здесь
End If
End Sub

Продолжение темы, поднятой в материале, во многом будет зависеть от откликов читателей

Читайте также:
Java-апплет для визуализации графических объектов. Новая версия апплета от Михаила Чолокова поддерживает работу с графическими файлами формата TIFF >>>
Java-апплет: альтернатива встроенному представлению >>>
 
  Опубликовано — 11/26/2003 |    

Alexander, 21.03.2006:
Спасибо очень познавательный материал. Хотелось бы увидеть пример кода, выполняющий все тоже самое в диалоговом окне, но применительно для полей типа RichText. Который бы обновлял диалог после вложения файла. (Вложение производится с помощью лотус скрипт).



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Lotus notes и ЭЦП
29.09.2017 17:16:14
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
 
© LOGOSPHERE.RU