Announcement

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

    loadDataOnDemand performs clientside requests instead of server

    Hi, I'm using SmartClient Version: v12.1p_2020-08-16/Enterprise Development Only (built 2020-08-16).

    I have a TreeGrid with
    loadDataOnDemand: true,
    autoFetchData: true,
    keepParentsOnFilter: true
    defaultIsFolder : true
    modelType: 'parent'
    openProperty: 'isOpen'
    parentIdField: 'parent'

    When the TreeGrid loads, it shows the first level. However, when I expand, it only performs clientside requests (see attachment).

    The initial data response is as follows:

    Code:
    {
        "response": {
            "data": [{
                "activities": null,
                "baseline_items": null,
                "baselines": null,
                "breakdown_structure_types": null,
                "breakdown_structures": null,
                "cause_consequences": null,
                "code": "PAL",
                "contractors": null,
                "created_by": null,
                "created_by_full_name": null,
                "decisions": null,
                "events": null,
                "grants": null,
                "hyperlinks": null,
                "issues": null,
                "items": null,
                "members": null,
                "mitigating_controls": null,
                "name": null,
                "procedures": null,
                "risk_assessments": null,
                "steps": null,
                "type": null,
                "units": null,
                "updated_by": null,
                "updated_by_full_name": null,
                "wbses": null,
                "workstreams": null,
                "active_activities": null,
                "breakdown_structure_type": null,
                "breakdown_structure_type_title": null,
                "classification_cost": null,
                "classification_other": null,
                "classification_scope": null,
                "classification_time": null,
                "comments": null,
                "contractor": null,
                "contractor_led": false,
                "contractor_name": null,
                "contractor_owner_name": null,
                "current_float": null,
                "finish_at": null,
                "isOpen": false,
                "issues_cost": null,
                "issues_other": null,
                "issues_scope": null,
                "issues_time": null,
                "owner": null,
                "owner_user_full_name": null,
                "owner_user_reports_to": null,
                "parent": null,
                "physical_percentage_complete": null,
                "predecessors": null,
                "procedure": null,
                "procedure_name": null,
                "project": null,
                "project_name": null,
                "sharepoint_site": null,
                "start_at": null,
                "status_code": null,
                "successors": null,
                "target_status_code": null,
                "title": "PROJ1",
                "treegrid_group_node": true,
                "treegrid_node_type": "project",
                "unit": null,
                "unit_name": null,
                "user": null,
                "wbs": null,
                "wbs_code": null,
                "wbs_level": null,
                "wbs_p6_code": null,
                "wbs_p6_name": null,
                "workstream": null,
                "workstream_name": null,
                "workstream_reference": null,
                "id": "b021bc3f-75df-4ec6-8388-38933f35e760"
            }, {
                "activities": null,
                "baseline_items": null,
                "baselines": null,
                "breakdown_structure_types": null,
                "breakdown_structures": null,
                "cause_consequences": null,
                "code": "T800",
                "contractors": null,
                "created_by": null,
                "created_by_full_name": null,
                "decisions": null,
                "events": null,
                "grants": null,
                "hyperlinks": null,
                "issues": null,
                "items": null,
                "members": null,
                "mitigating_controls": null,
                "name": null,
                "procedures": null,
                "risk_assessments": null,
                "steps": null,
                "type": null,
                "units": null,
                "updated_by": null,
                "updated_by_full_name": null,
                "wbses": null,
                "workstreams": null,
                "active_activities": null,
                "breakdown_structure_type": null,
                "breakdown_structure_type_title": null,
                "classification_cost": null,
                "classification_other": null,
                "classification_scope": null,
                "classification_time": null,
                "comments": null,
                "contractor": null,
                "contractor_led": false,
                "contractor_name": null,
                "contractor_owner_name": null,
                "current_float": null,
                "finish_at": null,
                "isOpen": false,
                "issues_cost": null,
                "issues_other": null,
                "issues_scope": null,
                "issues_time": null,
                "owner": null,
                "owner_user_full_name": null,
                "owner_user_reports_to": null,
                "parent": null,
                "physical_percentage_complete": null,
                "predecessors": null,
                "procedure": null,
                "procedure_name": null,
                "project": null,
                "project_name": null,
                "sharepoint_site": null,
                "start_at": null,
                "status_code": null,
                "successors": null,
                "target_status_code": null,
                "title": "Skynet",
                "treegrid_group_node": true,
                "treegrid_node_type": "project",
                "unit": null,
                "unit_name": null,
                "user": null,
                "wbs": null,
                "wbs_code": null,
                "wbs_level": null,
                "wbs_p6_code": null,
                "wbs_p6_name": null,
                "workstream": null,
                "workstream_name": null,
                "workstream_reference": null,
                "id": "8761ec06-71f0-481d-9254-d873086bc5b2"
            }, {
                "activities": null,
                "baseline_items": null,
                "baselines": null,
                "breakdown_structure_types": null,
                "breakdown_structures": null,
                "cause_consequences": null,
                "code": "BAK",
                "contractors": null,
                "created_by": null,
                "created_by_full_name": null,
                "decisions": null,
                "events": null,
                "grants": null,
                "hyperlinks": null,
                "issues": null,
                "items": null,
                "members": null,
                "mitigating_controls": null,
                "name": null,
                "procedures": null,
                "risk_assessments": null,
                "steps": null,
                "type": null,
                "units": null,
                "updated_by": null,
                "updated_by_full_name": null,
                "wbses": null,
                "workstreams": null,
                "active_activities": null,
                "breakdown_structure_type": null,
                "breakdown_structure_type_title": null,
                "classification_cost": null,
                "classification_other": null,
                "classification_scope": null,
                "classification_time": null,
                "comments": null,
                "contractor": null,
                "contractor_led": false,
                "contractor_name": null,
                "contractor_owner_name": null,
                "current_float": null,
                "finish_at": null,
                "isOpen": false,
                "issues_cost": null,
                "issues_other": null,
                "issues_scope": null,
                "issues_time": null,
                "owner": null,
                "owner_user_full_name": null,
                "owner_user_reports_to": null,
                "parent": null,
                "physical_percentage_complete": null,
                "predecessors": null,
                "procedure": null,
                "procedure_name": null,
                "project": null,
                "project_name": null,
                "sharepoint_site": null,
                "start_at": null,
                "status_code": null,
                "successors": null,
                "target_status_code": null,
                "title": "PROJ2",
                "treegrid_group_node": true,
                "treegrid_node_type": "project",
                "unit": null,
                "unit_name": null,
                "user": null,
                "wbs": null,
                "wbs_code": null,
                "wbs_level": null,
                "wbs_p6_code": null,
                "wbs_p6_name": null,
                "workstream": null,
                "workstream_name": null,
                "workstream_reference": null,
                "id": "d19b934c-fd1d-4c1d-bbbd-f1797250da6e"
            }, {
                "activities": null,
                "baseline_items": null,
                "baselines": null,
                "breakdown_structure_types": null,
                "breakdown_structures": null,
                "cause_consequences": null,
                "code": "TP",
                "contractors": null,
                "created_by": null,
                "created_by_full_name": null,
                "decisions": null,
                "events": null,
                "grants": null,
                "hyperlinks": null,
                "issues": null,
                "items": null,
                "members": null,
                "mitigating_controls": null,
                "name": null,
                "procedures": null,
                "risk_assessments": null,
                "steps": null,
                "type": null,
                "units": null,
                "updated_by": null,
                "updated_by_full_name": null,
                "wbses": null,
                "workstreams": null,
                "active_activities": null,
                "breakdown_structure_type": null,
                "breakdown_structure_type_title": null,
                "classification_cost": null,
                "classification_other": null,
                "classification_scope": null,
                "classification_time": null,
                "comments": null,
                "contractor": null,
                "contractor_led": false,
                "contractor_name": null,
                "contractor_owner_name": null,
                "current_float": null,
                "finish_at": null,
                "isOpen": false,
                "issues_cost": null,
                "issues_other": null,
                "issues_scope": null,
                "issues_time": null,
                "owner": null,
                "owner_user_full_name": null,
                "owner_user_reports_to": null,
                "parent": null,
                "physical_percentage_complete": null,
                "predecessors": null,
                "procedure": null,
                "procedure_name": null,
                "project": null,
                "project_name": null,
                "sharepoint_site": null,
                "start_at": null,
                "status_code": null,
                "successors": null,
                "target_status_code": null,
                "title": "TestProject",
                "treegrid_group_node": true,
                "treegrid_node_type": "project",
                "unit": null,
                "unit_name": null,
                "user": null,
                "wbs": null,
                "wbs_code": null,
                "wbs_level": null,
                "wbs_p6_code": null,
                "wbs_p6_name": null,
                "workstream": null,
                "workstream_name": null,
                "workstream_reference": null,
                "id": "f2e0688b-3eea-4b5e-ae8c-3ccedc55350b"
            }],
            "status": 0,
            "endRow": 3,
            "startRow": 0,
            "totalRows": 4
        }
    }
    I tried all kinds of combinations of properties, but have no idea where to look next. Please advice.

    Attached Files

    #2
    The [clientOnly] marker in the RPC tab simply means that you have provided a clientOnly:true DataSource to the tree. If the DataSource were not clientOnly, the requests would go to wherever you have configured the DataSource to go to.

    Now, look at the docs for keepParentsOnFilter: note that what it does is set a marker in the DSRequest, which then the DataSource must implement, and, as the docs tell you, our built-in connectors do not. Neither does a clientOnly:true DataSource.

    So you either need fetchMode:"local" or you need to implement a DataSource that provides the keepParentsOnFilter functionality.

    Comment


      #3
      Thanks for the quick answer.

      I have done some more testing, but can't get it to work.
      I explicitly set clientOnly: false, but the behavior is the same.
      If I set clientOnly: true, it doesn't even do the initial load.

      This is the datasource definition:

      Code:
      var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
      
      isc.defineClass('SRDataSource', isc.RestDataSource).addProperties({
        applicationProperties: null,
        authenticityToken: null,
        dataFormat: 'json',
        disableQueuing: true,
        idAsParameter: false,
        jsonPrefix: '',
        jsonSuffix: '',
        operationBindings: [
          {
            operationType: 'fetch'
          }, {
            operationType: 'add',
            dataProtocol: 'postMessage'
          }, {
            operationType: 'update',
            dataProtocol: 'postMessage',
            requestProperties: {
              httpMethod: 'PUT'
            }
          }, {
            operationType: 'remove',
            dataProtocol: 'postMessage',
            requestProperties: {
              httpMethod: 'DELETE'
            }
          }
        ],
        rights: null,
        sendMetaData: false,
        sendOldValues: false,
        sparseUpdates: true,
        getDataURL: function(request) {
          var parts;
          request = isc.addProperties({
            dataFormat: this.dataFormat || 'json',
            operationType: 'fetch'
          }, request);
          parts = this.Super('getDataURL', [request]).replace(':format', request.dataFormat).split('.');
          if (request._id != null) {
            parts[0] += "/" + request._id;
          }
          return parts.join('.');
        },
        mayCreate: function() {
          return indexOf.call(this.rights, 'create') >= 0;
        },
        mayUpdate: function() {
          return indexOf.call(this.rights, 'update') >= 0;
        },
        transformRequest: function(request) {
          var base, ref, transformedRequest;
          request.params || (request.params = {});
          if (request.operationId != null) {
            (base = request.params).operationId || (base.operationId = request.operationId);
          }
          if (((ref = request.data) != null ? ref.id : void 0) != null) {
            if (this.idAsParameter === true) {
              request.params.id = request.data.id;
            } else {
              request._id = request.data.id;
            }
            if (request.operationType !== 'remove') {
              delete request.data.id;
            }
          }
          if (request.operationType === 'fetch') {
            if ((request.startRow != null) && (request.endRow != null)) {
              request.params.offset = request.startRow;
              request.params.limit = request.endRow - request.startRow;
            }
            if (request.fields != null) {
              request.params['fields[]'] = request.fields;
            }
            if (request.sortBy != null) {
              request.params['sorts[]'] = request.sortBy;
            }
          } else {
            if (!this.sendOldValues) {
              request.oldValues = {};
            }
            request.params.authenticity_token = this.authenticityToken;
          }
          transformedRequest = this.Super('transformRequest', [request]);
          delete transformedRequest[this.dataFormatParamName];
          delete request.params[this.dataFormatParamName];
          return transformedRequest;
        }
      });
      
      
      isc.defineClass('ApplicationDataSource', isc.SRDataSource).addProperties({
          authenticityToken: "xxx",
          clientOnly: false,
          cacheAllData: true,
          getDataURL: function() {
            var project, url;
            url = this.Super('getDataURL', arguments).replace(':locale', LOCALE);
            if (url.indexOf(':project_id') === -1) {
              return url;
            }
            project = (typeof this.applicationProperties === "function" ? this.applicationProperties() : void 0) || this.applicationProperties;
            if (project !== null) {
              return url.replace(':project_id', project.id);
            }
            return url.replace(':project_id', 'user_landing');
          },
          getPreferences: function() {
            return (this.applicationProperties.preferences || {})[this.moduleName] || {};
          },
          setPreferences: function(modulePreferences) {
            var base;
            this.applicationProperties || (this.applicationProperties = {});
            (base = this.applicationProperties).preferences || (base.preferences = {});
            return this.applicationProperties.preferences[this.moduleName] = modulePreferences;
          }
      });
      The server is capable of returning the proper data for keepParentsOnFilter. The problem I have is that no requests are being sent to the server.

      Comment


        #4
        Oh, you set cacheAllData:true. See the docs for that. It basically gets all the data from the server up front, and then behaves like a clientOnly DataSource. So after that first fetch, server logic isn't involved.

        It's not clear why you're using this setting, as usually it's meant for smaller datasets that don't change. If it wasn't inadvertent or temporary, you can apply it only to a particular operationId, or just have two DataSources, one with the setting and one without.

        Comment


          #5
          Thank you, this fixed it

          Comment

          Working...
          X