Реализация табличной части документа

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#1
Здравствуйте все!
Возник следующий вопрос - каким образом лучше реализовать табличную часть документов.
Нужно следующее - чтобы пользователям рассылались задания на опрос, пользователи заполняли эти задания и отсылали обратно.
Задание на опрос имеет табличную часть, в которой пользователи могут изменять значения только в определённых столбцах, удалять строки запрещено. Пользователи могут добавлять строки, в которых они могут править значения любых столбцов.
Реализовал сию конструкцию на внедрённом виде и подчинённых документах, НО:
1) документов получилось много - задания на опрос для всех филиалов занимают порядка 100 000 доков;
2) вследствие п. 1 всё жутко тормозит;
3) редактирование непосредственно табличной части "некрасивое" и "неудобное" (внедрённый вид не даёт столько возможностей, сколько контрол типа dbgrid).
Работать всё должно из клиента Лотуса, веб-технологии не подходят.
Кто-нибудь знает, как такие вещи делаются в Лотусе по уму?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#3
значит уже не по уму, сокращайте, типизируйте и т.д.
В том-то и суть вопроса. Доков много из-за табличной части. Каждая строка - ответный документ. Чтобы их сократить, нужно табличную часть "засунуть" в сам документ (видимов РТ), но возникают следующие проблемы:
1) пользователь должен быть ограничен в правах редактировать только определённые поля табличной части;
2) пользователь не должен иметь возможности удалять строки;
3) пользователь должен иметь возможность добавлять строки и при этом редактировать любые поля в данных строках;
4) по окончании опроса данные должы выгружаться в РСУБД.
 

divankin

Senjor developer
13.08.2009
182
0
Москва
#4
Сделайте свой, типа контрол для редактирования строк. Пользователь пусть сможет редактировать только текущую строку. При этом у него буду кнопки: Добавить строку, удалить текущую строку, переместиться на одну строку вперед, переместиться на одну строку назад.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 438
351
homepage.mac.com
#5
яуж и не заню - советовать ли :blink:
Swing вам в руки
цепляйте ХМЛ либо генерите налету, отдавайте его свинговому окну (можно и стрингом)
и далее - работайте, по закрытию окна - возвращайте резалт (в док/доки/поля)
http://java.sun.com/docs/books/tutorial/ui...ents/table.html
есть экзампел, откель качал - не помню:
Посмотреть вложение sunSwing.zip

в догонку, делал схему и с подчиненными доками - 40 тыс. доков - тормозов нет (в формулах "ReCahe", где лукап нужен), людя работают кажный со своим срезом
 
#7
В том-то и суть вопроса. Доков много из-за табличной части. Каждая строка - ответный документ. Чтобы их сократить, нужно табличную часть "засунуть" в сам документ (видимов РТ), но возникают следующие проблемы:
1) пользователь должен быть ограничен в правах редактировать только определённые поля табличной части;
2) пользователь не должен иметь возможности удалять строки;
3) пользователь должен иметь возможность добавлять строки и при этом редактировать любые поля в данных строках;
4) по окончании опроса данные должы выгружаться в РСУБД.
Так и не понял, о чем конкретно идет речь.
- Чем является строка с точки зрения конечного пользователя?
- Можно ли привести аналогию с нелотусовыми элементами управления? Как бы эта задача решалась в ёкселе?
- Как пользователи привыкли решать эту задачу до LN( если она не нова )?
- Размер таблицы для одного пользователя можно оценить?
- Пользователь получает некую таблицу, в которой может поправить часть столбцов. Плюс он может добавить свои строки. На выходе имеем исправленную таблицу, которая отсылаеца обратно и обрабатываеца. Так?
Как вариант решения:
Пользователь получает документ с данными, необходимыми для отрисовки таблицы( в обычных полях, списками, вопщем как угодно. )
Отрисовку производим в компутед поле через pass-tru html. На этот html навешиваем ui для редактирования кликнутой строки и синхронизации введенных значений с данными в документе. типа клик на строке поднимает диалог с возможностью редактирования строки плюс навигацию (переход на след., предыдущую строки). Плюс, некий функционал для пакетного заполнения таблицы - клик по заголовку столбца. Перерисовка таблицы - переоткрытием документа, если нет долгоиграющих скриптов. Если база далеко - при переоткрытии данные можно кэшировать.
Защита исходных данных от редактирования в данном случае интерфейсная, но можно вывернуться, если сильно припрет.( в варианте одна строка - один документ защита скорее всего тоже интерфейсная? )
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#9
и всегда работал :blink: начиная с 6.х версий (в 5-ке jvm очстарая была)
Спасибо, попробую.

turumbay
В общем сейчас это вылилось в четырёхуровневую иерархию документов:
1 - задание на опрос (период опроса, срок представления результатов) - 1 док;
2 - задание на опрос для филиала (филиал, ответственный за опрос в филиале и т.д.) - порядка 30 доков;
3 - дилер (название, ответственный менеджер и т.д.) - сотни доков на филиал;
4 - торговая марка (название, объём продаж и т.д.) - десятки доков на дилера.
По сути менеджеры заполняют только объём продаж для заданных торговых марок и могут добавлять отсутствующие торговые марки. Редактирование строк сделал на событии представления inviewedit или открытием документа в форме. И так и так выглядит довольно коряво.
Задача в данной постановке новая. Раньше проводились подобные опросы с помощью Екселя, на нужные ячейки и листы ставили защиту, но защита почему-то слетала в ОпенОфисе (многие пользовали его) - в результате каждый заполнял как хотел и что хотел, свести воедино было затруднительно.
 
#10
защита ставится на "словарные значения" , чтоб не заводили клонов торговых марок и номенклатуры?
я правильно понимаю, что у манагеров по жизни все эти данные живут в каком-нить ёкселе, а табличное представление в лотусе им нужно для возможности сделать копи-паст из своего локального файла?
т.е. не проводится ли ручная работа по переносу данных, уже существующих в электронном формате в лотус? если так - то не проще скормить зверушке непосредственно эти данные, исключив ручной ввод?
 
K

K-Fire

Гость
#11
Хехе, а почему бы тогда не реализовать эту задачу полностью на Java? Данные можно хранить как угодно, например в XML, для репликации засовывать в лотус. На центральном сервере скидывать из лотуса в RDBMS. Т.е. лотус использовать исключительно как средства обмена данными между филиалами, все остальное на других технологиях :blink:
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#12
turumbay
У менеджеров изначально никаких локальных данных нет. Будут они создавать файлы или хранить данные на бумаге заказчика не интересует. Ему важно, чтобы менеджер забил информацию куда положено, а где не положено не мог ничего наковырять

K-Fire
О других технологиях задумывался, но кругозора пока не хватает. Была мысль генерить защищённые страницы в ёкселе, но в главном офисе нет информации по конкретным исполнителям (менеджерам) - их назначают ответственные в филиалах, к тому же есть проблема добавления строк на защищённых листах. Ну и сначала не был известен объём данных и в какой тормоз всё это выльется.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#13
Кто-нибудь, подскажите, плз, как прикрутить JTable на Лотусовую форму вместо внедрённого вида. Или хотя бы где почитать/что покурить :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 438
351
homepage.mac.com
#16
ябы не вкручивал аплетом, а вставил код в агента
Сергей Шабалин выкладывал базу, с примером - запроса к БД
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#17
ябы не вкручивал аплетом, а вставил код в агента
Сергей Шабалин выкладывал базу, с примером - запроса к БД
А как тогда JTable на форме нарисовать? Можно ссылку на базу, плз.

Попутно возник вопрос - а в чём лучше джава-кодить? Я скачал JDK и NetBeans. В jar-проекте NetBeans подключил notes.jar. Взял пример с
http://www.notesnet.ru/nn/notesnet.nsf/3a6...&forprinter
На строчке
private Container contentPane;
NetBeans ругается - не знает типа (класса) Container.
 
K

K-Fire

Гость
#18
Я ставил Eclipse, подключал ява-машину которая находится в папке Notes-клиента. Соответственно все работало и без подключений Notes.jar.

В примере awt.* подключено, должно находить Container. Попробуйте import java.awt.Container добавить напрямую.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#19
Я ставил Eclipse, подключал ява-машину которая находится в папке Notes-клиента. Соответственно все работало и без подключений Notes.jar.

В примере awt.* подключено, должно находить Container. Попробуйте import java.awt.Container добавить напрямую.
В 8.5 Eclipse прикручен - на нём можно клепать java-апплеты или нет?
 
K

K-Fire

Гость
#20
8.5. сделан на основе RCP Eclipse, это не полноценный IDE Eclipse.