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
5 replies
Subscribers
7 subscribers
Views
1927 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
AI and Rules
Hi I have two arrays , one for the #MaterialCode and one for the #SerialNumbers
danielem
over 8 years ago
Hi I have two arrays , one for the #MaterialCode and one for the #SerialNumbers
Arrays are alrady sorted.
what I need to obtain is an array of [#MaterialCode,#ListofSerialNumber] list of serial Numbers for each #MaterialCode
Example:
#MaterialCode : {083813291400, 083813291400, 083813291400, 083816316600, 083816316600}
#SerialNumbers: {BB, DD, EE, XX, YY}
Desire Output should be:
{
{083813291400,"BB,DD,EE"},
{083816316600, "XX , YY"}
}
Thank you in advanced
OriginalPostID-153181
OriginalPostID-153181
Discussion posts and replies are publicly visible
0
mmukofsky
over 8 years ago
Does the use case allow for this to be done in process? If so, I would use one script task to determine the distinct material codes (rule!APN_distinct) and then in the next node you can MNI over that list of distinct materical codes. I used the following expression in the data output of the MNI node appending to my array on each iteration:
append(pv!distinctMaterialCodes[tp!instanceindex],index(pv!serialNumbers,wherecontains(pv!distinctMaterialCodes[tp!instanceindex],pv!materialCodes),{}))
Attached a screenshot of the resulting variables. It's not complete, but maybe will put you in the right direction.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
Amitkumar
over 8 years ago
This can be done easily by creating two expression rules. Parent rule will have to do apply on other another rule to format material code and serial numbers. First thing, material codes are too big for an integer data type. So, I converted them into text data type and formatted them desired output that you need.
Here is the code that you can take a look. You can add more exception handling, and pass different list of input to local variables.
Main rule :
load(
local!materialCodes :{"083813291400", "083813291400", "083813291400", "083816316600", "083816316600"},
local!serialNumbers:{"BB", "DD", "EE", "XX", "YY"},
apply(
rule!formatMaterialCodeAndSerialNumbers,{union(local!materialCodes,local!materialCodes)},local!materialCodes,local!serialNumbers)
)
Rule : formatMaterialCodeAndSerialNumbers
{ri!int_materialCode,
joinarray(
index(ri!text_listOfSerialNumbers,
fn!wherecontains(tostring(ri!int_materialCode),apply(fn!tostring,ri!int_listOfMaterialCodes)),""),",")
}
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
Amitkumar
over 8 years ago
Here it is the result after execution.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
danielem
over 8 years ago
Hi, first of all thank you for your support.
I followed your suggestions but unfortunately my rule doesn't work. Attached the error print screen.
Any suggestions?
Thanks again
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
Lakshmi Meyyappan
over 8 years ago
It looks like your helper rule has inputs material code, list of serial numbers, list of material codes. But you're passing it in as material code, list of material codes, list of serial numbers. Try switching the order of inputs to match, or use the input names in your function call e.g.
apply(
rule!formatMaterialCodeAndSerialNumbers(int_materialCode: _, text_listOfSerialNumbers: local!serialNumbers, int_listOfMaterialCodes: local!materialCodes),
union(local!materialCodes,local!materialCodes)
)
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel