The view as it is replaces seach critaeria having same
field, even if they have different "op".
This could be annoying for searching thru ranges ("from"
x "to" y).
The purpose of this bug report is to propose a simple
solution to this.
In the view_setSearch() replace :
l_arrayRequestFields[l_xmlNodeFilter.getAttribute("field")]
with
l_arrayRequestFields[l_xmlNodeFilter.getAttribute("field")
+"_"+l_xmlNodeFilter.getAttribute("op")]
And then use "field"_"op" as a key for finding / replacing
a filter instead of simply "field"
Complete code is here (copy/paste in an editor). This
code has yet to be tested extensively :
// This version enables more than one filter on a same
field if they have different "op"
function view_setSearch2( p_strField, p_strValue,
p_strOp)
{
var l_xmlNodeInputRequest
var l_xmlNodeListFilters
var l_xmlNodeFilters
var l_xmlNodeFilter
var l_arrayRequestFields
var i
// build an array with existing filters
l\_arrayRequestFields = new Array\(\)
l\_xmlNodeInputRequest = xml\_selectSingleNode
(xtn_getSection("DATA"), "input-request")
l_xmlNodeListFilters = xml_getFirstChildElem
(l_xmlNodeInputRequest).getElementsByTagName("filter")
for( i=0; i<l_xmlNodeListFilters.length; i++)
{
l_xmlNodeFilter =
l_xmlNodeListFilters.item(i)
l_arrayRequestFields
[l_xmlNodeFilter.getAttribute("field")
+"_"+l_xmlNodeFilter.getAttribute("op")] = l_xmlNodeFilter
}
//Find the filters corresponding to the field and
the op.
l_xmlNodeFilter = l_arrayRequestFields
[p_strField+"_"+p_strOp]
if\(l\_xmlNodeFilter\) xml\_getFirstChildElem
(l_xmlNodeInputRequest).removeChild( l_xmlNodeFilter)
if(p_strValue!="")
{
// non empty search word : create or
set filter
l_xmlNodeFilter =
l_xmlNodeInputRequest.ownerDocument.createElement
( "filter")
l_xmlNodeFilter.setAttribute( "field",
p_strField)
l_xmlNodeFilter.appendChild(
l_xmlNodeInputRequest.ownerDocument.createCDATASec
tion(p_strValue))
xml_getFirstChildElem
(l_xmlNodeInputRequest).appendChild( l_xmlNodeFilter)
if\( p\_strOp\)
l_xmlNodeFilter.setAttribute("op",p_strOp)
}
}