the general idea is like this:

If (False)  //create sample data
ds.xFieldInfo.all().drop()

$exFieldInfo:=ds.xFieldInfo.new()
$exFieldInfo.TableIDRef:=Table(->[Table_1])
$exFieldInfo.FieldID:=Field(->[Table_1]Field_2)
$exFieldInfo.save()

$exFieldInfo:=ds.xFieldInfo.new()
$exFieldInfo.TableIDRef:=Table(->[Table_1])
$exFieldInfo.FieldID:=Field(->[Table_1]Field_3)
$exFieldInfo.save()

$exFieldInfo:=ds.xFieldInfo.new()
$exFieldInfo.TableIDRef:=Table(->[Table_1])
$exFieldInfo.FieldID:=Field(->[Table_1]Field_4)
$exFieldInfo.save()
End if

vtxtSearch1:="a"
vtxtSearch2:="b"
vtxtSearch3:="c"

$esxFieldInfo:=ds.xFieldInfo.all()

$count:=0
$criteria:=New collection
$params:=New object("attributes";New object;"parameters";New object)
For each ($exFieldInfo;$esxFieldInfo)
$count:=$count+1
$parameter:="vtxtSearch"+String($count)
$searchptr:=Get pointer($parameter)
If (Value type($searchptr->)=Is text)
If ($searchptr->#"")
$attribute:=Field name($exFieldInfo.TableIDRef;$exFieldInfo.FieldID)
$params.attributes[$attribute]:=$attribute
$params.parameters[$parameter]:=$searchptr->
$criterium:=":"+$attribute+" == :"+$parameter
$criteria.push($criterium)
End if
End if
End for each

vptrCurrentTable:=->[Table_1]

$es:=ds[Table name(vptrCurrentTable)].query($criteria.join(" and ");$params)

---

when you call query(),

$criteria would contain

[:Field_2 == :vtxtSearch1,:Field_3 == :vtxtSearch2,:Field_4 == :vtxtSearch3]

$params would contain

{attributes:{Field_2:Field_2,Field_3:Field_3,Field_4:Field_4},parameters:{vtxtSearch1:a,vtxtSearch2:b,vtxtSearch3:c}}

---

for more info see:

https://doc.4d.com/4Dv18/4D/18.4/dataClassquery.305-5233999.en.html
**********************************************************************
4D Internet Users Group (4D iNUG)
New Forum: https://discuss.4D.com
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to