Hello everyone,
I am having issues with querying process report which has multiple (different) values in one column. The column is filled with data from a list of CDTs, for example:
I've tried setting it as a list of integers and strings, but either way, when trying to query all rows which have a value "12345" in that column (by using a!queryProcessAnalytics), I get no results.
a!queryFilter( field: "c4", operator: "includes", value: tostring("12345") )
I also tried all different combinatios (in, includes, strings, integers....).
Thanks in advance!
Discussion posts and replies are publicly visible
In the process report make the C4 field as string with tostring() function and use includes the same way you have posted in the code.
Thanks for the idea, but it does not work in scenarios when there are similar IDs in that column, for example, I would get two results in case I have "12345" and "123456" in different rows.
What you could do more is to build a logic and additionally filter the result set of the initial queryProcessAnalytics.
You could try this one:
a!localVariables( local!resultData: a!queryProcessAnalytics( report: cons!DS_TASK_ASSIGMENT_PBPM, contextProcessModels: cons!DS_PM_TASK_ASSIGNMENT, query: a!query( filter: a!queryFilter( field: "c3", operator: "includes", value: ri!text ), pagingInfo: a!pagingInfo(1, 10) ) ).data.c3, local!splitText: a!forEach( items: local!resultData, expression: fn!split(fv!item, ";") ), local!searchIndexes: wherecontains( ri!text, touniformstring(local!splitText) ), index( local!resultData, local!searchIndexes, null() ) )
This is the result
The solution to this might be to join on a delimiter - that way, you can just do your "includes" operator on the value concatenated with that delimiter, and it should work. I'll need to double-check whether you can easily do the text flattening in the report configuration to join on a delimiter, but I think this is one of the few functionalities that it actually does support.
e.g. for this array-type CDT PV, i just join them in such a way that every value ends up included in [square] brackets - meaning an "includes" would merely need to concat square brackets to your value as well to safely find the whole value you want.
With tostring(), you do the text flattening with semicolon as a delimiter. anak3061 wants the indexes where the search text 12345 exists as a value and is not part of it, like 123456.
I already handled this in the reply I just posted a minute or so before yours - but now I'm waiting for it to be un-spam-blocked by the admins
I get the point what you want to achieve but again you will have to do an additional filtering for getting the exact matching values of the requested search text.
The "includes" filter option is similar to a "like" in a query. But he needs the equal value here.
I fear you're not quite understanding the full capability of the solution I've detailed here. Sorry if my description thus far has been misleadingly vague or something.
The array is concatenated such that the value ends up like "[123][1234][234][456]" (etc). See my previous configuration screenshot for the expression code used to generate this string.
When querying, you use "includes", and the value you pass into the filter is done thus:
operator: "includes",value: "[" & ri!myValue & "]"
This will find exact matches, as I previously said.
Yes, you are right. Will work also