Hi Isomorphic,
I have been using your advice from here to create a clientOnly-DataSource for my SelectItem using createLogicalDate() (please note that the value range is missing, compared to createLogicalTime()).
By chance I saw today that the generated dates are completely wrong and can't be explained with DST, Timezones or similar, as I noted non-"last of month"-dates in my DB.
If you agree this is an bug can you please tell me when this changed - because then I need to carefully adjust the data in the DB after you fix this issue.
Please see this screenshot and the testcase (using 11.1p_2018-02-05):
BuiltInDS.java:
This is an important one for me.
Best regards
Blama
I have been using your advice from here to create a clientOnly-DataSource for my SelectItem using createLogicalDate() (please note that the value range is missing, compared to createLogicalTime()).
By chance I saw today that the generated dates are completely wrong and can't be explained with DST, Timezones or similar, as I noted non-"last of month"-dates in my DB.
If you agree this is an bug can you please tell me when this changed - because then I need to carefully adjust the data in the DB after you fix this issue.
Please see this screenshot and the testcase (using 11.1p_2018-02-05):
BuiltInDS.java:
Code:
package com.smartgwt.sample.client; import java.util.ArrayList; import java.util.Date; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.i18n.shared.DateTimeFormat; import com.smartgwt.client.Version; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.FieldType; import com.smartgwt.client.util.DateUtil; import com.smartgwt.client.util.LogicalDate; 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.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.VLayout; public class BuiltInDS implements EntryPoint { private VLayout mainLayout; private IButton recreateBtn; 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(); recreateBtn = new IButton("Recreate"); recreateBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { recreate(); } }); mainLayout.addMember(recreateBtn); recreate(); mainLayout.draw(); } private void recreate() { Window w = new Window(); w.setWidth("25%"); w.setHeight("65%"); w.setMembersMargin(0); w.setModalMaskOpacity(70); w.setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")"); w.setTitle("Severe problem with createLogicalDate" + w.getTitle()); w.setShowMinimizeButton(false); w.setIsModal(true); w.setShowModalMask(true); w.centerInPage(); final ListGrid testDataGrid = new ListGrid(getClientDataSource()); ListGridField displayField = new ListGridField("displayField"); ListGridField dateAsString = new ListGridField("dateAsString"); ListGridField valueField = new ListGridField("valueField"); testDataGrid.setFields(displayField, dateAsString, valueField); testDataGrid.fetchData(); w.addItem(testDataGrid); w.show(); } private static DataSource getClientDataSource() { DataSource ds = new DataSource(); ds.setClientOnly(true); ds.setTitleField("displayField"); DataSourceField valueField = new DataSourceField("valueField", FieldType.DATE); valueField.setPrimaryKey(true); DataSourceField displayField = new DataSourceField("displayField", FieldType.TEXT); DataSourceField dateAsStringField = new DataSourceField("dateAsString", FieldType.TEXT); ds.setFields(valueField, displayField, dateAsStringField); ArrayList<Record> recordList = new ArrayList<Record>(); for (String s : new String[] { "December 2017/2017-12-31", "January 2018/2018-01-31", "February 2018/2018-02-28", "March 2018/2018-03-31", "April 2018/2018-04-30", "May 2018/2018-05-31", "June 2018/2018-06-30", "July 2018/2018-07-31", "August 2018/2018-08-31", "September 2018/2018-09-30", "October 2018/2018-10-31", "November 2018/2018-11-30", "December 2018/2018-12-31", "January 2019/2019-01-31", "February 2019/2019-02-28", "March 2019/2019-03-31", "April 2019/2019-04-30", "May 2019/2019-05-31", "June 2019/2019-06-30", "July 2019/2019-07-31", "August 2019/2019-08-31", "September 2019/2019-09-30", "October 2019/2019-10-31", "November 2019/2019-11-30", "December 2019/2019-12-31" }) { String[] splitted = s.split("/"); ListGridRecord lgr = new ListGridRecord(); lgr.setAttribute("displayField", splitted[0]); lgr.setAttribute("dateAsString", splitted[1]); Date d = DateTimeFormat.getFormat("yyyy-MM-dd").parseStrict(splitted[1]); @SuppressWarnings("deprecation") LogicalDate ld = DateUtil.createLogicalDate(d.getYear() + 1900, d.getMonth() + 1, d.getDay()); lgr.setAttribute("valueField", ld); recordList.add(lgr); } ds.setCacheData(recordList.toArray(new Record[recordList.size()])); return ds; } }
Best regards
Blama
Comment