6 Replies Latest reply on Apr 27, 2016 1:10 PM by chadha RSS
    ahanchat Explorer

    Why doesn't FindDataTableEntries work with multiple values is given Values infotable

    When I happen to use FindDataTableEntries on DataTable, by setting multiple rows in Values Infotable, I get an error as below

     

    Unable to Invoke Service FindDataTableEntries on WA_SampleGuidNameProductionValueTable : Invalid Number of values provided to FindDataTableEntries in WA_SampleGuidNameProductionValueTable

     

    But FindDataTableEntries work for single row in Values infotable.

      • Re: Why doesn't FindDataTableEntries work with multiple values is given Values infotable
        aanjan Heavyweight Champ

        Anirudha, I believe FindDataTableEntries input parameter is not intended to work with a multiple row infotable. It only accepts a single row infotable, tries to match the specified values and then print them.

          • Re: Why doesn't FindDataTableEntries work with multiple values is given Values infotable
            ahanchat Explorer

            Ok, Then which service to use if I have multiple values.

            I tried using QueryDataTableEntries as below, but I don't get any values. What is the right way to use QueryDataTableEntries?

            I appreciate your reply, I am stuck into an critical issue and it is affecting our production server. Please help.

             

            >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

            var str1 = "19be81d24259853a99fc15fdcda63934521bae29";

            var str2 = "2052527c1afe8af884d387d544ab2d2b3c0e1ab9";

             

            var jsonArray = [str1, str2];

             

            var query = {

                filters: {

                    type : "EQ",

                    fieldName : "guid",

                    values: jsonArray

                }

            };

             

            var values = me.CreateValues();

             

            var params = {

                maxItems: undefined /* NUMBER */,

                values: values /* INFOTABLE*/,

                query: query /* QUERY */,

                source: undefined /* STRING */,

                tags: undefined /* TAGS */

            };

             

            // result: INFOTABLE dataShape: "undefined"

            var result = me.QueryDataTableEntries(params);

            <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

              • Re: Why doesn't FindDataTableEntries work with multiple values is given Values infotable
                ahanchat Explorer

                Please note that there is typo, The type I have used is "IN"

                • Re: Why doesn't FindDataTableEntries work with multiple values is given Values infotable
                  chadha Apprentice

                  Maybe you can call FindDataTableEntries twice (once for each different value), and then join the results together.

                    • Re: Why doesn't FindDataTableEntries work with multiple values is given Values infotable
                      ahanchat Explorer

                      If I try doing a call FindDataTableEntries twice (once for each different value), and then join the results together, then showhow I am getting an error in the stack due to which the CPU is getting utilized heavily.

                       

                      The code snippet is as below

                       

                      >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                      for (var x = 0; x < tableLength; x++) {

                          var str = scns.rows[x].strVal.toString();

                         

                          var values = me.CreateValues();

                          values.str= str; //STRING

                       

                          var params = {

                              values: values /* INFOTABLE*/

                          };

                       

                          // result: INFOTABLE dataShape: "undefined"

                          var queryresult = me.FindDataTableEntries(params);

                         

                          var tableSize = queryresult.rows.length;

                       

                          for (var x = 0; x < tableSize; x++) {

                              var entry = new Object();       

                              entry.guid = queryresult.rows[x].guid.toString();

                              entry.guidname = queryresult.rows[x].guidname.toString();

                              result.AddRow(entry)

                          }

                      }

                      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                       

                      The stacktrace is as below.


                      "ajp-nio-8009-exec-4" #355 daemon prio=5 os_prio=0 tid=0x00007f0958008000 nid=0x5e72 runnable [0x00007f0a52988000]

                         java.lang.Thread.State: RUNNABLE

                              at java.lang.StringCoding.decode(StringCoding.java:229)

                              at java.lang.String.<init>(String.java:463)

                              at java.lang.String.<init>(String.java:515)

                              at com.thingworx.common.utils.EnhancedDataInputStream.readUTF8(EnhancedDataInputStream.java:35)

                              at com.thingworx.types.primitives.StringPrimitive.readFromStream(StringPrimitive.java:98)

                              at com.thingworx.types.BaseTypes.ReadPrimitiveFromStream(BaseTypes.java:736)

                              at com.thingworx.types.data.util.ValueCollectionSerializer.fromBinary(ValueCollectionSerializer.java:89)

                              at com.thingworx.types.data.util.ValueCollectionSerializer.fromByteArray(ValueCollectionSerializer.java:136)

                              at com.thingworx.persistence.neo4j.factories.data.NeoDataEntryDataProvider.readDataEntryFromNeo(NeoDataEntryDataProvider.java:61)

                              at com.thingworx.persistence.neo4j.factories.data.NeoDataTableEntryDataProvider.getDataTableEntry(NeoDataTableEntryDataProvider.java:289)

                              at com.thingworx.persistence.neo4j.factories.data.NeoDataTableEntryDataProvider.rawQueryEntries(NeoDataTableEntryDataProvider.java:242)

                              at com.thingworx.persistence.neo4j.factories.data.NeoDataTableEntryDataProvider.queryEntries(NeoDataTableEntryDataProvider.java:528)

                              at com.thingworx.persistence.neo4j.factories.data.NeoDataTableEntryDataProvider.queryEntries(NeoDataTableEntryDataProvider.java:538)

                              at com.thingworx.persistence.common.DataTableEngine.lambda$findEntries$69(DataTableEngine.java:229)

                              at com.thingworx.persistence.common.DataTableEngine$$Lambda$60/580017954.get(Unknown Source)

                              at com.thingworx.persistence.common.BaseEngine.createTransactionAndReturn(BaseEngine.java:174)

                              at com.thingworx.persistence.common.DataTableEngine.findEntries(DataTableEngine.java:226)

                              at com.thingworx.datatables.DataTableThing.FindDataTableEntries(DataTableThing.java:738)

                              at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)

                              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                              at java.lang.reflect.Method.invoke(Method.java:497)

                              at com.thingworx.common.processors.ReflectionProcessor.processService(ReflectionProcessor.java:119)

                              at com.thingworx.handlers.ReflectionServiceHandler.processService(ReflectionServiceHandler.java:47)

                              at com.thingworx.things.Thing.processServiceRequestDirect(Thing.java:4578)

                              at com.thingworx.things.Thing.processServiceRequest(Thing.java:4501)

                              at com.thingworx.dsl.engine.adapters.VirtualFunction.call(VirtualFunction.java:131)

                              at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)

                              at org.mozilla.javascript.gen.WA_getGuidAndGuidNames2Columns_922._c_script_0(WA_getGuidAndGuidNames2Columns:21)

                              at org.mozilla.javascript.gen.WA_getGuidAndGuidNames2Columns_922.call(WA_getGuidAndGuidNames2Columns)

                              at org.mozilla.javascript.gen.WA_getGuidAndGuidNames2Columns_922.exec(WA_getGuidAndGuidNames2Columns)

                              at com.thingworx.dsl.engine.DSLProcessor.executeService(DSLProcessor.java:154)

                              at com.thingworx.dsl.DSLServiceHandler.processService(DSLServiceHandler.java:38)

                              at com.thingworx.things.Thing.processServiceRequestDirect(Thing.java:4578)

                              at com.thingworx.things.Thing.processServiceRequest(Thing.java:4501)

                              at com.thingworx.dsl.engine.adapters.VirtualFunction.call(VirtualFunction.java:131)

                              at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)

                              at org.mozilla.javascript.gen.WA_getGuidNames_948._c_script_0(WA_getGuidNames:20)

                              at org.mozilla.javascript.gen.WA_getGuidNames_948.call(WA_getGuidNames)

                              at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)

                              at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3090)

                              at org.mozilla.javascript.gen.WA_getGuidNames_948.call(WA_getGuidNames)

                              at org.mozilla.javascript.gen.WA_getGuidNames_948.exec(WA_getGuidNames)

                              at com.thingworx.dsl.engine.DSLProcessor.executeService(DSLProcessor.java:154)

                              at com.thingworx.dsl.DSLServiceHandler.processService(DSLServiceHandler.java:38)

                              at com.thingworx.things.Thing.processServiceRequestDirect(Thing.java:4578)

                              at com.thingworx.things.Thing.processAPIServiceRequest(Thing.java:4513)

                              at com.thingworx.webservices.BaseService.handleInvoke(BaseService.java:2513)

                              at com.thingworx.webservices.BaseService.service(BaseService.java:306)

                              at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

                       

                      Thanks

                      Anirudha