Is it somehow possible to create a map or dictionary using variables for the keys? For example, is there some way for me to do something like a!map(localvar1:local!var2) to make a user generated map? Or maybe use a foreach loop over a 2d array to convert it to a map?
Discussion posts and replies are publicly visible
AFAIK there isn't any way to define the key within a!map() dynamically like this. This sounds like a situation I would utilize the database to maintain dynamically defined key-value pairs, where the user can enter both and you can reference them where you need via a!queryEntity().
What is the use case?
I was wanting to use a!setGroupAttributes to make an interface that sets attributes on groups. The function requires a dictionary of attributes to set them and ideally I'd like the interface to allow one to set both the attribute names and values.
Hi Marco,
The only way I've found of doing this is utilising JSON. Is below sort of what you're looking for?
a!localVariables( local!keys: { "keyOne", "keyTwo", "keyThree" }, local!values: { 117, "Appian", now() }, local!keysAsJson: concat( "{", a!forEach( items: local!keys, expression: concat( char(34), fv!item, char(34), ":", char(34), char(34), if( fv!isLast, {}, "," ) ) ), "}" ), local!keysAsDictionary: a!fromJson(local!keysAsJson), reduce( a!update, local!keysAsDictionary, merge( local!keys, local!values ) ) )
That at least LOOKS like what I need. Gonna have to try it out to know for sure!
Let me know how you go. But I would agree with Mike above. The solution I've proposed is only needed if the keys are unknown and attributes of groups is a known thing. Unless I'm misunderstanding your use case I don't believe my solution is required.
I take that back - i think Marco is referring to the "Attributes" functionality provided within Group Types (which I've never used or seen used anywhere), but where the attributes of which are totally arbitrary.
Ooohhh. Yeah, I've never used or seen that either.
Yeah, that's what I was referring to
Works perfectly. Thanks!
Hi, I know it's late, but I thought it'd be good to capture the response here.
You could use reduce with merge to achieve the desired outcome - not sure if all functions were available at the time you asked.
a!localVariables( local!keys: { "keyOne", "keyTwo", "keyThree" }, local!values: { 117, "Appian", now() }, reduce( a!update, a!map(), merge(local!keys, local!values) ) )
Kudos to Dionne OBrien for the coming up with the solution!