Hi,
We're using SmartGWT 4.1 Power Edition (v9.1p_2014-06-04).
I'm facing a problem regarding DataSources with cacheAllData set to true and ListGridField using such data sources as optionDataSource.
Scenario:
- 2 users connected to the application.
- 1st one performs an update operation on cached data source.
- 2nd user client is notified of operation (with our own push system), which triggers call to DataSource.invalidateCache()
- 2nd user refreshes a grid with a field having this DS set as optionDataSource
=> Change isn't taken into account.
This problem seems to affect only ListGridFields: performing a refresh on a ListGrid that uses this DS, or displaying a SelectItem with this same DS triggers the following request:
When DS is used only as optionDataSource on a ListGridField, refreshing the parent ListGrid doesn't trigger cache reload.
Issue can be reproduced with all operations (add/update/remove).
DataSource definition:
Client code that handles data changes notifications:
Did I miss something in client-side cache configuration? Or is there a special setup for ListGridField?
Thanks in advance for your help
Antoine
We're using SmartGWT 4.1 Power Edition (v9.1p_2014-06-04).
I'm facing a problem regarding DataSources with cacheAllData set to true and ListGridField using such data sources as optionDataSource.
Scenario:
- 2 users connected to the application.
- 1st one performs an update operation on cached data source.
- 2nd user client is notified of operation (with our own push system), which triggers call to DataSource.invalidateCache()
- 2nd user refreshes a grid with a field having this DS set as optionDataSource
=> Change isn't taken into account.
This problem seems to affect only ListGridFields: performing a refresh on a ListGrid that uses this DS, or displaying a SelectItem with this same DS triggers the following request:
Code:
=== 2014-06-05 14:39:11,325 [l0-6] DEBUG RPCManager - Request #1 (DSRequest) payload: { criteria:{ }, operationConfig:{ dataSource:"businessUnit", operationType:"fetch", textMatchStyle:"exact" }, componentId:"(cacheAllData fetch)", appID:"builtinApplication", operation:"loadCache", oldValues:null }
Issue can be reproduced with all operations (add/update/remove).
DataSource definition:
Code:
<DataSource xmlns:fmt="WEB-INF/" ID="businessUnit" serverType="sql" tableName="SEC_BUSINESS_UNIT" serverConstructor="com.fircosoft.cdb.server.administration.BusinessUnitDataSource" audited="true" insertAuditEvent="2701" updateAuditEvent="2702" removeAuditEvent="2703" titleField="NAME" fireEventOnDataChanged="true" cacheAllData="true" cacheAllOperationId="loadCache" cacheAcrossOperationIds="false" > ... <operationBinding operationType="fetch" operationId="loadCache"> <selectClause>SEC_BUSINESS_UNIT.ID, SEC_BUSINESS_UNIT.NAME</selectClause> <whereClause>SEC_BUSINESS_UNIT.DELETED = 0 AND SEC_BUSINESS_UNIT.ID > 0</whereClause> </operationBinding> </operationBindings> </DataSource>
Code:
final String id = ds.getID(); //Listener for main data source EventManager.register(new DataChangedEventListener(id) { @Override public void notifyDataChanged(DataChangedEvent event) { String dsId = id; if (DataSource.get(dsId) != null && DataSource.get(dsId).getCacheAllData()) DataSource.get(dsId).invalidateCache(); } }, DataChangedEvent.class);
Thanks in advance for your help
Antoine
Comment