Using gwt 2.3 and smartclient 2.5 nightly. I am having problems with the query that is generated by smartclient when a listgrid is set up to use a multiple select item for one of it's listgrid fields. Here is the data source file:
Here is the console output:
Here is where I set the list grid properties:
Here is where I set the multiple select items:
That is all I do with the list grid. How can I fix this? I tried looking at the showcase example, but I'm not doing anything different here.
Code:
<DataSource ID="ADataSource" dataFormat="iscServer" serverType="sql"
dataSourceVersion="1" dbName="Oracle" tableName="P">
<fields>
<field name="P_TYPE_NAME" type="text" length="30" title="P Type Name">
<nativeName>Name</nativeName>
<tableName>P_TYPE</tableName>
</field>
<field name="S_TIMESTAMP" type="datetime" title="S Time"/>
<field name="P_T_ID" type="float"/>
<field name="P_ID" type="float" title="P ID" primaryKey="true"/>
<field name="Lat" type="float" title="Lat"/>
<field name="Mode" type="text" length="20" title="Mode"/>
<field name="VALUE" type="float">
<table>Value</table>
<tableName>P_A</tableName>
</field>
<field name="C_type" type="text" length="10" title="C type">
<tableName>P_TYPE</tableName>
</field>
<field name="NAME" type="text" length="40" title="A">
<tableName>P_A_TYPE</tableName>
</field>
<field name="B_number" type="float" title="B">
<tableName>I_B</tableName>
</field>
<field name="I_N" type="text" length="10" title="I">
<tableName>I_B</tableName>
</field>
</fields>
<operationBindings>
<OperationBinding>
<operationType>fetch</operationType>
<tableClause>P, P_A_TYPE,
P_A, P_TYPE, I_B</tableClause>
<whereClause>P.P_ID = P_A.P_ID AND
P_A.P_A_TYPE_ID =
P_A_TYPE.P_A_TYPE_ID AND
P_TYPE.P_T_ID = P.P_T_ID AND
P_TYPE.I_B_ID = I_B.I_B_ID AND
(P_A.VALUE > P_A_TYPE.MAX_THRESHOLD OR
P_A.VALUE < P_A_TYPE.MAX_THRESHOLD) AND
($defaultWhereClause)
</whereClause>
</OperationBinding>
</operationBindings>
<generatedBy>SC_SNAPSHOT-2011-09-15/PowerEdition Deployment 2011-09-15</generatedBy>
</DataSource>
Code:
=== 2011-10-10 16:03:02,733 [0-14] INFO RequestContext - URL: '/myapplication/sc/IDACall', User-Agent: 'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.20) Gecko/20110803 Firefox/3.6.20': Moz (Gecko) with Accept-Encoding header
=== 2011-10-10 16:03:02,846 [0-14] DEBUG XML - Parsed XML from (in memory stream): 111ms
=== 2011-10-10 16:03:02,865 [0-14] DEBUG RPCManager - Processing 1 requests.
=== 2011-10-10 16:03:02,870 [0-14] DEBUG RPCManager - Request #1 (DSRequest) payload: {
criteria:{
operator:"and",
_constructor:"AdvancedCriteria",
criteria:[
{
fieldName:"P_T_NAME",
operator:"equals",
value:[
"Apples",
"Pears",
"Oranges"
],
_constructor:"AdvancedCriteria"
}
]
},
operationConfig:{
dataSource:"ADataSource",
operationType:"fetch",
textMatchStyle:"substring"
},
startRow:0,
endRow:75,
componentId:"isc_ListGrid_0",
appID:"builtinApplication",
operation:"ADataSource_fetch",
oldValues:{
operator:"and",
_constructor:"AdvancedCriteria",
criteria:[
{
fieldName:"P_T_NAME",
operator:"equals",
value:[
"Apples",
"Pears",
"Oranges"
],
_constructor:"AdvancedCriteria"
}
]
}
}
=== 2011-10-10 16:03:02,871 [0-14] INFO IDACall - Performing 1 operation(s)
=== 2011-10-10 16:03:02,871 [0-14] DEBUG AppBase - [builtinApplication.ADataSource_fetch] No userTypes defined, allowing anyone access to all operations for this application
=== 2011-10-10 16:03:02,872 [0-14] DEBUG AppBase - [builtinApplication.ADataSource_fetch] No public zero-argument method named '_ADataSource_fetch' found, performing generic datasource operation
=== 2011-10-10 16:03:02,872 [0-14] INFO SQLDataSource - [builtinApplication.ADataSource_fetch] Performing fetch operation with
criteria: {operator:"and",_constructor:"AdvancedCriteria",criteria:[{fieldName:"P_T_NAME",operator:"equals",value:["apples ","pears","oranges"],_constructor:"AdvancedCriteria"}]} values: {operator:"and",_constructor:"AdvancedCriteria",criteria:[{fieldName:"P_T_NAME",operator:"equals",value:["apples ","pears","oranges"],_constructor:"AdvancedCriteria"}]}
=== 2011-10-10 16:03:02,873 [0-14] INFO SQLDataSource - [builtinApplication.ADataSource_fetch] derived query: SELECT $defaultSelectClause FROM P, P_A_TYPE,
P_A, P_T, I_B WHERE P.P_ID = P_A.P_ID AND
P_A.P_A_TYPE_ID =
P_A_TYPE.P_A_TYPE_ID AND
P_T.P_T_ID = P.P_T_ID AND
P_T.I_B_ID = I_B.I_B_ID AND
(P_A.VALUE > P_A_TYPE.MAX_THRESHOLD OR
P_A.VALUE < P_A_TYPE.MAX_THRESHOLD) AND
($defaultWhereClause)
=== 2011-10-10 16:03:02,877 [0-14] DEBUG SQLDataSource - [builtinApplication.ADataSource_fetch] Executing row count query: SELECT COUNT(*) FROM P, P_A_TYPE,
P_A, P_T, I_B WHERE P.P_ID = P_A.P_ID AND
P_A.P_A_TYPE_ID =
P_A_TYPE.P_A_TYPE_ID AND
P_T.P_T_ID = P.P_T_ID AND
P_T.I_B_ID = I_B.I_B_ID AND
(P_A.VALUE > P_A_TYPE.MAX_THRESHOLD OR
P_A.VALUE < P_A_TYPE.MAX_THRESHOLD) AND
($defaultWhereClause)
=== 2011-10-10 16:03:02,879 [0-14] DEBUG SQLDataSource - [builtinApplication.ADataSource_fetch] Eval'd row count query: SELECT COUNT(*) FROM P, P_A_TYPE,
P_A, P_T, I_B WHERE P.P_ID = P_A.P_ID AND
P_A.P_A_TYPE_ID =
P_A_TYPE.P_A_TYPE_ID AND
P_T.P_T_ID = P.P_T_ID AND
P_T.I_B_ID = I_B.I_B_ID AND
(P_A.VALUE > P_A_TYPE.MAX_THRESHOLD OR
P_A.VALUE < P_A_TYPE.MAX_THRESHOLD) AND
(((P_T.Name = '[apples , pears, oranges]' AND P_T.Name IS NOT NULL)))
Code:
protected void setListGridProperties(String aDataSourceName)
{
// set the properties of the list grid
theListGrid.setWidth100();
theListGrid.setHeight100();
theListGridDataSource = DataSource.get(aDataSourceName);
if(theListGridDataSource != null)
{
theListGrid.setDataSource(theListGridDataSource);
}
// set some properties for the list grid
theListGrid.setAutoFetchData(true);
theListGrid.setShowFilterEditor(true);
theListGrid.setAllowFilterExpressions(true);
// get all the fields from the data source and add them to the
// list grid so we can create multiple select items for the
// fields that have value maps.
ArrayList<ListGridField> fieldList = new ArrayList<ListGridField>();
for(String s : theListGridDataSource.getFieldNames())
{
fieldList.add(new ListGridField(s));
}
ListGridField []fieldArray = new ListGridField[fieldList.size()];
fieldList.toArray(fieldArray);
theListGrid.setFields(fieldArray);
}
Code:
protected void createMultipleSelectItemForListGridField(String aFieldName,
String aDataSourceName)
{
// set the value maps for the fields that have a fixed number
// of possible values
ListGridField aField = theListGrid.getField(aFieldName);
aField.setOptionDataSource(DataSource.get(aDataSourceName));
aField.setAutoFetchDisplayMap(true);
// create the select item that will be used by the list grid field
SelectItem anItem = new SelectItem();
anItem.setMultiple(true);
aField.setFilterEditorProperties(anItem);
aField.setFilterEditorProperties(anItem);
}
Comment