forked from alexed1/LightningFlowComponents
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FindText.cls
86 lines (66 loc) · 3.36 KB
/
FindText.cls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public with sharing class FindText {
@InvocableMethod
public static List<Results> execute(List<Requests> requests) {
List<Results> responseWrapper = new List<Results>();
for (Requests curRequest : requests) {
Results response = new Results();
response.foundStringCollection = new List<String>();
switch on curRequest.searchType {
when 'prefixSearch' {
//the regex id=(.{15}) captures the first 15 characters following the string 'id='
String matchPattern = '(?<=' + curRequest.prefix + ').{' + curRequest.length + '}';
Pattern MyPattern = Pattern.compile(matchPattern);
Matcher MyMatcher = MyPattern.matcher(curRequest.inputString);
while (MyMatcher.find())
{
System.debug('Start index: '+ MyMatcher.start());
System.debug(' End index: ' + MyMatcher.end() + ' ');
System.debug(MyMatcher.group());
response.foundStringCollection.add(MyMatcher.group());
}
System.debug('done finding');
}
when 'betweenSearch' {
// this substring function will find the prefix (value before) and sufix (value after) and return a string between.
String substring = curRequest.inputString.substringAfter(curRequest.prefix).substringBefore(curRequest.suffix);
response.foundStringCollection.add(substring);
}
when 'prefixtoendSearch' {
// this substring will take a prefix (value before) and go to the end of the text
String substring = curRequest.inputString.substringAfter(curRequest.prefix);
response.foundStringCollection.add(substring);
}
when else { // default block, optional
throw new InvocableErrorException('currently the supported search types for the FindText action are: prefixSearch, betweenSearch, prefixtoendSearch');
}
}
if (!response.foundStringCollection.isEmpty()) {
response.foundString = response.foundStringCollection[0];
System.debug('found a string: ' + response.foundString);
}
//Wrap the Results object in a List container (an extra step added to allow this interface to also support bulkification)
responseWrapper.add(response);
}
return responseWrapper;
}
public class InvocableErrorException extends Exception {
}
public class Requests {
@InvocableVariable
public String searchType; //default is 'prefix'
@InvocableVariable
public String prefix;
@InvocableVariable
public String suffix; //value that will end the string
@InvocableVariable
public String length; // number of characters
@InvocableVariable
public String inputString; // number of characters
}
public class Results {
@InvocableVariable
public String foundString;
@InvocableVariable
public List<String> foundStringCollection;
}
}