Appian Community
Site
Search
Sign In/Register
Site
Search
User
DISCUSS
LEARN
SUCCESS
SUPPORT
Documentation
AppMarket
More
Cancel
I'm looking for ...
State
Not Answered
Replies
7 replies
Subscribers
8 subscribers
Views
4269 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
AI and Rules
I'm working on an expression rule that takes two inputs: an integer value (f
robbier
over 10 years ago
I'm working on an expression rule that takes two inputs: an integer value (fieldname is key), and a CDT array (AnyType) where one of the fields I want to search on is named Key..so MyCDT.Key. The expression rule is actually more complex then this but to isolate my issue I am giving only the specifics here. Anyhow, here is the rule:
= load(
wherecontains(
ri!key,
ri!MyCDT.Key
)
)
I'm getting the following error:
"There was an error testing the rule:
Expression evaluation error at function 'wherecontains' parameter 2 [line 2]:"
I'm pretty certain this has to do with the fact that something is lost in passing something over to the expression rule--that it has no clue what this AnyType is. Perhaps I need to do an explicit cast of my AnyType into a CDT array?
OriginalPostID-140688
OriginalPostID-140688
Discussion posts and replies are publicly visible
Parents
0
robbier
over 10 years ago
The big issue I was having was that I was passing in my CDT array from a rule that I had set up for testing. I was creating the array MyCDT using a data dictionary method (e.g. {{Key:1, Value: "A"},{Key: 2. Value: "B"}, etc etc}. This was some sort of casting issue I was having. When I started testing this rule through a SAIL form (and using a the true CDT array type as ultimately passed in from my process) this problem went away. The other thing I was having a problem with was when my array was either null or zero length. Those two edge conditions were problematic for me, so I needed to test the CDT array against them by using:
if(rule!lengthNullSafe(ri!MyCDT) > 0,
wherecontains(ri!Key,ri!MyCDT.Key),
0
)
The rule, rule!lengthNullSafe, is a simple null safe version of the length function where the array length gets returned as 0 if the array is null. Here is the rule that we created:
if (isnull(ri!input), 0, length(ri!input))
Pretty simple but by making those adjustments I was able to now test for both 0 and null in the array.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Reply
0
robbier
over 10 years ago
The big issue I was having was that I was passing in my CDT array from a rule that I had set up for testing. I was creating the array MyCDT using a data dictionary method (e.g. {{Key:1, Value: "A"},{Key: 2. Value: "B"}, etc etc}. This was some sort of casting issue I was having. When I started testing this rule through a SAIL form (and using a the true CDT array type as ultimately passed in from my process) this problem went away. The other thing I was having a problem with was when my array was either null or zero length. Those two edge conditions were problematic for me, so I needed to test the CDT array against them by using:
if(rule!lengthNullSafe(ri!MyCDT) > 0,
wherecontains(ri!Key,ri!MyCDT.Key),
0
)
The rule, rule!lengthNullSafe, is a simple null safe version of the length function where the array length gets returned as 0 if the array is null. Here is the rule that we created:
if (isnull(ri!input), 0, length(ri!input))
Pretty simple but by making those adjustments I was able to now test for both 0 and null in the array.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Children
No Data