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