Hi Experts,
Below Block-A code line is working fine, whereas Block-B is not working even though "tointeger(index(rule!AB_getReviewKey(key: 100),"reviewkey",null()))" is returned 2.
Any comments please.
----------------------- Block-A -------------------------
a!localVariables(local!reviewkey: 2,local!excludeKeys: if(local!reviewkey = 2,{ 1, 3, 4},if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 })),local!excludeKeys)
----------------------- Block-B -------------------------
a!localVariables( local!reviewkey: tointeger(index(rule!AB_getReviewKey(key: 100),"reviewkey",null())), local!excludeKeys: if( local!reviewkey = 2, { 1, 3, 4}, if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 }) ), local!excludeKeys)
Discussion posts and replies are publicly visible
Are you sure
tointeger(index(rule!AB_getReviewKey(key: 100),"reviewkey",null()))
Can you please provide us with more info like the error message or something like output so that so that we can tell what wrong is going on.
If I pass 2 or 5, I am able to see the local!excludeKeys with required array o/p, whereas when I use the expression rule it is not working.
In my expression rule I am using .data at the end and when it test I was getting integer output only.
Is some thing wrong with my any type conversion here.
In the first, second screen shots I am getting the required o/p where as in last screen shot, instead of getting an array o/p, I am just getting 1 as an o/p and which is of type List of Number (integer).
a!localVariables( local!reviewkey: 2, local!excludeKeys: if( local!reviewkey = 2, { 1, 3, 4}, if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 }) ), local!excludeKeys)
o/p:
-------------------
a!localVariables( local!reviewkey: 5, local!excludeKeys: if( local!reviewkey = 2, { 1, 3, 4}, if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 }) ), local!excludeKeys)
----------------------
a!localVariables( local!reviewkey: tointeger(index(rule!AB_getReviewKey(key: 100),"reviewkey",null())), local!excludeKeys: if( local!reviewkey = 2, { 1, 3, 4}, if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 }) ), local!excludeKeys
)
O/P:
Could it be that "local!reviewkey" is a list of integers in your last example?
Try the below snippet. This is a weird edge case in the evaluation of the comparison operator.
if({1} = 2, {1,2}, {3,4})
Yes Stefan.
returning list of Number (integer)
You should amend rule!AB_getReviewKey to return a single item if the expected output is always single. If it isn't, then you should use square brackets or index() when calling it in order to get a single value into your local variable.
Also, when posting code snippets (even short ones like this) please use a Code Box and make sure to paste indented code - it makes it much easier to read / mentally process for us.
a!localVariables( local!reviewkey: tointeger( index( /* use index() to get an index (1) */ property(rule!AB_getReviewKey(key: 100), "reviewkey", null()), /* use property() to get a property (.reviewKey) */ 1, null() ) ), local!excludeKeys: if( local!reviewkey = 2, { 1, 3, 4}, if(local!reviewkey = 5, { 1,3,4,5,6 }, {1,2,3 }) ), local!excludeKeys )
Thank you Mike for your help.