Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    DataSource.setUseOfflineStorage() not working

    Hello,

    I'am trying to use DataSource.setUseOfflineStorage().
    Data seems to be cached correctly under Local Storage, but when the application goes offline, the following exceptioin is thrown:

    Code:
    ISC_Core.js:1225 *10:56:38.392:TMR5:WARN:Log:Uncaught exception escaped: com.google.gwt.core.client.JavaScriptException
    (TypeError) : self_0_g$.__useOfflineResponse is not a function
        at Hi_g$(dummyModule-0.js@31:25000)
        at <anonymous>(dummyModule-0.js@22:24256)
        at aU_g$(dummyModule-0.js@28:4492)
        at dU_g$(dummyModule-0.js@16:4548)
        at useOfflineResponse(dummyModule-0.js@14:4528)
        at isc_DataSource_fulfilledFromOffline(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@461:606)
        at isc_DataSource_getServiceInputs(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@599:349)
        at isc_DataSource_sendDSRequest(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@14:589)
        at isc_DataSource_performDSOperation(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@13:561)
        at isc_DataSource_fetchData(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@99:519)
        at isc_ResultSet_fetchRemoteData(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@88:1402)
        at isc_ResultSet__fetchRemoteData(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_DataBinding.js@588:1397)
        at isc_c_Class_fireCallback(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_Core.js@104:300)
        at isc_c_Class__fireActionsOnPause(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_Core.js@383:305)
        at isc_c_Class_fireCallback(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_Core.js@104:300)
        at isc_c_Timer__fireTimeout(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_Core.js@166:1793)
        at anonymous(http://127.0.0.1:8888/dummyModule/sc/modules/ISC_Core.js@40:1790)
    [...]
    ISC_Core.js:1225 *10:56:38.401:TMR5:WARN:ResultSet:isc_ResultSet_0 (dataSource: isc_RestDataSource_0, created by: isc_ListGrid_0):Bad data returned, ignoring: "This data not available while offline"
    Minimal example:
    Code:
    import com.google.gwt.core.client.EntryPoint;
    import com.smartgwt.client.data.RestDataSource;
    import com.smartgwt.client.util.Offline;
    import com.smartgwt.client.widgets.Canvas;
    import com.smartgwt.client.widgets.IButton;
    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.HLayout;
    import com.smartgwt.client.widgets.layout.VLayout;
    
    public class dummyModule implements EntryPoint {
    
        public Canvas getViewPanel() {
    
            RestDataSource dummyDS = new RestDataSource();
            dummyDS.setDataURL("http://127.0.0.1:8888/dummyData.jsp");        
            dummyDS.setUseOfflineStorage(true);
    
            final ListGrid grid = new ListGrid();
            grid.setWidth(400);
            grid.setHeight(250);
            grid.setDataSource(dummyDS);
            ListGridField itemIdField = new ListGridField("itemID");
            ListGridField itemNameField = new ListGridField("itemName");
            ListGridField unitCostField = new ListGridField("unitCost");
            grid.setFields(itemIdField, itemNameField, unitCostField);
            grid.setAutoFetchData(true);  
            //grid.setCanEdit(true);        
    
            HLayout hLayout = new HLayout();
            hLayout.setMembers(grid);
    
            VLayout layout = new VLayout(10);
    
            final IButton offonButton = new IButton("Go Offline", new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    final IButton source = (IButton) event.getSource();
                    if(source.getTitle().equals("Go Offline")) {
                        Offline.goOffline();
                        source.setTitle("Go Online");
                    } else {
                        Offline.goOnline();
                        source.setTitle("Go Offline");
                    }
                }
            });
            final IButton reloadButton = new IButton("Reload data", new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    grid.invalidateCache();
                }
            });
            layout.setMembers(hLayout, offonButton, reloadButton);
            layout.setAutoHeight();
    
            return layout;
        }
    
        public void onModuleLoad() {
            getViewPanel().draw();
        }
    }
    Dummy datasource:

    Code:
    <response>
        <status>0</status>
        <startRow>0</startRow>
        <endRow>2</endRow>
        <totalRows>3</totalRows>
        <data>
            <record><itemID>1</itemID><itemName>Name1</itemName><unitCost>5</unitCost></record>
            <record><itemID>2</itemID><itemName>Name2</itemName><unitCost>10</unitCost></record>
            <record><itemID>3</itemID><itemName>Name3</itemName><unitCost>15</unitCost></record>
        </data>
    </response>
    Steps to reproduce:
    1. Start the application (data appears in the grid correctly, you can check that it is also cached in Local Cache)
    2. Click Reload button (data is reloaded as expected)
    3. Click Go offline button
    4. Click Reload button (the grid is empty and the exception is shown on the console)
    SmartClient Version: v12.0p_2018-07-07/LGPL Development Only (built 2018-07-07)



    #2
    This should be fixed in today's builds (dated 2018-07-12), back to SGWT 5.1p/SC 10.1p.

    Comment

    Working...
    X