Xpoint
   [напомнить пароль]

Сложные формы / XForms / DOM / XML / ?

Метки: [без меток]
2005-03-18 16:09:45 [обр] Михаил Евдокимов(0/1)[досье]

Приветствую!

Пришла необходимость создать сложную многоуровневую форму.
Если честно, я никогда с этим не работал. Почти каждый может создать обычную форму и потом ее обработать, но вот что касается таких форм, в которых одни поля зависят от значений других полей или же "просто" одни поля зависят от других, то с этим я пока не сталкивался да и как-то не думал. Соответственно в последние два дня это сплошной "брейнсторминг". Посему буду как всегда очень благодарен Вашим советам и мыслям по этому поводу.

Ближе к делу..

Нужно создать форму и ее обработчик.

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

Самый просто пример:

Вы живете с партнером вместе? Да | Нет
Если "да", то показываем поле "с какой даты вместе", а после перемещаемся на четвертый блок
Если "нет", пропускаем целый блок (в задании требуется его скрыть или же деактировать, типа disabled) и показываем третий блок

Блок — это своего рода шаг, или этап, или просто раздел. Форма может быть поделена на разделы, типа "ФИО", "контакты", "информация о партнере" и т.д. и т.п. Осложняется все это дело тем, что внутри этих разделов поля также могут быть зависимыми друг от друга.

Я немного поковырялся с XForms, но, насколько я понимаю, их поддержка реализована не во всех наиболее используемых на сегодняшний день браузерах, потому этот вариант отпадает.

Кроме того, подумал, что могут помочь в реализации данного задания XML/XSLT. Более того прикинул, что возможно придется создать некоторые модели, например, XML-файл с деревом элементов, которые должны быть показаны, а также деактивированы при выборе того или иного значения/элемента формы. Также, возможно, придется создать XML-файл со списком всех используемых в форме элементах (обычные и логические). Логические элементы — это те, от выбора значений которых может зависеть логика отображения остальных полей. Кроме того, потребуется создать один или несколько XSLT-шаблонов, для трансформации логики показа элементов в зависимости от условий.

Обработка же формы на мой скромный :) взгляд должна производиться по событию onblur или onmouseout в помеченном для проверки элементе. По идее в данном случае варианта два: с перезагрузкой страницы и без перезагрузки.

При перезагрузке страницы основную работу по рендерингу берет на себя XMLDOM/XSLT на стороне сервера.
Без перезагрузки страницы за обмен информацией с сервером отвечает, естественно, уже "избитый" на этом форуме объект аналогичный Microsoft.XMLDOM или он сам: на сервере проверяются условия для пройденного по форме пути и на клиент возвращается логика (XML или что-то еще) отображения следующих ветвей структуры. Клиент же с помощью JavaScript/DOM/CSS "перерисовывает" элементы, т.к. делает какие-то участки формы доступными, а какие-то наоборот, недоступными.

Что касается серверной части, то в качестве языка разработки должен использоваться ASP 3.0.

Вот.. С теорией более-менее понятно и непонятно.. :) Непонятно только то, думаю ли я в правильном направлении над реализацией поставленной задачи?

Буду очень рад, если эта тема будет раскрыта на этом форуме.
Заранее благодарен ВАМ за мысли!

С уважением,
Михаил

спустя 1 час 40 минут [обр] Андрей Брайнин(0/127)[досье]
Маленький взгляд в другом направлении:
Если на все следующие вопросы вы можете уверенно ответить "да", то для вашей задачи отлично подойдет продукт MS InfoPath
  1. Это внутрикорпоративное приложение?
  2. В качестве клиента этого приложения не обязательно использовать браузер?
  3. Есть возможность установить на машины клиентов InfoPath из состава MS Office 2003 Enterprise Edition?
спустя 7 минут [обр] Михаил Евдокимов(0/1)[досье]
Андрей, это решение именно для Интернета. Требование клиента: поддержка основных используемых браузеров, правда перечислены только IE и FF 1.0. Правда, для IE указана версия 5.0, но это можно смело переводить на 5.5. :)
спустя 37 минут [обр] Андрей Брайнин(0/127)[досье]
Михаил Евдокимов[досье] эх, жаль! эта пиблуда очень здорово подходит для решения подобных задач в Интранет.
спустя 1 минуту [обр] Михаил Евдокимов(0/1)[досье]
Тем не менее, спасибо, Андрес, за ссылку — попробую что-нибудь оттуда выловить, хотя бы идеи. :)
спустя 1 день 18 часов [обр] Михаил Евдокимов(0/1)[досье]
Неужели больше никто с обработкой таких форм не сталкивался? Может хотя бы мысли есть? :)
спустя 1 день [обр] Михаил Евдокимов(0/1)[досье]
Интересно, а возможен вообще "перерендеринг" формы без перезагрузки страницы? :)
спустя 2 дня 13 часов [обр] Денис Бесков-Доронин aka Cybrarian(3/3)[досье]
Михаил Евдокимов[досье] XMLHTTPRequest копали?
спустя 15 часов [обр] Михаил Евдокимов(0/1)[досье]
Копал, но у меня вопрос конкретно не об этом объекте, т.к. с ним, похоже, все ясно, а именно о перерендеринге страницы после получения данных через XMLHTTPRequest.
спустя 1 месяц 5 дней [обр] Михаил Евдокимов(0/1)[досье]
В общем решил делать несколько по-другому, с помощью серверного XSLT для реализации ререндеринга отдельных форм, если в них есть зависимость полей друг от друга. :) В то же время, проходя какой-то этап заполнения, данные сохраняются/обновляются в промежуточный XML-буфер, что позволяет нам постоянно знать, какие поля заполнены, т.е. какие поля реально существуют (после ререндеринга). По крайней мере на данном этапе более понятно, что и как должно работать. Еще раз спасибо всем откликнувшимся! :)
Powered by POEM™ Engine Copyright © 2002-2005