Hi Isomorphic,
I have a Datasource, only relevant for the Admin and of course with declarative security, I don't need very often and I don't want to load on startup via the DataSourceLoader call from my HTML.
So I load it when I need it. but the forced reload of it fails or at least throws an exception in the Developer Console. Now I could not load it if it is already there, but I think it is an issue anyway, because there might be legitimate reasons to reload a DS.
BuiltInDS.java (tested with v10.1p_2017-08-20):
Best regards
Blama
I have a Datasource, only relevant for the Admin and of course with declarative security, I don't need very often and I don't want to load on startup via the DataSourceLoader call from my HTML.
So I load it when I need it. but the forced reload of it fails or at least throws an exception in the Developer Console. Now I could not load it if it is already there, but I think it is an issue anyway, because there might be legitimate reasons to reload a DS.
On "Reload" click (OK):
WARN:DataSource:DataSource(s) already loaded: employees
Use forceReload to reload such DataSources
On "Force Reload" click (not OK):
WARN:Log:ID 'employees' for object '[DataSource ID:employees]' collides with the ID of an existing object. This can occur when the specified ID for a new SmartClient Canvas is the same as a native attribute of 'window', or another variable already assigned in global scope. The global reference to this object will be replaced. Consider instead using a different ID to avoid this collision altogether, especially if the colliding ID is a native attribute of window. Replacing such objects often has serious and unintended consequences. In this case, the current value of window['employees'] is:
DataSource{testFileName: "/examples/shared/ds/test_data/employees...."[48],
titleField: "Name",
allowAdvancedCriteria: true,
tableCode: "a6744ab162eb640344ffc18c778b303d",
xmlns: "lmscompany/ds",
recordName: "employee",
serverType: "sql",
useAnsiJoins: true,
operationBindings: Array[1],
ID: "employees",
fields: Obj,
canQueueRequests: true,
name: "employees",
}
WARN:DataSource:DataSource(s) already loaded: employees
Use forceReload to reload such DataSources
On "Force Reload" click (not OK):
WARN:Log:ID 'employees' for object '[DataSource ID:employees]' collides with the ID of an existing object. This can occur when the specified ID for a new SmartClient Canvas is the same as a native attribute of 'window', or another variable already assigned in global scope. The global reference to this object will be replaced. Consider instead using a different ID to avoid this collision altogether, especially if the colliding ID is a native attribute of window. Replacing such objects often has serious and unintended consequences. In this case, the current value of window['employees'] is:
DataSource{testFileName: "/examples/shared/ds/test_data/employees...."[48],
titleField: "Name",
allowAdvancedCriteria: true,
tableCode: "a6744ab162eb640344ffc18c778b303d",
xmlns: "lmscompany/ds",
recordName: "employee",
serverType: "sql",
useAnsiJoins: true,
operationBindings: Array[1],
ID: "employees",
fields: Obj,
canQueueRequests: true,
name: "employees",
}
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.DataSource;
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.layout.VLayout;
public class BuiltInDS extends VLayout implements EntryPoint {
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();
}
});
setWidth100();
setHeight100();
recreateBtn = new IButton("Recreate");
recreateBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new MyWindow().show();
}
});
addMember(recreateBtn);
new MyWindow().show();
draw();
}
private class MyWindow extends Window {
public MyWindow() {
setWidth("95%");
setHeight("95%");
setMembersMargin(0);
setModalMaskOpacity(70);
setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")");
setTitle("DataSource force reload problem" + getTitle());
setShowMinimizeButton(false);
setIsModal(true);
setShowModalMask(true);
centerInPage();
IButton reloadButton = new IButton("Reload");
reloadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
DataSource.load("employees", null, false);
}
});
addItem(reloadButton);
IButton reloadForceButton = new IButton("Force Reload");
reloadForceButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
DataSource.load("employees", null, true);
}
});
addItem(reloadForceButton);
}
}
}
Blama
Comment