List filter
List filter will give you the ability to filter complex lists, created with data models, used in your process.
The user wishes to check if a certain user of his application/platform has created more than one account, the only way to check is by filtering by phone number. The result should be a list of the accounts that used the specific phone number to register.
How toο»Ώο»Ώ
Step 1. Create a new process and give it a name.

Step 2. Create the data model.

Step 3. Add the needed variables.

- ο»Ώ<%accounts%> - input variable of type Accounts (the data model we created in the previous step). We will give it as a default value the following, there is one number (+51Β 284Β 665Β 4128) used for two accounts.
- ο»Ώ<%Result%> - output variable of type Accounts (the data model we created in the previous step).
Step 4. Configure the List filter action.

FieldName: will specify the "PhoneNumber" as the field we ill check for.
Exact: an exact match needs to be validated (=) against FilterExpression
FilterExpression: in our example we will filter using "+51Β 284Β 665Β 4128".
The KeepIfTrue setting describes if that particular match is valid if the filter criteria should keep the record or not. If KeepIfTrue = true, then the record will be kept, otherwise, it will not be kept.
Step 6. Save, Validate and Run the process.
Step 7. Add the input data and click Run.

Step 8. Click Check instances.

Step 9. The variable <%Result%> will contain the duplicate accounts.

List filter Explainedο»Ώο»Ώ
Parameters:
- Input (required): List to filter
- Input (required): Configuration - tthis entry will allow JSON
- Output (required): List<object> of the filtered items
JSON Configuration:
MatchType types:
Exact: an exact match needs to be validated (=) against FilterExpression
Similar: it compares against FilterExpression to see:
- if special characters do not exist, E.g. John-Doe and John Doe are a match (before comparing it replaces special characters and space characters with string.empty).
- phone numbers E.g. 376-323-1111 and 323-1111 are a match (if after replacing special characters and spaces with string.empty the string contains only numbers, a Field1 contains Field2 OR Field2 contains Field1 assessment is made)
- regardless of whether WWW, HTTP(s)://, exists to enhance domain or URL comparison
- if an email is written with @ or " at " or "[at]" should be a match
Fuzzy: this should use the Algos available in StringSimilarity Action to compare the field against FilterExpression (read this for more details: )
Contains: this checks if Field contains FilterExpression OR FilterExpression contains Field
Soundex: this checks if the Field and FilterExpression are similar if you would speak them. See complementation example: ). This matching algorithm evaluates the distance in βsoundingβ on a scale from 0 to 4, where 4 means the most similar βsoundingβ and 0 means that the words are very different.
SimilarWordMatch: This checks if the first N words in the Field are the same as the first N words in FilterExpression OR if the last N words in the Field are the same as the last N words in FilterExpression.
RegEx: This checks if the Field is a valid match of the pattern from FilterExpression. The RegEx FilterExpression needs to be made JSON safe/encoded (e.g. by using ).
FuzzyAlgorithm and FuzzyThresholdproperties are only used when MatchType = Fuzzy. If MatchType is something else, those properties will be ignored so, they can be null or can even not be present.
SimilarFirstNwords and SimilarLastNwords properties are only used when MatchType = SimilarWordMatch in which case at least one should be >0. If both are =0 then the SimilarWordMatch will not be executed at all since it does not make sense. If MatchType is something else, those properties will be ignored, so, they can have any value or can even not be present.
SoundexDistance: This is used only when the MatchType = Soundex and it can be set 0, 1, 2, 3 or 4, where 4 means the words are very similar when spoken.
The AlternateFields setting describes if the data that normally resides on a certain field might be found in another field as well. The consequence of setting alternate fields for a particular field is that when evaluating a match for a certain field, the same match assessment will be executed for the alternate fields as well and the result of all those alternate matches will be evaluated with OR to determine the result of the overall match. For example, when executing the match for Field1 in the JSON example above ("MatchType":"Exact"), because for Fields1 we have alternate fields ("FieldAlternateNames":["Field2","Field3"]) the same match will be executed for Fields: Fields2 & Fields3 and, to determine if we have a field match for a certain Match setting, the following operation will be executed (pseudo-code):
If Fields1 has the alternate fields Field2 & Field3 does not mean that Field2/Field3 has Field1 as an alternate field.
The KeepIfTrue setting describes if that particular match is valid if the filter criteria should keep the record or not. If KeepIfTrue = true, then the record will be kept, otherwise, it will not be kept.
The matching algorithms work only on Fields that are of type primitive and not on data structures. A Row Match is TRUE only if all matches are TRUE, so the evaluation looks like this (pseudo-code for the JSON config from above):
IMPORTANT: If you have alternative fields for a match and the KeepIfTrue = true, then the match will be true if ANY (at least one) of the evaluations of the main OR the alternative fields is true.
IMPORTANT: If you have alternative fields for a match and the KeepIfTrue = false, then the match will be true if ALL of the evaluations of the main AND the alternative fields are false.
ο»Ώ

