Menu ▾ ▴

#10 Error in view - multiple filters on same field

open
5
2005-01-14
2005-01-14
No

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)
}
}

Discussion


Log in to post a comment.