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