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
9 replies
Subscribers
7 subscribers
Views
3098 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
AI and Rules
Is there a straight forward way to save to an individual field within a multi-va
shamec
over 8 years ago
Is there a straight forward way to save to an individual field within a multi-value CDT variable in SAIL? For example having a customer CDT and trying to populate auto-generated IDs for all the customers as part of a component saveInto, the pseudo-code below doesn’t work:
a!save(local!customers.id, enumerate(length(local!customers)) + 1) - this will save the first target value index(1 in this case) into all customer IDs instead of saving them correctly as 1,2,3...
a!save(local!customers.id[enumerate(length(local!customers)) + 1], enumerate(length(local!customers)) + 1) - still same behavior as above
The problem seems to be that you can specify a list of indices on the left hand side of the a!save function but there doesn't seem to be a way to specify a list of new values on the right hand side - the function is expecting a single value or a rule/function reference. It also looks like the a!save function cannot be placed within looping f...
OriginalPostID-157710
OriginalPostID-157710
Discussion posts and replies are publicly visible
Parents
0
shamec
over 8 years ago
The plugin works but with some quirks. I was able to make it work by externalizing the code below is a separate rule and calling that rule within an apply function:
/*rule!updateCustomerID*/
updateCDT(ri!customer, {id: ri!id})
/*rule!updateCustomerIDs*/
apply(rule!updateCustomerID(_, _), merge(local!customers, enumerate(length(local!customers)) + 1))
One issue I observed is that the plugin function fails with an exception when trying to clear a field(set to null):
updateCDT(ri!customer, {id: null}) - this will always fail with an exception
updateCDT(ri!customer, {id: ""}) - this seems to work but makes it hard to use this in a dynamic way with a functional that can return null and non-null values at run time
Also this uses Appian dictionaries making it quite difficult to make this code dynamic and generic since this requires being able to dynamically create dictionary keys which is not very well-supported. I was able to do this is a pretty fragile way using a recently introduced json function: jsontodictionary("{"""&tostring(ri!field)&""": "&ri!value&"}")!
Haven't decided which way to go yet but at least I've several options...
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Reply
0
shamec
over 8 years ago
The plugin works but with some quirks. I was able to make it work by externalizing the code below is a separate rule and calling that rule within an apply function:
/*rule!updateCustomerID*/
updateCDT(ri!customer, {id: ri!id})
/*rule!updateCustomerIDs*/
apply(rule!updateCustomerID(_, _), merge(local!customers, enumerate(length(local!customers)) + 1))
One issue I observed is that the plugin function fails with an exception when trying to clear a field(set to null):
updateCDT(ri!customer, {id: null}) - this will always fail with an exception
updateCDT(ri!customer, {id: ""}) - this seems to work but makes it hard to use this in a dynamic way with a functional that can return null and non-null values at run time
Also this uses Appian dictionaries making it quite difficult to make this code dynamic and generic since this requires being able to dynamically create dictionary keys which is not very well-supported. I was able to do this is a pretty fragile way using a recently introduced json function: jsontodictionary("{"""&tostring(ri!field)&""": "&ri!value&"}")!
Haven't decided which way to go yet but at least I've several options...
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Children
No Data