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. Который бы обновлял диалог после вложения файла. (Вложение производится с помощью лотус скрипт). |
|
|
Последнее на форуме |
 |
|
 |
|
|