динамические веб-формы

Я разрабатываю веб-приложение, которое позволяет писать отчеты и просматривать их в Интернете. Эти отчеты будут иметь структуру типичного школьного отчета или годового отчета об оценке сотрудников. Я хотел бы, чтобы пользователь мог настроить структуру своего отчета. Например, одной школе может потребоваться отчет в формате

Subject   Comment       Score
-----------------------------
English   He sucks      20% 
Maths     He rocks      88%
Science   About average 70%

в то время как другой может хотеть

Subject   Grade
---------------
English     A
Maths       B
Science     C

То, что я ищу, - это способ для каждой школы указать формат своих отчетов - возможно, какая-то библиотека для создания форм JavaScript. Такую библиотеку можно использовать на странице, которая позволяет пользователям создавать форму, которая будет использоваться в качестве шаблона для их отчетов.

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

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

Привет, Дон


person Dónal    schedule 23.12.2009    source источник
comment
На каких конечных пользователей вы ориентируетесь?   -  person Jeff Beck    schedule 28.12.2009
comment
Конечными пользователями будут обычные люди, то есть не техническая аудитория.   -  person Dónal    schedule 29.12.2009
comment
Что бы вы предпочли — хостинговое решение или программное обеспечение, которое вы можете настроить и установить на своем собственном сервере?   -  person avernet    schedule 31.12.2009
comment
Я хочу интегрировать это в приложение Grails, поэтому в идеале мне нужен подключаемый модуль Grails или компонент/библиотека Java.   -  person Dónal    schedule 31.12.2009
comment
Вы пытаетесь создать инструмент, который только выводит (отчеты IE), или вы пытаетесь создать инструмент, который позволяет конечным пользователям создавать формы, которые кто-то заполняет?   -  person Jeff Beck    schedule 02.01.2010
comment
@Jeff — инструмент, который позволяет конечным пользователям создавать формы, которые кто-то заполняет.   -  person Dónal    schedule 02.01.2010


Ответы (7)


Очень хороший конструктор форм на основе XForms (LGPL) http://www.orbeon.com/

Вы можете посмотреть демонстрацию их конструктора форм здесь: http://www.orbeon.com/ops/fr/orbeon/builder/summary/

person Eran Medan    schedule 27.12.2009
comment
Демонстрация кажется чрезвычайно сложной! - person AntonioCS; 27.12.2009
comment
Я не вижу, как это действительно поможет строить отчеты, это больше похоже на ввод данных. - person Jeff Beck; 02.01.2010

Я согласен с комментариями Джеффа Бека, а также заметил следующее.

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

Приведенные выше решения также кажутся более сложными, чем требует ваша проблема. MooTools, Dojo и т. д. кажутся излишними. XForms и XSLT тем более. Да, они будут работать и дадут вам много дополнительных функций, но нужен ли вам уровень сложности и проблемы отладки/сопровождения/обучения, связанные с этими дополнительными функциями?

Ваш обычный преподаватель или бизнес-пользователь, вероятно, имеет базовое представление о том, как вводить и сохранять файлы в Excel. Если вы можете научить их, как сохранять в формате CSV и загружать форму, или, что еще лучше, установить макрос, который будет сохранять в CSV и публиковать его на вашем веб-сайте, то это, вероятно, единственное обучение, которое им понадобится. Чтобы получить семантику, вы можете добавить немного больше обучения и сделать так, чтобы первая строка отчета была именами столбцов, а вторая строка была типом столбца. Это не элегантно, но, как отмечает Джефф, пользователи, возможно, с техническими проблемами, легко их примут.

На стороне сервера я бы рекомендовал следующий стек:

Веб-сервер => node.js (возможно, с использованием Chain — github.com/hassox/chain)

Хранилище данных => Redis (и node-redis)

Шаблоны => Haml-js (github.com/creationix/haml-js)

Разбор CSV => См. http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/ и обязательно используйте исправленную версию, указанную в комментариях (для запятых в кавычках).

Ваши более технически подкованные пользователи могут настроить HAML без ущерба для безопасности, а HAML довольно прост после небольшого обучения: этот HAML...

 %body
.profile
  .left.column
    #date= print_date()
    #address= current_user.address
  .right.column
    #email= current_user.email
    #bio= current_user.bio

производит...

<div class="profile">
  <div class="left column">
     <div id="date">Thursday, October 8, 2009</div>
     <div id="address">Richardson, TX</div>
  </div>
  <div class="right column">
     <div id="email">[email protected]</div>
     <div id="bio">Experienced software professional...</div>
  </div>
</div>
person Bill Barnhill    schedule 30.12.2009
comment
Извините за перепутанные ссылки на github, я новичок в этом, поэтому нет репутации. - person Bill Barnhill; 31.12.2009

Прагматическим подходом будет использование функции электронной таблицы Google, называемой формами. , (платные) услуги от wufoo или JotForm.

person Zoran Regvart    schedule 26.12.2009

Я бы предложил использовать:

  • вики-движок или конвертер простого текста в HTML, такой как Markdown, чтобы ваши пользователи могли настраивать предоставленные вами шаблоны
  • библиотека шаблонов HTML для вставки данных с использованием определенного шаблона

Для конвертера HTML вы можете использовать MarkDown Джона Грубера (на perl) на стороне сервера, или перенос Javascript от Джона Фрейзера, Showdown.

Для шаблонов HTML доступно множество библиотек Javascript, в зависимости от выбранной вами среды:

person Eric Bréchemier    schedule 27.12.2009

Я отвечаю за XSLTForms, и мне кажется, что это хороший кандидат на то, что вы хотите сделать.

Возможности XSLTForms превосходят возможности спецификации XForms 1.1: XSLT на стороне клиента, SVG и другие.

Динамические формы можно разрабатывать с помощью XForms, и, если этого недостаточно для вашего приложения, XSLTForms может интегрировать необходимые расширения.

person Alain Couthures    schedule 23.12.2009
comment
Ален, этот ответ в порядке, поскольку это ответ на прямой вопрос, и вы раскрыли свою принадлежность к XSLTForms. Однако мы не разрешаем подписи и не одобряем публикации, которые являются рекламой. - person Jeff Atwood; 28.12.2009

Должно быть легко создать в Smalltalk с помощью Seaside. У вас есть WATableReport с WATableColumns. Просто создайте простой редактор, в котором каждая школа может определить эти столбцы. Я не уверен, какое отношение к этому имеют javascript или XForms. Насколько я знаю, XForms в настоящее время мертв, если вы не можете прописать браузер.

person Stephan Eggermont    schedule 28.12.2009

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

скорее упростите вашу систему для ВАС, чтобы добавлять новые отчеты, в этом случае клиент отправляет вам pdf / excel, показывающий формат, который им нужен, и вы можете быстро создать новый отчет.

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

person Dapeng    schedule 31.12.2009