XForms: сложный расчет для привязки - PullRequest
3 голосов
/ 17 февраля 2012

Ищу возможность выполнять сложные расчеты для привязки.Дан следующий экземпляр:

<root>
  <appointments>
    <appointment><date>2012-01-01</date></appointment>
    <appointment><date>2012-01-03</date></appointment>
  </appointments>
  <weeks />
</root>

Узел weeks зависит от узлов appointment:

$weeks = 0
$week_begin = xs:date("1970-01-01")
for $appointment in //appointments/appoinment
  if # Check if $appointment is in new week
    $weeks = $weeks + 1
    $week_begin = # Do some more calculationx

Моя проблема в том, что я не знаю, куда "поместитьэти расчеты.Как видите, нам нужен цикл с переменными, который может хранить некоторую информацию между циклами цикла.Поэтому я оценил следующие параметры:

  1. xforms: переменная в сочетании с xforms: repeat => xforms: переменная внутри повторения не может записывать во "внешнюю" область видимости
  2. xforms: setvalue в сочетании с дополнительным экземпляром, который содержит временные переменные и xforms: repeat
  3. xforms: связывание с атрибутом Calculate => для циклов в xpath возможно, но без переменных

Любой совет, как подойти к этой проблеме?Спасибо!

1 Ответ

2 голосов
/ 18 февраля 2012

Вы можете попытаться реализовать вычисления в Javascript, которые срабатывают, если изменился набор узлов встреч.Если вы используете Orbeon Forms, вы можете использовать расширение xxforms:script.В вики Orbeon есть пример того, как установить значение экземпляра на основе вычисления javascript .

. Другим решением было бы полностью «экстернализировать» вычисления и создать небольшой веб-сервис (XQuery?) что бы вернуть результат расчета.Вы можете использовать механизм xforms:submit для предоставления этой услуги и доступа к ее результату.

...