My testcase:
This code normally works, (.setValue(523) correctly selects the user with f_schueler_id=523 and the name (f_name) is displayed).
However, when extending the DataSource and injecting a criteria value, nothing is displayed:
table.ds.xml
TestDataSource:
Executing the same testcase now doesn't show any value, and the DSRequests/Responses are very strange:
DSRequest:
DSResponse:
There *IS* a row with f_schueler_id=523 and f_mandant=1, so this should fetch the same row as before.
Log:
WHERE '0'='1' ????????????????????????
Nothing is special about the table used:
Using smartGWT 4.1p power ( v9.1p_2014-10-09/PowerEdition Deployment ) with MSSQL 2014.
Code:
public class TestingModule implements EntryPoint { private MultiComboBoxItem userSelectItem; @Override public void onModuleLoad() { // //////////////////////////////////////////////////////////////////////////// DynamicForm userForm = new DynamicForm(); userSelectItem = new MultiComboBoxItem(); userSelectItem.setOptionDataSource(DataSource.get("table")); userSelectItem.setAutoFetchData(true); userSelectItem.setWidth("100%"); userSelectItem.setLayoutStyle(MultiComboBoxLayoutStyle.FLOW); userSelectItem.setValueField("f_schueler_id"); userSelectItem.setDisplayField("f_name"); userSelectItem.setTitle("table"); userSelectItem.setAlign(Alignment.LEFT); userSelectItem.setTitleAlign(Alignment.LEFT); userSelectItem.setRequired(true); userSelectItem.setValue(523); userForm.setFields(userSelectItem); userForm.setWidth100(); final VStack layout = new VStack(10); layout.setWidth(500); layout.setMembers(userForm); layout.draw(); } }
However, when extending the DataSource and injecting a criteria value, nothing is displayed:
table.ds.xml
Code:
<DataSource ID="table" serverType="sql" tableName="t_schueler" serverConstructor="de.mks_infofabrik.kids.server.TestDataSource" > <fields> <field name="f_schueler_id" type="sequence" primaryKey="true" /> <field name="f_name" type="text" /> <field name="f_mandant" type="integer" /> </fields> </DataSource>
Code:
public class TestDataSource extends SQLDataSource { @Override public DSResponse executeFetch(DSRequest req) throws Exception { AdvancedCriteria currentCriteria = req.getAdvancedCriteria(); AdvancedCriteria criteriaToUse = new AdvancedCriteria( DefaultOperators.And, new Criterion[] { currentCriteria.asCriterion(), new SimpleCriterion("f_mandant", DefaultOperators.Equals, 1) }); req.setAdvancedCriteria(criteriaToUse); DSResponse response = super.executeFetch(req); return response; } }
DSRequest:
Code:
{ dataSource:"table", operationType:"fetch", componentId:"isc_DynamicForm_0", data:{ f_schueler_id:[ 523 ] }, textMatchStyle:"exact", callback:{ target:[MultiComboBoxItem ID:isc_MultiComboBoxItem_1 name:isc_MultiComboBoxItem_0], methodName:"fetchMissingValueReply" }, showPrompt:false, oldValues:{ f_schueler_id:[ 523 ] }, requestId:"table$6270", internalClientContext:{ dataValue:{ "0":523, Class:"Array", localeStringFormatter:"toString" }, filterLocally:{ } }, fallbackToEval:false, componentContext:"isc_MultiComboBoxItem_0", bypassCache:true }
Code:
[ { affectedRows:0, data:[ ], endRow:0, invalidateCache:false, isDSResponse:true, operationType:"fetch", queueStatus:0, startRow:0, status:0, totalRows:0 } ]
Log:
Code:
=== 2014-10-24 01:23:32,488 [c-39] DEBUG SQLDriver - [builtinApplication.table_fetch] About to execute SQL query in 'SQLSERVER' using connection '436418955' === 2014-10-24 01:23:32,488 [c-39] INFO SQLDriver - [builtinApplication.table_fetch] Executing SQL query on 'SQLSERVER': SELECT t_schueler.f_schueler_id, t_schueler.f_name, t_schueler.f_mandant FROM t_schueler WHERE ((('0'='1')) AND (t_schueler.f_mandant = 1 AND t_schueler.f_mandant IS NOT NULL))
Nothing is special about the table used:
Code:
CREATE TABLE [dbo].[t_schueler]( [f_schueler_id] [int] IDENTITY(1,1) NOT NULL, [f_name] [nvarchar](40) NOT NULL, [f_mandant] tinyint not null);
Comment