Как заполнить данные из локальной базы данных в ОДК Опендатакит
Я работаю над модификацией ОДК Опендатакит. ODK использует XFORMS для получения входных данных и создает экземпляр XML с данными. Этот экземпляр затем загружается на сервер. То, чего я хочу добиться, - это автоматическое заполнение некоторых данных из локальной базы данных на основе входных данных из средства сбора данных. Например, если введен идентификатор, этот идентификатор проверяется из локальной базы данных, а если он существует, то некоторые предварительно определенные поля заполняются автоматически. Если идентификатор не существует, то ему выдается сообщение для проверки идентификатора.
Я получил предложение использовать виджет или другое приложение, которое проверяет запись из локальной базы данных, а затем возвращает значения полей, которые необходимо заполнить, в экземпляр XML ODK. Что я не получаю, это как передать значения в сеанс экземпляра в ODK?
1 ответ
Я не использовал ODK, но я мог бы помочь с некоторыми вещами XForms.
Передача данных XForms тесно связана с веб-сервисами RESTful XML. Из вашего описания я бы предположил, что шаблон взаимодействия будет выглядеть примерно так:
- Создать
input
поле для идентификатора. Сохраните это (и любые другие данные, которые должны перейти на сервер) в главномinstance
вашего XForm. - Создать
action
, привязанный либо к событиям "xforms-value-Changed" или "DOMFocusOut" в этом поле ввода (xforms-Value-Changed будет срабатывать при каждом изменении, в то время как DOMFocusOut будет срабатывать только тогда, когда пользователь фактически покидает поле - какое вы используете зависит от вашего предпочтения пользователя / серверные возможности). - Внутри этого
action
, запуститьsubmission
на сервер, используя основнойinstance
который содержит идентификатор, введенный в поле ввода. - Затем сервер должен ответить на этот запрос XML-документом, соответствующим схеме вашей формы, со всеми заполненными обязательными значениями.
- Есть
submission
установлен вreplace
главныйinstance
,
Это резюме очень высокого уровня, конечно.
Пример кода здесь:
http://en.wikibooks.org/wiki/XForms/Suggesting_Items
не совсем то , что вам нужно, но у него много одинаковых характеристик; введите текст в текстовое поле, отправьте этот текст в веб-службу, используйте ответ веб-службы для обновления модели в своей форме.