Hi Isomorphic,
recently (~1 month ago) I found a problem with outputs and criteria on a field that is not in outputs. It wasn't important to us back then, but I wanted to create a testcase anyway.
I did so now (in v12.0p_2019-01-17), but did not succeed so far, so no need to look into it closely for you right now. I just wanted to ask if you can imagine something here could not work together (a join for a field not in outputs but in criteria not getting put into the "list of fields necessary for a query" and therefore no join is generated and therefore no criteria on that field are possible ('1' = '1' in the SQL-statement)).
This is my testcase so far (not showing an issue):
BuiltInDS.java:
employees.ds.xml:
Best regards
Blama
recently (~1 month ago) I found a problem with outputs and criteria on a field that is not in outputs. It wasn't important to us back then, but I wanted to create a testcase anyway.
I did so now (in v12.0p_2019-01-17), but did not succeed so far, so no need to look into it closely for you right now. I just wanted to ask if you can imagine something here could not work together (a join for a field not in outputs but in criteria not getting put into the "list of fields necessary for a query" and therefore no join is generated and therefore no criteria on that field are possible ('1' = '1' in the SQL-statement)).
This is my testcase so far (not showing an issue):
BuiltInDS.java:
Code:
package com.smartgwt.sample.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.Version; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.data.AdvancedCriteria; import com.smartgwt.client.data.Criterion; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.SortSpecifier; import com.smartgwt.client.types.DSOperationType; import com.smartgwt.client.types.OperatorId; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.Page; import com.smartgwt.client.util.PageKeyHandler; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.layout.VLayout; public class BuiltInDS implements EntryPoint { private VLayout mainLayout; public void onModuleLoad() { KeyIdentifier debugKey = new KeyIdentifier(); debugKey.setCtrlKey(true); debugKey.setKeyName("D"); Page.registerKey(debugKey, new PageKeyHandler() { public void execute(String keyName) { SC.showConsole(); } }); mainLayout = new VLayout(20); mainLayout.setWidth100(); mainLayout.setHeight100(); mainLayout.addMember(new IButton("Recreate Fetch normal (OK)") { { setWidth(300); addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { recreate("normal"); } }); } }); mainLayout.addMember(new IButton("Recreate Fetch outputs clientside (OK)") { { setWidth(300); addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { recreate("ocs"); } }); } }); mainLayout.addMember(new IButton("Recreate Fetch outputs serverside (OK here, problem for me)") { { setWidth(300); addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { recreate("oss"); } }); } }); mainLayout.addMember(new IButton("Recreate Fetch no crit outputs serverside (OK)") { { setWidth(300); addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { recreate("ossNoCriteria"); } }); } }); mainLayout.draw(); } private void recreate(String mode) { Window w = new Window(); w.setKeepInParentRect(true); w.setWidth("95%"); w.setHeight("95%"); w.setMembersMargin(0); w.setModalMaskOpacity(70); w.setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")"); w.setTitle("outputs also stops criteria from working" + w.getTitle()); w.setShowMinimizeButton(false); w.setIsModal(true); w.setShowModalMask(true); w.centerInPage(); final ListGrid employeesGrid = new ListGrid(DataSource.get("employees")); employeesGrid.setHeight100(); employeesGrid.setAutoFetchData(false); ListGridField employeeId = new ListGridField("EmployeeId"); ListGridField name = new ListGridField("Name"); ListGridField gender = new ListGridField("Gender"); ListGridField job = new ListGridField("Job"); ListGridField reportsTo = new ListGridField("ReportsTo"); ListGridField reportsToName = new ListGridField("ReportsToName"); employeesGrid.setFields(employeeId, name, gender, job, reportsTo, reportsToName); employeesGrid.setSort(new SortSpecifier[] { new SortSpecifier(name.getName(), SortDirection.ASCENDING) }); AdvancedCriteria reportsToAC = new AdvancedCriteria(new Criterion(reportsToName.getName(), OperatorId.EQUALS, "Charles Madigen")); DSRequest restrictedOutputsCS = new DSRequest(DSOperationType.FETCH); restrictedOutputsCS.setOutputs("EmployeeId, Name, Gender, Job"); DSRequest fetchWithOutputs = new DSRequest(DSOperationType.FETCH); fetchWithOutputs.setOperationId("fetchWithOutputs"); if ("normal".equals(mode)) employeesGrid.fetchData(reportsToAC); else if ("ocs".equals(mode)) employeesGrid.fetchData(reportsToAC, null, restrictedOutputsCS); else if ("oss".equals(mode)) employeesGrid.fetchData(reportsToAC, null, fetchWithOutputs); else if ("ossNoCriteria".equals(mode)) employeesGrid.fetchData(null, null, fetchWithOutputs); w.addItem(employeesGrid); w.show(); } }
Code:
<DataSource ID="employees" serverType="sql" tableName="employeeTable" recordName="employee" testFileName="/examples/shared/ds/test_data/employees.data.xml" titleField="Name" useAnsiJoins="true" > <fields> <field name="userOrder" title="userOrder" type="integer" canEdit="false" hidden="true"/> <field name="Name" title="Name" type="text" length="128"/> <field name="EmployeeId" title="Employee ID" type="integer" primaryKey="true" required="true"/> <field name="ReportsTo" title="Manager" type="integer" foreignKey="employees.EmployeeId" joinType="outer" /> <field name="ReportsToName" includeFrom="employees.Name" /> <field name="Job" title="Title" type="text" length="128"/> <field name="Email" title="Email" type="text" length="128"/> <field name="EmployeeType" title="Employee Type" type="text" length="40"/> <field name="EmployeeStatus" title="Status" type="text" length="40"/> <field name="Salary" title="Salary" type="float"/> <field name="OrgUnit" title="Org Unit" type="text" length="128"/> <field name="Gender" title="Gender" type="text" length="7"> <valueMap> <value>male</value> <value>female</value> </valueMap> </field> <field name="MaritalStatus" title="Marital Status" type="text" length="10"> <valueMap> <value>married</value> <value>single</value> </valueMap> </field> </fields> <operationBindings> <operationBinding operationType="fetch" /> <operationBinding operationType="fetch" operationId="fetchWithOutputs" outputs="EmployeeId, Name, Gender, Job" /> </operationBindings> </DataSource>
Blama
Comment