XForms:绑定的复杂计算

时间:2012-02-17 13:22:29

标签: xquery orbeon xforms

我正在寻找为绑定执行复杂计算的可能性。给出以下实例:

<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 =&gt; xforms:重复内部的变量无法写入“外部”范围
  2. xforms:setvalue与保存临时变量和xforms的额外实例相结合:repeat
  3. xforms:bind with calculate attribute =&gt;可以使用xpath中的for循环,但没有变量
  4. 有任何建议如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

如果约会节点集已更改,您可以尝试在Javascript中实现计算。如果您使用的是Orbeon Forms,则可以使用xxforms:script扩展名。 Orbeon wiki有一个example how to set an instance value based on a javascript calculation

另一个解决方案是完全“外部化”计算并创建一个可以返回计算结果的小型Web服务(XQuery?)。您可以使用xforms:submit机制来提供该服务并访问其结果。