XForms: как привязать значение к атрибуту
Я работаю над дизайном формы XForm. Моя текущая форма выглядит примерно так:
<xforms:model>
<xforms:instance id="PhoneCallsSimple2" xmlns="">
<request>
<criterias relation="AND">
<criterias relation="OR">
<criteria name="CritCallStartDateLower" operator="GreaterOrEqual" model="CallStartDate" gui_display="From date"/>
<criteria name="CritCallStartDateUpper" operator="LessOrEqual" model="CallStartDate" gui_display="To date"/>
</criterias>
<criteria name="CritCallCustomerID" operator="Equal" model="CustomerID" gui_display="Customer ID"/>
<criteria name="CritCallCustomerLastName" operator="BeginWith" model="CustomerLastName" gui_display="Customer LastName"/>
</criterias>
</request>
</xforms:instance>
<xforms:bind id="bindCallStartDateLower" required="true()" type="xforms:date" nodeset="/request/criterias/criterias/criteria[@name='CritCallStartDateLower']"/>
<xforms:bind id="bindCallStartDateUpper" required="true()" type="xforms:date" nodeset="/request/criterias/criterias/criteria[@name='CritCallStartDateUpper']" constraint="(days-from-date(.) >= days-from-date(/request/criterias/criterias/criteria[@name='CritCallStartDateLower']))"/>
<xforms:bind id="bindCallCustomerID" required="false()" type="xforms:positiveInteger" nodeset="/request/criterias/criteria[@name='CritCallCustomerID']"/>
<xforms:bind id="bindCallCustomerLastName" required="false()" type="xforms:string" nodeset="/request/criterias/criteria[@name='CritCallCustomerLastName']"/>
<xforms:submission id="search" ref="/request" replace="none"/>
<xforms:submission id="order" ref="/request" replace="none"/>
<xforms:setvalue ev:event="xforms-model-construct-done" ref="/request/criterias/criterias/criteria[@name='CritCallStartDateLower']" value="days-to-date(days-from-date(local-date()) - 182) "/>
<xforms:setvalue ev:event="xforms-model-construct-done" ref="/request/criterias/criterias/criteria[@name='CritCallStartDateUpper']" value="days-to-date(days-from-date(local-date())) "/>
</xforms:model>
При отправке формы добавляются значения к критериям, и это выглядит так:
<criterias relation="AND">
<criterias relation="OR">
<criteria name="CritCallStartDateLower" operator="GreaterOrEqual" model="CallStartDate" gui_display="From date">value1</criteria>
<criteria name="CritCallStartDateUpper" operator="LessOrEqual" model="CallStartDate" gui_display="To date">value2</criteria>
</criterias>
<criteria name="CritCallCustomerID" operator="Equal" model="CustomerID" gui_display="Customer ID">value3</criteria>
<criteria name="CritCallCustomerLastName" operator="BeginWith" model="CustomerLastName" gui_display="Customer LastName"/>
</criterias>
Что мне нужно сделать, так это написать Xform, которая будет привязывать значение либо к атрибуту, либо к дочернему элементу в пределах критериев. Например:
<criterias relation="AND">
<criterias relation="OR">
<criteria name="CritCallStartDateLower" operator="GreaterOrEqual" model="CallStartDate" gui_display="From date" value="value1"></criteria>
<criteria name="CritCallStartDateUpper" operator="LessOrEqual" model="CallStartDate" gui_display="To date"><value>value2<value></criteria>
</criterias>
<criteria name="CritCallCustomerID" operator="Equal" model="CustomerID" gui_display="Customer ID"></criteria>
<criteria name="CritCallCustomerLastName" operator="BeginWith" model="CustomerLastName" gui_display="Customer LastName"/>
</criterias>
Любая помощь будет оценена, спасибо!
1 ответ
Решение
Вы могли бы использовать set-value
два раза, один для атрибутов, другой для элементов. Если атрибут или значение не найдены, ничего не произойдет.
<xforms:setvalue ev:event="xforms-model-construct-done" ref="/request/criterias/criterias/criteria[@name='CritCallStartDateUpper']/@value" value="here is the new value"/>
<xforms:setvalue ev:event="xforms-model-construct-done" ref="/request/criterias/criterias/criteria[@name='CritCallStartDateUpper']/value" value="here is the new value"/>