Community Tip - Learn all about PTC Community Badges. Engage with PTC and see how many you can earn! X
Hello,
I have been struggling to get a function working where I check for if a filter query is coming into a service empty (no filter has been added).
First I thought it was just a normal JSON and tried to use .length().
But by doing so I receive this error message in the output:
I have also tried using isEmpty(), but receive the same error message as with .length().
So my only conclusion is that this type is not actually a JSON type.
Some other "issue" is that when logging out the value, it can be undefined OR just '{}', I guess depending on if we have had a filter after first load or not.
Any help with this would be much appreciated.
Regards,
Solved! Go to Solution.
Hi @jensc ,
Can you let me know what widget you are using in your mashup? I did a test with the legacy data filter widget in 9.1.5 and the output in the Firefox debugger shows the JSON being properly formatted.
{"FilterQuery":{"filters":{"fieldName":"name","type":"LIKE","value":"test*"}}}
I also verified that the Query datatype should be JSON format and the 9.3 Composer enforces this structure when testing.
As for validating if the JSON is empty when properly formatted I have the following two solutions as the length method is not defined.
ThingWorx 9.1
let isEmpty = true;
for( let x in FilterQuery )
{
isEmpty = false;
break;
}
if(FilterQuery && !isEmpty)
{
result = "Filter is not empty";
}
else
{
result = "Filter is empty";
}
ThingWorx 9.3
if(FilterQuery && Object.keys( FilterQuery).length > 0)
{
result = "Filter is not empty";
}
else
{
result = "Filter is empty";
}
Thanks,
Travis
Hi
See if this helps:
var cities = "";
// Should be empty
if (cities.isEmpty()) {
return "Empty";
} else {
return "'" + cities + "'";
}
Regards
Pravin Pradhan
Hello,
I'm not sure how this would help with checking if an input of type query is empty or not...
Isn't this just checking if the empty string "cities" is empty or not?
Regards,
If you try something like the following it should help with your initial null or undefined checks:
if( FilterQuery && FilterQuery.length() > 0 )
{
// not empty, do processing
}
The other option is to explicitly check FilterQuery against null and undefined. Your observations are correct the incoming value for FilterQuery depends alot on how the services is being called.
Thanks,
Travis
Hello,
I have kind of tested this before, but ran it again just to make sure.
My service looks like this:
Running this with this input:
The input I get from the payload in F12:
This still gives me the same "error".
I'm not sure, maybe the data in the payload is not correct?
I am running this on a 9.1.12 platform, so maybe this also plays a role.
Thanks,
Hi @jensc
Yes, there appears to be an issue with your payload. You will need double quotes around you keys in the JSON,
{ "filters":{"fieldName": "Machine", "type": "LIKE", "value":"3*"}}
I missed the original type of your input being set to Query and not JSON for the service.
If you have the input set to JSON, Composer will flag the input as incorrect format, but for some reason when it is set to Query it does not.
Thanks,
Travis
Hello @TravisPickett ,
Yes, I noticed that it is not a "correct" JSON format, but I'm not sure if the "query" input type is supposed to be of "JSON" format.
The payload is what I get from using the advanced data filter:
And it does work with the query intotable function.
var param = {
query: FilterQuery,
t: allData
};
resultInfo = Resources["InfoTableFunctions"].Query(param);
So if it comes in as "almost" a JSON object, how could I check if it is empty or not?
I can't seem to use the JSON.stringify() on it, nor the .toString().
I have had another forum post in regards to JSON input variables before and was told it is a Java JSON wrapper and not a JS JSON.
Maybe this is similar?
Hi @jensc ,
Can you let me know what widget you are using in your mashup? I did a test with the legacy data filter widget in 9.1.5 and the output in the Firefox debugger shows the JSON being properly formatted.
{"FilterQuery":{"filters":{"fieldName":"name","type":"LIKE","value":"test*"}}}
I also verified that the Query datatype should be JSON format and the 9.3 Composer enforces this structure when testing.
As for validating if the JSON is empty when properly formatted I have the following two solutions as the length method is not defined.
ThingWorx 9.1
let isEmpty = true;
for( let x in FilterQuery )
{
isEmpty = false;
break;
}
if(FilterQuery && !isEmpty)
{
result = "Filter is not empty";
}
else
{
result = "Filter is empty";
}
ThingWorx 9.3
if(FilterQuery && Object.keys( FilterQuery).length > 0)
{
result = "Filter is not empty";
}
else
{
result = "Filter is empty";
}
Thanks,
Travis
Hello @TravisPickett
Thank you for your reply. I'll try to answer all of your points.
For what widget I am using, I am using this:
I assume it is this extension:
I am on this version of TWX:
This is the payload in Chrome developer tool:
I suppose it could be that this is just a bug in this version.
We are upgrading to a 9.3 instance soon so I will try it out again when we have migrated.
Thank you very much for your help!