Announcement

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

    DataArrivedHandler and deleting data


    Hi, i just noticed something i haven't come across before.

    I have a ListGrid backed by a DS. Autofetch on.

    Say i add a test dataarrivedhandler to it like so:

    Code:
    grid.addDataArrivedHandler(dataArrivedEvent -> GWT.log("ONDATAARRIVED!!!!!!"));
    When page is loading, the grid fetches the data and the arrivedhandler is called, as expected.

    However, i noticed that when i delete data using the datasource, like this for example:

    Code:
    Record recordToDelete;
    DataSource ds;
    ds.removeData(recordToDelete);
    -the row is deleted, and disappears from the grid as expected. However, i notice that my dataarrivedhandler is called again. It's "endRow" is equal to the amount of rows in the grid.

    Is this expected behavior? To me it feels counterintuitive to get a data arrived call when data has been deleted and nothing new comes from the server.

    #2
    DataArrived would not normally fire in this situation, but it would if you did something like an invalidateCache() call.

    Comment


      #3
      Yeah, that's what i would have thought too, but there are no network requests being fired.

      Comment


        #4
        OK, sounds like this is just a curiosity for you, but if you want to pursue it, we can take a look if we have a way to reproduce the behavior.

        Comment


          #5
          Ok, i put together an example that reproduced it for me at least:

          This is my test class:
          Code:
          public static void createLayout(){
                  DataSource ds = DataSource.get("location");
                  VLayout layout = new VLayout();
                  layout.setBorder("1px solid blue");
                  layout.setWidth100().setHeight100();
                  ListGrid grid = new ListGrid(DataSource.get("location"));
                  grid.setWidth100().setHeight100();
                  grid.setSelectionType(SelectionStyle.SINGLE);
                  grid.setAutoFetchData(true);
                  grid.setFields(new ListGridField("name", "Name")
                      , new ListGridField("description", "Description"));
                  grid.addDataArrivedHandler(event -> GWT.log("DATAARRIVED, endrow: " + event.getEndRow()));
          
                  Button button = new Button("Delete");
                  button.addClickHandler(clickEvent -> {
                      if(!grid.anySelected()){
                          SC.say("select something");
                      }
                      ds.removeData(grid.getSelectedRecord(), (dsResponse, o, dsRequest) -> GWT.log("DELETED"));
                  });
                  layout.addMember(button);
                  layout.addMember(grid);
                  layout.draw();
              }
          My datasource is just mapped in xml, mapped against a spring service:
          Code:
          <serverObject lookupStyle="spring" bean="locationApi"/>
          When i tried this just now, the server returned 31 rows, which are displayed in the grid. I then selected a row, and clicked on the delete button. One
          IDACall is triggered in the firefox logs for the single delete call, and my server is only pinged once.

          The row is deleted, and disappears from the listgrid. But, from the console output you can see that the data arrived handler is called again during the delete process. As you can see, the dataarrived comes before the dscallback is called.

          DATAARRIVED, endrow: 30 ConsoleLogger.java:33
          DATAARRIVED, endrow: 29 ConsoleLogger.java:33
          DELETED
          This is the delete network trace: (EDIT: obviously there's also a dsrequest for the initial grid fetch, which i won't include)

          REQUEST:
          <transaction xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:type="xsd:Object"><transactionNum xsi:type="xsd:long">1</transactionNum><operations xsi:type="xsd:List"><elem xsi:type="xsd:Object"><criteria xsi:type="xsd:Object"><id xsi:type="xsd:long">76278</id></criteria><operationConfig xsi:type="xsd:Object"><dataSource>location</dataSource><repo xsi:nil="true"/><operationType>remove</operationType><textMatchStyle>exact</textMatchStyle></operationConfig><appID>builtinApplication</appID><operation>location_remove</operation><oldValues xsi:type="xsd:Object"><id xsi:type="xsd:long">76278</id></oldValues></elem></operations></transaction>

          RESPONSE:
          //isc_RPCResponseStart-->[{affectedRows:0,data:{id:76278},invalidateCache:false,isDSResponse:true,operationType:"remove",status:0}]//isc_RPCResponseEnd

          I am running in the 13 beta but i'm pretty sure it happens in 12.1 as well. I sure hope you can see something i screwed up :)

          Comment


            #6
            We're not reproducing this with a simple test case.

            You might try using traceLogMessage to find out how DataArrived is being called.

            Comment


              #7
              Wow. It's super strange to me that you're not getting the same behavior running the exact same code that i'm doing, it's not a lot of code.

              The only thing i can then think of is that the data coming from the server side is different and causes the dataarrivedhandler to act differently? Server-side, it's all spring beans and i'm not returning DSresponses from them, just TO objects - could it be something like that?

              Also,If it helps, i get a call to my handler whenever i add a record, too.

              It's a little bit of a showstopper for a feature for me, so i'd really like to get to the bottom if this.

              ---

              Any tips on what i should use as strings for the tracelogmessage?

              I did try to turn on the events and rpcmanager logging, and saw this:

              You can see that my dataarrivedhandler is called between the rpcresponse and "firing threadexitactions". Does that tell you anything? (this is an example of an add operation causing my handler to be called)

              *09:36:33.837:XRP9:INFO:RPCManager:transaction 7 arrived after 29ms ISC_Core.js:1317:186
              *09:36:33.838:XRP9:DEBUG:RPCManager:Result string for transaction 7: "//isc_RPCResponseStart-->[{affectedRows:0,data:{ledgerEmailOnly:false,mainC:null,description:null,lon:0.0,type:"1",enabled:true,copyable:false,id:76282,keyword:"j2x",lat:0.0,nfcOnly:false,ledgerId:null,sensitivityType:"1",extref:null,name:"aaaaaa"},invalidateCache:false,isDSResponse:true,operationType:"add",status:0}]//isc_RPCResponseEnd" ISC_Core.js:1317:237
              *09:36:33.843:XRP9:INFO:RPCManager:rpcResponse(location_add)[add]: result: object[status=0] ISC_Core.js:1317:186
              ONDATAARRIVED!!!!!! ConsoleLogger.java:33
              *09:36:33.868:XRP9:DEBUG:EventHandler:firing threadExitActions: [
              anonymous()
              ] ISC_Core.js:1317:237
              *09:36:33.948:TMR2:INFO:RPCManager:sendQueue called with no current queue, ignoring ISC_Core.js:1317:186
              *09:36:33.949:TMR2:DEBUG:EventHandler:firing threadExitActions: [
              anonymous()
              ]

              Edit: As i don't know what helps, i'm throwing stuff to the wall. Whenever I press a key to enter something in a field in the form where i'm adding rows, i see this in the logs:
              *10:07:01.244:INP3:INFO:RPCManager:sendQueue called with no current queue, ignoring ISC_Core.js:1317:186
              *10:07:03.820:MUP2:INFO:RPCManager:sendQueue called with no current queue, ignoring
              There are quickly tons of them.
              Last edited by mathias; 1 Sep 2021, 00:15.

              Comment


                #8
                OK, so i went in to the iscconsole and turned *all* logging to debug. I then tried to clear everything so that i only got the part where i clicked the delete button. I am using the exact code above. You have the stack trace below, i have only tried to clear out some stuff related to the GUI rendering of the button and grid.
                The log below is from when i clicked the deletebutton, to the server delete and response back, until all is complete and logging stops.

                I also included the trace in a text file that i have uploaded. The "DATAARRIVED" output from my eventhandler in the code above is on row 313.

                StackTrace:
                sequence: 475} ISC_Core.js:1317:237
                *10:59:13.282:MUP6:DEBUG:dsOperationTrace:location:Perform DS operation of type:remove Stack:


                DataSource.performDSOperation(_1=>"remove", _2=>Obj{ID:76282}, _3=>anonymous(), _4=>null)
                DataSource.removeData(_1=>Obj{ID:76282}, _2=>anonymous(), _3=>null)
                $ve_g$(data_0_g$=>com.smartgwt.client.widgets.grid.ListGridRecord@6, callback_0_g$=>com.nuba.TestGrid$lambda$2$Type@7, requestProperties_0_g$=>null)
                Zve_g$(data_0_g$=>com.smartgwt.client.widgets.grid.ListGridRecord@6, callback_0_g$=>com.nuba.TestGrid$lambda$2$Type@7)
                C5p_g$(grid_0_0_g$=>ListGrid{dataSource: [DataSource ID:location],
                modalEditing: true,
                width: 2532,
                height: 788,
                selectionType: "single",
                autoFetchData: true,
                fields: Array[2],
                AUTOIDClass: "ListGrid",
                ID: "isc_ListGrid_0",
                members: Array[2],
                minHeight: 72,
                scrollbarConstructor: [Class NativeScrollbar],
                floatingScrollbars: true,
                position: "absolute",
                className: "listGrid",
                top: 22,
                vertical: true,
                children: Array[3],
                data: [ResultSet ID:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0)],
                selection: [Selection ID:isc_ListGrid_0_selection],
                wrapHeaderTitles: false,
                wrapHeaderSpanTitles: false,
                currentGroupState: "",
                parentElement: [VLayout ID:isc_VLayout_0],
                topElement: [VLayout ID:isc_VLayout_0],
                originalFields: Array[0],
                completeFields: Array[2],
                canFreezeFields: true,
                defaultFieldState: "[{name:"name"},{name:"description"}]",
                header: [Toolbar ID:isc_Toolbar_0],
                sorter: [Button ID:isc_ListGrid_0_sorter],
                headers: Array[1],
                body: [GridBody ID:isc_ListGrid_0_body],
                tabIndex: 1128,
                bodies: Array[1],
                dragScrollTarget: [GridBody ID:isc_ListGrid_0_body],
                ruleScope: "isc_VLayout_0",
                allowFilterWindow: true,
                initialCriteria: Obj,
                selectionManager: [Selection ID:isc_ListGrid_0_selection],
                cacheOffsetCoords: true,
                zIndex: 200072,
                innerWidth: 2530,
                memberSizes: Array[2],
                isSVG: false,
                headerMenuButton: [HeaderMenuButton ID:isc_ListGrid_0_headerMenuButton],
                rollOverCanvas: [SelectionOrRollOverCanvas ID:isc_ListGrid_0_rollOverCanvas],
                currentRollOverCanvas: [SelectionOrRollOverCanvas ID:isc_ListGrid_0_rollOverCanvas],
                rollUnderCanvas: [Canvas ID:isc_ListGrid_0_rollUnderCanvas],
                currentRollUnderCanvas: [Canvas ID:isc_ListGrid_0_rollUnderCanvas],
                }, ds_1_0_g$=>com.smartgwt.client.data.DataSource@8, clickEvent_2_0_g$=>An event type)
                L5p_g$(arg0_0_g$=>An event type)
                QKl_g$(handler_0_g$=>com.nuba.TestGrid$lambda$1$Type@9)
                PKl_g$(handler_0_g$=>com.nuba.TestGrid$lambda$1$Type@9)
                LZb_g$(handler_0_g$=>com.nuba.TestGrid$lambda$1$Type@9)
                S8b_g$(event_0_g$=>An event type, handler_0_g$=>com.nuba.TestGrid$lambda$1$Type@9)
                w9b_g$(event_0_g$=>An event type, source_0_g$=>null)
                C9b_g$(event_0_g$=>An event type)
                i9b_g$(event_0_g$=>An event type)
                _w_g$(event_0_g$=>An event type)
                anonymous(param_0_g$=>Obj)
                jN_g$(jsFunction_0_g$=>anonymous(), thisObj_0_g$=>[object Window], args_0_g$=>[object Arguments])
                mN_g$(jsFunction_0_g$=>anonymous(), thisObj_0_g$=>[object Window], args_0_g$=>[object Arguments])
                anonymous(Obj)
                [o]Button.click(Obj, undef)
                StatefulCanvas.handleActivate(_1=>Obj, _2=>undef)
                StatefulCanvas.handleClick(_1=>Obj, _2=>undef)
                [c]EventHandler.bubbleEvent(_1=>[Button ID:isc_Button_0], _2=>"click", _3=>undef, _4=>undef, _5=>undef)
                [c]EventHandler.handleClick(_1=>[Button ID:isc_Button_0], _2=>undef)
                [c]EventHandler.$k5(_1=>[object MouseEvent], _2=>undef)
                [c]EventHandler.handleMouseUp(_1=>[object MouseEvent], _2=>undef)
                [c]EventHandler.dispatch(_1=>[c]EventHandler.handleMouseUp(), _2=>[object MouseEvent])
                anonymous(event=>[object MouseEvent])
                ISC_Core.js:1317:237
                *10:59:13.283:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 476} ISC_Core.js:1317:237
                *10:59:13.283:MUP6:DEBUG:DataSource:location:Outbound DSRequest: {operationType: "remove",
                dataSource: "location",
                data: Obj{ID:76282},
                callback: anonymous(),
                requestId: "location$6271",
                useStrictJSON: null,
                fallbackToEval: false,
                textMatchStyle: "exact",
                lastClientEventThreadCode: "MUP6",
                parentNode: null,
                bypassCache: true,
                showPrompt: true} ISC_Core.js:1317:237
                *10:59:13.285:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 477} ISC_Core.js:1317:237
                *10:59:13.286:MUP6:INFO:DataSource:location:Calling convertRelativeDates from sendDSRequest - data is

                null ISC_Core.js:1317:186
                *10:59:13.286:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 478} ISC_Core.js:1317:237
                *10:59:13.287:MUP6:INFO:AdvancedCriteria:Criteria object:{id: 76282} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:13.287:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 479} ISC_Core.js:1317:237
                *10:59:13.288:MUP6:INFO:DataSource:location:Called convertRelativeDates from sendDSRequest - data is

                {
                "id":76282
                } ISC_Core.js:1317:186
                *10:59:13.288:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 480} ISC_Core.js:1317:237
                *10:59:13.288:MUP6:INFO:AdvancedCriteria:Criteria object:{id: 76282} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:13.289:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 481} ISC_Core.js:1317:237
                *10:59:13.289:MUP6:INFO:AdvancedCriteria:Criteria object:{id: 76282} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:13.290:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 482} ISC_Core.js:1317:237
                *10:59:13.290:MUP6:INFO:DataSource:location:performDSOperation(remove) 1 records ISC_Core.js:1317:186
                *10:59:13.290:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 483} ISC_Core.js:1317:237
                *10:59:13.291:MUP6:INFO:clickMask:showing click mask, action: null, autoHide false , ID: blockingRPC, focusCanvas: [Button ID:isc_Button_0] ISC_Core.js:1317:186
                *10:59:13.291:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 484} ISC_Core.js:1317:237

                ISC_Core.js:1317:186
                *10:59:13.297:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 485} ISC_Core.js:1317:237
                *10:59:13.297:BLR7:DEBUG:nativeFocus:onblur fired on: [Button ID:isc_Button_0] ISC_Core.js:1317:237
                *10:59:13.298:BLR7:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 486} ISC_Core.js:1317:237
                *10:59:13.298:BLR7:DEBUG:nativeFocus:isc_Button_0:$lf(): hasFocus = false ISC_Core.js:1317:237
                *10:59:13.298:BLR7:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 487} ISC_Core.js:1317:237
                *10:59:13.305:MUP6:INFO:RPCManager:sendQueue[1]: 1 RPCRequest(s); transport: xmlHttpRequest; target: http://127.0.0.1:8888/webclient/sc/I...8-21&isc_xhr=1 ISC_Core.js:1317:186
                *10:59:13.306:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 488} ISC_Core.js:1317:237
                *10:59:13.309:MUP6:DEBUG:RPCManager:XMLHttpRequest POST to http://127.0.0.1:8888/webclient/sc/I...8-21&isc_xhr=1 contentType: application/x-www-form-urlencoded; charset=UTF-8 with body -->isc_tnum=1&_transaction=<transaction xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:type="xsd:Object"><transactionNum xsi:type="xsd:long">1</transactionNum><operations xsi:type="xsd:List"><elem xsi:type="xsd:Object"><criteria xsi:type="xsd:Object"><id xsi:type="xsd:long">76282</id></criteria><operationConfig xsi:type="xsd:Object"><dataSource>location</dataSource><repo xsi:nil="true"/><operationType>remove</operationType><textMatchStyle>exact</textMatchStyle></operationConfig><appID>builtinApplication</appID><operation>location_remove</operation><oldValues xsi:type="xsd:Object"><id xsi:type="xsd:long">76282</id></oldValues></elem></operations></transaction>&protocolVersion=1.0<-- ISC_Core.js:1317:237
                *10:59:13.311:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 489} ISC_Core.js:1317:237
                *10:59:13.312:MUP6:DEBUG:EventHandler:Event 'click' bubbled to top ISC_Core.js:1317:237
                *10:59:13.312:MUP6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 490} ISC_Core.js:1317:237
                *10:59:14.407:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.408:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 491} ISC_Core.js:1317:237
                *10:59:14.409:XRP2:INFO:Log:>>>>>
                traceLogMessage(): pattern '/.*rrived.*/i' matched, stack trace:


                [c]RPCManager.performTransactionReply(_1=>1, _2=>[object XMLHttpRequest], _3=>undef)
                callback(transactionNum=>1, results=>[object XMLHttpRequest], wd=>undef)
                "isc.RPCManager.performTransactionReply(transactionNum,results,wd)"
                [c]Class.fireCallback(_1=>"isc.RPCManager.performTransactionReply(t..."[65], _2=>"transactionNum,results,wd", _3=>Array[2], _4=>undef, _5=>undef)
                [c]Comm.performXmlTransactionReply(_1=>1, _2=>[object XMLHttpRequest])
                callback(xmlHttpRequest=>[object XMLHttpRequest])
                "isc.Comm.performXmlTransactionReply(1, xmlHttpRequest)"
                ** recursed on [c]Class.fireCallback
                ISC_Core.js:1317:186
                *10:59:14.409:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 492} ISC_Core.js:1317:237
                *10:59:14.408:XRP2:INFO:RPCManager:transaction 1 arrived after 1097ms ISC_Core.js:1317:186
                *10:59:14.410:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 493} ISC_Core.js:1317:237
                *10:59:14.410:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.410:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 494} ISC_Core.js:1317:237
                *10:59:14.410:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.410:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 495} ISC_Core.js:1317:237
                *10:59:14.411:XRP2:DEBUG:RPCManager:Result string for transaction 1: "//isc_RPCResponseStart-->[{affectedRows:0,data:{id:76282},invalidateCache:false,isDSResponse:true,operationType:"remove",status:0}]//isc_RPCResponseEnd" ISC_Core.js:1317:237
                *10:59:14.412:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                *10:59:14.417:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 500} ISC_Core.js:1317:237
                *10:59:14.417:FCS3:DEBUG:nativeFocus:onfocus fired on: [Button ID:isc_Button_0] ISC_Core.js:1317:237
                *10:59:14.418:FCS3:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 501} ISC_Core.js:1317:237
                *10:59:14.420:FCS3:DEBUG:nativeFocus:isc_Button_0:$lf(): hasFocus = true ISC_Core.js:1317:237
                *10:59:14.420:FCS3:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 502} ISC_Core.js:1317:237
                *10:59:14.421:XRP2:INFO:RPCManager:rpcResponse(custom)[rpc]: result: object[status=0] ISC_Core.js:1317:186
                *10:59:14.421:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 503} ISC_Core.js:1317:237
                *10:59:14.422:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.422:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 504} ISC_Core.js:1317:237
                *10:59:14.423:XRP2:DEBUG:ResultSet:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0):dataSource data changed firing ISC_Core.js:1317:237
                *10:59:14.423:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 505} ISC_Core.js:1317:237
                *10:59:14.423:XRP2:INFO:ResultSet:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0):updating cache in place after operationType: remove, allMatchingRowsCached true ISC_Core.js:1317:186
                *10:59:14.423:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 506} ISC_Core.js:1317:237
                *10:59:14.424:XRP2:INFO:ResultSet:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0):Updating cache: operationType 'remove' (no componentID) ,1 rows update data:
                [
                {id: 76282}
                ] ISC_Core.js:1317:186
                *10:59:14.424:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 507} ISC_Core.js:1317:237
                *10:59:14.425:XRP2:INFO:AdvancedCriteria:Criteria object:{id: 76282} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.425:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 508} ISC_Core.js:1317:237
                *10:59:14.425:XRP2:INFO:DataSource:location:Calling convertRelativeDates from applyFilter - data is

                {
                } ISC_Core.js:1317:186
                *10:59:14.425:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 509} ISC_Core.js:1317:237
                *10:59:14.426:XRP2:INFO:DataSource:location:Called convertRelativeDates from applyFilter - data is

                {
                } ISC_Core.js:1317:186
                *10:59:14.426:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 510} ISC_Core.js:1317:237
                *10:59:14.427:XRP2:INFO:AdvancedCriteria:Criteria object:{operationId: null,
                operationType: "fetch"} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.427:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 511} ISC_Core.js:1317:237
                *10:59:14.428:XRP2:INFO:DataSource:location:Calling convertRelativeDates from applyFilter - data is

                {
                } ISC_Core.js:1317:186
                *10:59:14.428:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 512} ISC_Core.js:1317:237
                *10:59:14.428:XRP2:INFO:DataSource:location:Called convertRelativeDates from applyFilter - data is

                {
                } ISC_Core.js:1317:186
                *10:59:14.429:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 513} ISC_Core.js:1317:237
                *10:59:14.429:XRP2:INFO:AdvancedCriteria:Criteria object:{operationId: null,
                operationType: "fetch"} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.429:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 514} ISC_Core.js:1317:237
                *10:59:14.429:XRP2:INFO:localFilter:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0):Local filter applied: 29 of 29 records matched filter:{
                } ISC_Core.js:1317:186
                *10:59:14.430:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 515} ISC_Core.js:1317:237
                DATAARRIVED, endrow: 29 ConsoleLogger.java:33
                DELETED ConsoleLogger.java:33
                *10:59:14.435:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.435:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 516} ISC_Core.js:1317:237
                *10:59:14.436:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.436:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 517} ISC_Core.js:1317:237
                *10:59:14.437:XRP2:INFO:AdvancedCriteria:Criteria object:{transactionNum: 1} not explicitly marked as AdvancedCriteria - treating as SimpleCriteria. ISC_Core.js:1317:186
                *10:59:14.438:XRP2:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 518} ISC_Core.js:1317:237
                *10:59:14.441:TMR6:DEBUG:drawing:clearRedrawQueue: [GridBody ID:isc_ListGrid_0_body] ISC_Core.js:1317:237
                *10:59:14.442:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 519} ISC_Core.js:1317:237
                *10:59:14.445:TMR6:INFO:Log:>>>>>
                traceLogMessage(): pattern '/.*rrived.*/i' matched, stack trace:


                GridRenderer.$182u()
                "this.$182n()"
                Class.invokeSuper(_1=>null, _2=>"$182u", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
                Class.Super(_1=>"$182u", _2=>[object Arguments], _3=>undef)
                GridBody.$182u()
                GridBody.redraw(_1=>false, _2=>undef, _3=>undef, _4=>undef)
                [c]Canvas.clearRedrawQueue()
                [c]Class.fireCallback(_1=>Obj, _2=>null, _3=>null, _4=>null, _5=>true)

                Stack trace for setTimeout() call:

                [c]Canvas.scheduleRedraw(_1=>[GridBody ID:isc_ListGrid_0_body])
                Canvas.markForRedraw(_1=>undef, undef, undef, undef, undef)
                isc_Arra_callMethod(_1=>"markForRedraw", _2=>undef, _3=>undef, _4=>undef, _5=>undef, _6=>undef)
                ListGrid.$25a(_1=>undef)
                ListGrid.$66d(_1=>0, _2=>29, true)
                anonymous(startRow=>0, endRow=>29, dataFromCache=>true)
                dataArrivedObservation(0, 29, true)
                ResultSet.filterLocalData()
                ResultSet.updateCache(_1=>"remove", _2=>Array[1], _3=>Obj)
                ResultSet.handleUpdate(_1=>"remove", _2=>Obj{ID:76282}, _3=>false, _4=>Obj)
                ResultSet.dataSourceDataChanged(_1=>Obj, _2=>Obj)
                anonymous(dsResponse=>Obj, dsRequest=>Obj)
                thunk(dsResponse=>Obj, dsRequest=>Obj)
                dataChangedObservation(Obj, Obj)
                DataSource.updateCaches(_1=>Obj, _2=>Obj)
                [c]DataSource.handleUpdate(_1=>Obj, _2=>Obj)
                DataSource.fireResponseCallbacks(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj)
                DataSource.$38b(_1=>Obj{ID:76282}, _2=>Obj, _3=>Obj, _4=>Obj, _5=>Obj)
                DataSource.$50h(_1=>Obj, _2=>Obj{ID:76282}, _3=>Obj)
                [c]Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>[RPCManager ID:builtinApplication], _5=>undef)
                Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>undef)
                [c]RPCManager.__fireReplyCallback(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj{ID:76282})
                anonymous(callback_0_g$=>Obj, request_0_g$=>Obj, response_0_g$=>Obj, data_0_g$=>Obj{ID:76282})
                [c]RPCManager.fireReplyCallbacks(_1=>Obj, _2=>Obj)
                [c]RPCManager.performOperationReply(_1=>Obj, _2=>Obj)
                [c]RPCManager.$39d(_1=>1)
                [c]RPCManager.performTransactionReply(_1=>1, _2=>"//isc_RPCResponseStart-->[{affectedRows:..."[151], _3=>undef)
                callback(transactionNum=>1, results=>[object XMLHttpRequest], wd=>undef)
                "isc.RPCManager.performTransactionReply(transactionNum,results,wd)"
                ** recursed on [c]Class.fireCallback

                ISC_Core.js:1317:186
                *10:59:14.445:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 520} ISC_Core.js:1317:237
                *10:59:14.444:TMR6:INFO:cellValueCache:isc_ListGrid_0_body:Dropping all cached cell values

                GridRenderer.$182n()
                GridRenderer.$182u()
                Class.invokeSuper(_1=>null, _2=>"$182u", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
                Class.Super(_1=>"$182u", _2=>[object Arguments], _3=>undef)
                GridBody.$182u()
                GridBody.redraw(_1=>false, _2=>undef, _3=>undef, _4=>undef)
                [c]Canvas.clearRedrawQueue()
                [c]Class.fireCallback(_1=>Obj, _2=>null, _3=>null, _4=>null, _5=>true)

                Stack trace for setTimeout() call:

                [c]Canvas.scheduleRedraw(_1=>[GridBody ID:isc_ListGrid_0_body])
                Canvas.markForRedraw(_1=>undef, undef, undef, undef, undef)
                isc_Arra_callMethod(_1=>"markForRedraw", _2=>undef, _3=>undef, _4=>undef, _5=>undef, _6=>undef)
                ListGrid.$25a(_1=>undef)
                ListGrid.$66d(_1=>0, _2=>29, true)
                anonymous(startRow=>0, endRow=>29, dataFromCache=>true)
                dataArrivedObservation(0, 29, true)
                ResultSet.filterLocalData()
                ResultSet.updateCache(_1=>"remove", _2=>Array[1], _3=>Obj)
                ResultSet.handleUpdate(_1=>"remove", _2=>Obj{ID:76282}, _3=>false, _4=>Obj)
                ResultSet.dataSourceDataChanged(_1=>Obj, _2=>Obj)
                anonymous(dsResponse=>Obj, dsRequest=>Obj)
                thunk(dsResponse=>Obj, dsRequest=>Obj)
                dataChangedObservation(Obj, Obj)
                DataSource.updateCaches(_1=>Obj, _2=>Obj)
                [c]DataSource.handleUpdate(_1=>Obj, _2=>Obj)
                DataSource.fireResponseCallbacks(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj)
                DataSource.$38b(_1=>Obj{ID:76282}, _2=>Obj, _3=>Obj, _4=>Obj, _5=>Obj)
                DataSource.$50h(_1=>Obj, _2=>Obj{ID:76282}, _3=>Obj)
                [c]Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>[RPCManager ID:builtinApplication], _5=>undef)
                Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>undef)
                [c]RPCManager.__fireReplyCallback(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj{ID:76282})
                anonymous(callback_0_g$=>Obj, request_0_g$=>Obj, response_0_g$=>Obj, data_0_g$=>Obj{ID:76282})
                [c]RPCManager.fireReplyCallbacks(_1=>Obj, _2=>Obj)
                [c]RPCManager.performOperationReply(_1=>Obj, _2=>Obj)
                [c]RPCManager.$39d(_1=>1)
                [c]RPCManager.performTransactionReply(_1=>1, _2=>"//isc_RPCResponseStart-->[{affectedRows:..."[151], _3=>undef)
                callback(transactionNum=>1, results=>[object XMLHttpRequest], wd=>undef)
                "isc.RPCManager.performTransactionReply(transactionNum,results,wd)"
                ** recursed on [c]Class.fireCallback

                ISC_Core.js:1317:186
                *10:59:14.446:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 521} ISC_Core.js:1317:237
                *10:59:14.447:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 522} ISC_Core.js:1317:237
                *10:59:14.447:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 523} ISC_Core.js:1317:237
                *10:59:14.447:TMR6:INFO:drawing:isc_ListGrid_0_body:$ra(): redrawing ISC_Core.js:1317:186
                *10:59:14.447:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 524} ISC_Core.js:1317:237
                *10:59:14.448:TMR6:DEBUG:ResultSet:isc_ResultSet_0 (dataSource: location, created by: isc_ListGrid_0):getRange(0, 29) satisfied from cache ISC_Core.js:1317:237
                *10:59:14.448:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 525} ISC_Core.js:1317:237
                *10:59:14.450:TMR6:INFO:cellValueCache:isc_ListGrid_0_body:getCellValue(0,0): Not using cached cell value
                Stack:


                GridRenderer.$22k(_1=>Obj{name:Apple Store Täby}, _2=>0, _3=>0)
                GridRenderer.getTableHTML(_1=>null, _2=>null, _3=>null, _4=>null, _5=>null, _6=>null, _7=>true)
                GridRenderer.getInnerHTML(completeInnerHTMLFun())
                Class.invokeSuper(_1=>null, _2=>"getInnerHTML", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
                Class.Super(_1=>"getInnerHTML", _2=>[object Arguments], _3=>undef)
                GridBody.getInnerHTML(completeInnerHTMLFun())
                Canvas.$px(_1=>undef)
                Canvas.$rd(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
                ** recursed on Class.invokeSuper
                ISC_Core.js:1317:186
                *10:59:14.450:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 526} ISC_Core.js:1317:237
                *10:59:14.451:TMR6:INFO:cellValueCache:isc_ListGrid_0_body:Cacheing cell value (for first row)

                GridRenderer.$182q(_1=>"Apple Store Täby", _2=>Obj{name:Apple Store Täby}, _3=>0, _4=>0)
                GridRenderer.$22k(_1=>Obj{name:Apple Store Täby}, _2=>0, _3=>0)
                GridRenderer.getTableHTML(_1=>null, _2=>null, _3=>null, _4=>null, _5=>null, _6=>null, _7=>true)
                GridRenderer.getInnerHTML(completeInnerHTMLFun())
                Class.invokeSuper(_1=>null, _2=>"getInnerHTML", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
                Class.Super(_1=>"getInnerHTML", _2=>[object Arguments], _3=>undef)
                GridBody.getInnerHTML(completeInnerHTMLFun())
                Canvas.$px(_1=>undef)
                Canvas.$rd(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
                ** recursed on Class.invokeSuper
                ISC_Core.js:1317:186
                *10:59:14.451:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 527} ISC_Core.js:1317:237
                *10:59:14.452:TMR6:INFO:cellValueCache:isc_ListGrid_0_body:Cacheing cell value (for first row)

                GridRenderer.$182q(_1=>"Apples are nice.", _2=>Obj{name:Apple Store Täby}, _3=>0, _4=>1)
                GridRenderer.$22k(_1=>Obj{name:Apple Store Täby}, _2=>0, _3=>1)
                GridRenderer.getTableHTML(_1=>null, _2=>null, _3=>null, _4=>null, _5=>null, _6=>null, _7=>true)
                GridRenderer.getInnerHTML(completeInnerHTMLFun())
                Class.invokeSuper(_1=>null, _2=>"getInnerHTML", _3=>undef, _4=>undef, _5=>undef, _6=>undef, _7=>undef, _8=>undef, _9=>undef, _10=>undef, _11=>undef, _12=>undef, _13=>undef)
                Class.Super(_1=>"getInnerHTML", _2=>[object Arguments], _3=>undef)
                GridBody.getInnerHTML(completeInnerHTMLFun())
                Canvas.$px(_1=>undef)
                Canvas.$rd(undef, undef, undef, undef, undef, undef, undef, undef, undef, undef)
                ** recursed on Class.invokeSuper
                ISC_Core.js:1317:186
                *10:59:14.452:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 528} ISC_Core.js:1317:237
                *10:59:14.459:TMR6:DEBUG:gridHTML:isc_ListGrid_0_body:getTableHTML: columns 0->1, rows 0->28, time: 11ms (58 cells at 0.19ms per cell, 5272.73 cells per second), spacerHeights: [0,0], left/right pad: [0,0], 0 single cell rows ISC_Core.js:1317:237
                *10:59:14.459:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 529} ISC_Core.js:1317:237
                *10:59:14.461:TMR6:DEBUG:drawing:isc_ListGrid_0_body:Redraw() - Total time to redraw in DOM:14 ISC_Core.js:1317:237
                *10:59:14.461:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 530} ISC_Core.js:1317:237
                *10:59:14.462:TMR6:DEBUG:recordComponents:isc_ListGrid_0:updateRecordComponents - old record components before refreshing:[
                ] ISC_Core.js:1317:237
                *10:59:14.462:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 531} ISC_Core.js:1317:237
                *10:59:14.462:TMR6:INFO:recordComponents:isc_ListGrid_0:updateRecordComponents - new recordComponents:{}, old record components (will be cleaned up if value is 'true'):{} ISC_Core.js:1317:186
                *10:59:14.462:TMR6:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 532} ISC_Core.js:1317:237
                *10:59:17.384:TMR9:DEBUG:EventHandler:mousing over [Button ID:isc_Button_0] ISC_Core.js:1317:237
                *10:59:17.384:TMR9:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 533} ISC_Core.js:1317:237
                *10:59:18.572:MMV9:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 534} ISC_Core.js:1317:237
                *10:59:18.572:MMV9:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 535} ISC_Core.js:1317:237
                *10:59:18.572:MMV9:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 536} ISC_Core.js:1317:237
                *10:59:18.573:MMV9:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 537} ISC_Core.js:1317:237
                *10:59:18.574:TMR0:DEBUG:EventHandler:mousing over [GridBody ID:isc_ListGrid_0_body] ISC_Core.js:1317:237
                *10:59:18.574:TMR0:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 538} ISC_Core.js:1317:237
                *10:59:19.932:BLR3:DEBUG:nativeFocus:onblur fired on: [Button ID:isc_Button_0] ISC_Core.js:1317:237
                *10:59:19.933:BLR3:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 539} ISC_Core.js:1317:237
                *10:59:19.935:BLR3:DEBUG:nativeFocus:isc_Button_0:$lf(): hasFocus = false ISC_Core.js:1317:237
                *10:59:19.936:BLR3:DEBUG:MessagingDMISocket:isc_MessagingDMISocket_2:$139v: {sendChannel: "1DDCC092-9C86-443D-942D-4F19ADCED205",
                packet: Obj,
                callback: null,
                sequence: 540} ISC_Core.js:1317:237


                Attached Files

                Comment


                  #9
                  For our test we used one of the sample DataSources. Yes, the response data may be different - also, obviously a bunch of other things are going on in your test environment (Messaging, etc), so it seems like you probably didn't really do a standalone test just with that code?

                  As far as determining how DataArrived is being called, you can use traceLogMessage with whatever log message you want to trace. So in this case, you could just use "ONDATAARRIVED" since you are logging that.

                  But of course that's not actually necessary since you can just get a stack trace from GWT in DataArrived.

                  So overall, several good approaches to take here and no reason to read through massive amounts of DEBUG logging - that's not a recommended approach.

                  Comment


                    #10
                    Well yeah, i of course have a server-side jsp that loads the datasources etc, otherwise the server-side datasource wouldn't work. However, the gwt/smartgwt onmoduleload is *just* that code. To clarify, see my exact loading class below.

                    Of course i can filter on my method call, but that doesn't really tell me anything besides that it was called and i already knew that. I gave you the trace so that you could see the contaxt around it that makes my method being called.
                    - I can see a lot of caching, criteria reorganizing logic in the listgrid around the call to my handler for example, but i hoped that it would mean more to you than me.


                    Your sample datasources are client-only from what i know, and i guessed it perhaps had something to do with the data passing over the sockets, that's why i asked, since that would be a differentiating factor.

                    ---

                    Anyway, below is the exact load class i'm running. No own classes, just smartgwt and gwt imports. I have no idea what outside this i could have done that would alter the ondataarrived eventhandling besides the return dsresponse from my spring service, which is why i also included the actual network data contents.

                    I'm not sure what else i can do to provide more data. My JSP and location.ds is also below. To me nothing out of the ordinary.


                    Code:
                    package com.mystuff;
                    
                        import com.google.gwt.core.client.EntryPoint;
                        import com.google.gwt.core.client.GWT;
                        import com.smartgwt.client.data.DataSource;
                        import com.smartgwt.client.types.SelectionStyle;
                        import com.smartgwt.client.util.SC;
                        import com.smartgwt.client.widgets.Button;
                        import com.smartgwt.client.widgets.grid.ListGrid;
                        import com.smartgwt.client.widgets.grid.ListGridField;
                        import com.smartgwt.client.widgets.layout.VLayout;
                    
                        /**
                     * Entry point classes define <code>onModuleLoad()</code>.
                     */
                    public class LoadNuba implements EntryPoint {
                    
                        public void onModuleLoad() {
                    
                            DataSource ds = DataSource.get("location");
                            VLayout layout = new VLayout();
                            layout.setBorder("1px solid blue");
                            layout.setWidth100().setHeight100();
                            ListGrid grid = new ListGrid(DataSource.get("location"));
                            grid.setWidth100().setHeight100();
                            grid.setSelectionType(SelectionStyle.SINGLE);
                            grid.setAutoFetchData(true);
                            grid.setFields(new ListGridField("name", "Name")
                                , new ListGridField("description", "Description"));
                            grid.addDataArrivedHandler(event -> GWT.log("DATAARRIVED, endrow: " + event.getEndRow()));
                    
                            Button button = new Button("Delete");
                            button.addClickHandler(clickEvent -> {
                                if (!grid.anySelected()) {
                                    SC.say("select something");
                                }
                                ds.removeData(grid.getSelectedRecord(), (dsResponse, o, dsRequest) -> GWT.log("DELETED"));
                            });
                            layout.addMember(button);
                            layout.addMember(grid);
                            layout.draw();
                        }
                    }

                    Code:
                    <?xml version="1.0" encoding="UTF-8"?>
                    <DataSource ID="location" xmlns:fmt="http://www.apache.org/internal/xmlbeans/wsdlsubst">
                        <fmt:bundle basename="com.mystuff.i18n.ds"/>
                        <fields>
                            <field name="id" type="sequence" hidden="true" primaryKey="true"/>
                            <field name="name" type="text" length="64" required="true">
                                <title>
                                    <fmt:message key="name"/>
                                </title>
                            </field>
                            <field name="description" type="text" length="512" required="false">
                                <title>
                                    <fmt:message key="description"/>
                                </title>
                            </field>
                        <operationBindings>
                            <operationBinding operationType="update" operationId="reenable">
                                <serverMethod>handleReenable</serverMethod>
                            </operationBinding>
                            <operationBinding operationType="fetch" operationId="ledger">
                                <serverMethod>fetchUsingLedgerId</serverMethod>
                            </operationBinding>
                        </operationBindings>
                        <serverObject lookupStyle="spring" bean="locationWebService"/>
                    
                    </DataSource>
                    jsp:
                    [code]
                    <!DOCTYPE html>
                    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
                    <%@page contentType="text/html; charset=UTF-8" %>
                    <html>
                    <head>
                    <link rel="icon" href="favicon.ico" type="image/x-icon">
                    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
                    <meta charset="utf-8"/>
                    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
                    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
                    <meta http-equiv="Pragma" content="no-cache">
                    <meta http-equiv="Expires" content="0">
                    <meta content="locale=<%=locale%>" name="gwt:property"/>
                    <title>MyStuff</title>
                    <script> var isomorphicDir = "webclient/sc/";</script>
                    <script>isc_css3Mode = "supported";</script>
                    <script>window.isc_useSimpleNames = false</script>
                    </head>
                    <script src="webclient/sc/modules/ISC_Core.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_Foundation.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_Containers.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_Grids.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_Forms.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_Calendar.js<%=version%>"></script>
                    <script src="webclient/sc/modules/ISC_DataBinding.js<%=version%>"></script>
                    <script type="text/javascript" language="javascript" src="webclient/webclient.nocache.js"></script>
                    <script type="text/javascript" language="javascript" src="skins/n/load_skin.js<%=version%>"></script>
                    <script>isc.PrintCanvas.addProperties({printFrameURL: "skins/n/PrintFrame.html<%=version%>"});</script>
                    <script src="webclient/sc/DataSourceLoader?locale=<%=locale%>&dataSource=location">
                    </script>

                    <!-- OPTIONAL: include this if you want history support -->
                    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1'
                    style="position:absolute;width:0;height:0;border:0"></iframe>
                    </body>
                    </html>

                    Comment


                      #11
                      By a "trace" we mean a standard stack trace for how DataArrived is being called. You seem to have provided a lot of logs, but not a stack trace for this particular call chain as far as we can see - perhaps it was lost in the noise of immense DEBUG logs, but, again, such a trace is easy to get via either traceLogMessage or GWT stack traces.

                      As far as the new code you've posted, it is, again, code we can't run, because it calls your server code that we don't have. We ran a seemingly equivalent test using a sample DataSource (not a clientOnly DataSource) and got a "not reproducible" result.

                      Also, based on the logs you have provided, it seems you are running the test in an environment with a lot of other things going on (there are Messaging logs, for example).

                      So, we can't reproduce the problem in a well specified environment that we both have, but you claim to reproduce it in an unspecified environment using code we don't have... so just let us know if you can reproduce the problem in an environment we can replicate. Nothing more can be done until you do that.

                      Comment


                        #12
                        Hey there, thanks for quick response and for being patient with me. I'd reeeeally love to understand why i get the event calls.

                        So, i think i have some questions in order to proceed.

                        1. I think i must use tracelogmessage wrong then.
                        I did try yesterday first, by doing SC.traceLogMessage(".*DATAARRIVED.*"); but got nothing.

                        I then turned all debug logging on in the console, and then tracelogmessage got something (which i think is in the trace above :) ): I thought that the entire log would be useful to you as well, for context, but i suppose not.

                        Trace:
                        10:06:14.716:XRP5:INFO:Log:traceLogMessage(): pattern '/.*DATAARRIVED.*/i' matched, stack trace:

                        Canvas.markForRedraw(_1=>undef, undef, undef, undef, undef)
                        "if(isc.$cv)arguments.$cw=this;if(this.isDrawn()&&!this.isDirty()){this.$q9(_1);isc.Canvas.scheduleRedraw(this);this.$q7=true}"
                        isc_Arra_callMethod(_1=>"markForRedraw", _2=>undef, _3=>undef, _4=>undef, _5=>undef, _6=>undef)
                        ListGrid.$25a(_1=>undef)
                        ListGrid.$66d(_1=>0, _2=>29, true)
                        anonymous(startRow=>0, endRow=>29, dataFromCache=>true)
                        dataArrivedObservation(0, 29, true)
                        ResultSet.filterLocalData()
                        ResultSet.updateCache(_1=>"remove", _2=>Array[1], _3=>Obj)
                        ResultSet.handleUpdate(_1=>"remove", _2=>Obj{ID:76286}, _3=>false, _4=>Obj)
                        ResultSet.dataSourceDataChanged(_1=>Obj, _2=>Obj)
                        anonymous(dsResponse=>Obj, dsRequest=>Obj)
                        thunk(dsResponse=>Obj, dsRequest=>Obj)
                        dataChangedObservation(Obj, Obj)
                        DataSource.updateCaches(_1=>Obj, _2=>Obj)
                        [c]DataSource.handleUpdate(_1=>Obj, _2=>Obj)
                        DataSource.fireResponseCallbacks(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj)
                        DataSource.$38b(_1=>Obj{ID:76286}, _2=>Obj, _3=>Obj, _4=>Obj, _5=>Obj)
                        DataSource.$50h(_1=>Obj, _2=>Obj{ID:76286}, _3=>Obj)
                        [c]Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>[RPCManager ID:builtinApplication], _5=>undef)
                        Class.fireCallback(_1=>Obj, _2=>"rpcResponse,data,rpcRequest", _3=>Array[3], _4=>undef)
                        [c]RPCManager.__fireReplyCallback(_1=>Obj, _2=>Obj, _3=>Obj, _4=>Obj{ID:76286})
                        anonymous(callback_0_g$=>Obj, request_0_g$=>Obj, response_0_g$=>Obj, data_0_g$=>Obj{ID:76286})
                        [c]RPCManager.fireReplyCallbacks(_1=>Obj, _2=>Obj)
                        [c]RPCManager.performOperationReply(_1=>Obj, _2=>Obj)
                        [c]RPCManager.$39d(_1=>2)
                        [c]RPCManager.performTransactionReply(_1=>2, _2=>"//isc_RPCResponseStart-->[{affectedRows:..."[151], _3=>undef)
                        callback(transactionNum=>2, results=>[object XMLHttpRequest], wd=>undef)
                        "isc.RPCManager.performTransactionReply(transactionNum,results,wd)"
                        ** recursed on [c]Class.fireCallback
                        So, that is the stack trace i guess?


                        2. The "messaging logs" you refer to. I'm not sure what that might be, i am not using it in the app i think. In my gwt.xml i do have. (for event queueing)
                        <inherits name='com.google.web.bindery.event.EventBinder'/>
                        <inherits name="com.google.gwt.precompress.Precompress"/-->
                        Is that it? Anyway i turned it off and still got the call.

                        Comment


                          #13
                          Thanks for the stack trace. The key part is that call to filterLocalData(). Because the data is refiltered, we fire DataArrived because the end user might be looking at a completely different record set. That is correct and intended for a local filter that applies new criteria, but erroneous here.

                          This is queued to be looked at, but doesn't have very high priority, since over-notifying like this should be pretty easy to work around (eg, set a one-time flag to ignore this known over-notification, or just make sure that it doesn't matter if the code that responds to dataArrived runs multiple times).

                          Comment


                            #14
                            OK great that you at least found the root cause, and that it wasn't me. I am not sure why the "filterlocaldata" is called? As you have seen in the code and config, i'm not doing anything.

                            I have to say i don't understand "because the data is refiltered". I haven't configured the listgrid or datasource in any way, so i take it this means that whenever you add this listener, it always gets called on add and delete requests? In that case, i cannot see why you said you didn't see it when you tested.

                            The reason i'm using this is that i use the dataarrived to select certain records for display based on certain things when data arrives. There is no way for me to know how and when the event call is "real". It is called whenever a record is deleted or added, that makes it hard to set flags, unless i set some global client-flag "DATA IS BEING ADDED", which is pretty hacky. It's a shame that there is no parameter in the dataarrivedevent i can query.

                            Ok, unfortunate that it is unprioritized, to me it's strange that a dataarrivedlistener gets triggered in various situations when data doesn't arrive.

                            Comment


                              #15
                              The problem appear to only happen with a small enough dataset that local filtering is enabled. We used a sample DataSource that had significant data in it.

                              Extra notifications of this kind evidently don’t bother others, since this has never been reported. But if you can explain the use case where it become important to never receive redundant notifications, we can either point you to a better approach or possibly raise the priority of a fix since someone else may be affected.

                              Comment

                              Working...
                              X