-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain_InvoiceProcessor.xaml
More file actions
306 lines (306 loc) · 23.9 KB
/
Main_InvoiceProcessor.xaml
File metadata and controls
306 lines (306 loc) · 23.9 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
<Activity mc:Ignorable="sap sap2010" x:Class="Main" VisualBasic.Settings="{x:Null}" sap2010:WorkflowViewState.IdRef="ActivityBuilder_1" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:s="clr-namespace:System;assembly=System.Private.CoreLib" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:sap2010="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System.Private.CoreLib" xmlns:sco="clr-namespace:System.Collections.ObjectModel;assembly=System.Private.CoreLib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data.Common" xmlns:ui="http://schemas.uipath.com/workflow/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextExpression.NamespacesForImplementation>
<sco:Collection x:TypeArguments="x:String">
<x:String>System.Activities</x:String>
<x:String>System.Activities.Statements</x:String>
<x:String>System.Activities.Expressions</x:String>
<x:String>System.Activities.Validation</x:String>
<x:String>System.Activities.XamlIntegration</x:String>
<x:String>Microsoft.VisualBasic</x:String>
<x:String>Microsoft.VisualBasic.Activities</x:String>
<x:String>System</x:String>
<x:String>System.Collections</x:String>
<x:String>System.Collections.Generic</x:String>
<x:String>System.Collections.ObjectModel</x:String>
<x:String>System.Data</x:String>
<x:String>System.Diagnostics</x:String>
<x:String>System.Drawing</x:String>
<x:String>System.IO</x:String>
<x:String>System.Linq</x:String>
<x:String>System.Net.Mail</x:String>
<x:String>System.Xml</x:String>
<x:String>System.Xml.Linq</x:String>
<x:String>UiPath.Core</x:String>
<x:String>UiPath.Core.Activities</x:String>
<x:String>System.Windows.Markup</x:String>
<x:String>GlobalVariablesNamespace</x:String>
<x:String>GlobalConstantsNamespace</x:String>
<x:String>System.Reflection</x:String>
<x:String>System.ComponentModel</x:String>
<x:String>System.Runtime.Serialization</x:String>
<x:String>System.Xml.Serialization</x:String>
<x:String>System.Activities.Runtime.Collections</x:String>
<x:String>System.Linq.Expressions</x:String>
<x:String>UiPath.Excel</x:String>
<x:String>UiPath.Platform.ResourceHandling</x:String>
<x:String>UiPath.Excel.Activities</x:String>
<x:String>System.Numerics</x:String>
<x:String>UiPath.PDF.Activities</x:String>
<x:String>System.Text.RegularExpressions</x:String>
<x:String>UiPath.Mail</x:String>
<x:String>UiPath.Mail.Activities.Enums</x:String>
<x:String>UiPath.Shared.Activities.Utils</x:String>
<x:String>UiPath.Mail.Outlook.Activities</x:String>
<x:String>UiPath.Shared.Activities</x:String>
<x:String>UiPath.Mail.Activities</x:String>
<x:String>System.Security</x:String>
<x:String>UiPath.MicrosoftOffice365.Activities.Mail.Enums</x:String>
<x:String>UiPath.Mail.SMTP.Activities</x:String>
</sco:Collection>
</TextExpression.NamespacesForImplementation>
<TextExpression.ReferencesForImplementation>
<sco:Collection x:TypeArguments="AssemblyReference">
<AssemblyReference>Microsoft.VisualBasic</AssemblyReference>
<AssemblyReference>mscorlib</AssemblyReference>
<AssemblyReference>PresentationCore</AssemblyReference>
<AssemblyReference>PresentationFramework</AssemblyReference>
<AssemblyReference>System</AssemblyReference>
<AssemblyReference>System.Activities</AssemblyReference>
<AssemblyReference>System.ComponentModel.TypeConverter</AssemblyReference>
<AssemblyReference>System.Core</AssemblyReference>
<AssemblyReference>System.Data</AssemblyReference>
<AssemblyReference>System.Data.Common</AssemblyReference>
<AssemblyReference>System.Data.DataSetExtensions</AssemblyReference>
<AssemblyReference>System.Drawing</AssemblyReference>
<AssemblyReference>System.Drawing.Common</AssemblyReference>
<AssemblyReference>System.Drawing.Primitives</AssemblyReference>
<AssemblyReference>System.Linq</AssemblyReference>
<AssemblyReference>System.Net.Mail</AssemblyReference>
<AssemblyReference>System.ObjectModel</AssemblyReference>
<AssemblyReference>System.Private.CoreLib</AssemblyReference>
<AssemblyReference>System.Xaml</AssemblyReference>
<AssemblyReference>System.Xml</AssemblyReference>
<AssemblyReference>System.Xml.Linq</AssemblyReference>
<AssemblyReference>UiPath.System.Activities</AssemblyReference>
<AssemblyReference>UiPath.UiAutomation.Activities</AssemblyReference>
<AssemblyReference>WindowsBase</AssemblyReference>
<AssemblyReference>UiPath.Studio.Constants</AssemblyReference>
<AssemblyReference>System.Reflection.DispatchProxy</AssemblyReference>
<AssemblyReference>System.Reflection.TypeExtensions</AssemblyReference>
<AssemblyReference>System.Reflection.Metadata</AssemblyReference>
<AssemblyReference>System.ComponentModel.EventBasedAsync</AssemblyReference>
<AssemblyReference>System.ComponentModel</AssemblyReference>
<AssemblyReference>System.ComponentModel.Primitives</AssemblyReference>
<AssemblyReference>System.Private.ServiceModel</AssemblyReference>
<AssemblyReference>System.Private.DataContractSerialization</AssemblyReference>
<AssemblyReference>System.Runtime.Serialization.Formatters</AssemblyReference>
<AssemblyReference>System.Runtime.Serialization.Primitives</AssemblyReference>
<AssemblyReference>System.Private.Xml</AssemblyReference>
<AssemblyReference>UiPath.Excel.Activities.Design</AssemblyReference>
<AssemblyReference>System.Memory.Data</AssemblyReference>
<AssemblyReference>System.Console</AssemblyReference>
<AssemblyReference>System.Security.Permissions</AssemblyReference>
<AssemblyReference>System.Configuration.ConfigurationManager</AssemblyReference>
<AssemblyReference>System.Memory</AssemblyReference>
<AssemblyReference>System.Private.Uri</AssemblyReference>
<AssemblyReference>System.Linq.Async</AssemblyReference>
<AssemblyReference>NPOI.Core</AssemblyReference>
<AssemblyReference>System.Collections</AssemblyReference>
<AssemblyReference>System.Collections.NonGeneric</AssemblyReference>
<AssemblyReference>System.Linq.Expressions</AssemblyReference>
<AssemblyReference>UiPath.Excel.Activities</AssemblyReference>
<AssemblyReference>UiPath.Excel</AssemblyReference>
<AssemblyReference>UiPath.Platform</AssemblyReference>
<AssemblyReference>System.Data.SqlClient</AssemblyReference>
<AssemblyReference>System.Runtime.Numerics</AssemblyReference>
<AssemblyReference>System.IO.FileSystem.Watcher</AssemblyReference>
<AssemblyReference>System.IO.Packaging</AssemblyReference>
<AssemblyReference>System.IO.FileSystem.AccessControl</AssemblyReference>
<AssemblyReference>System.IO.FileSystem.DriveInfo</AssemblyReference>
<AssemblyReference>UiPath.PDF.Activities</AssemblyReference>
<AssemblyReference>System.Text.RegularExpressions</AssemblyReference>
<AssemblyReference>System.Linq.Async.Queryable</AssemblyReference>
<AssemblyReference>System.Collections.Immutable</AssemblyReference>
<AssemblyReference>System.Linq.Parallel</AssemblyReference>
<AssemblyReference>System.Linq.Queryable</AssemblyReference>
<AssemblyReference>UiPath.Mail.Activities</AssemblyReference>
<AssemblyReference>UiPath.Mail</AssemblyReference>
<AssemblyReference>UiPath.OCR.Activities</AssemblyReference>
<AssemblyReference>UiPath.DocumentUnderstanding.ML.Activities</AssemblyReference>
<AssemblyReference>UiPath.IntelligentOCR.Activities</AssemblyReference>
<AssemblyReference>UiPath.Mail.Activities.Design</AssemblyReference>
<AssemblyReference>System.Runtime.InteropServices</AssemblyReference>
</sco:Collection>
</TextExpression.ReferencesForImplementation>
<Sequence DisplayName="Main Sequence" sap:VirtualizedContainerService.HintSize="1185,1411" sap2010:WorkflowViewState.IdRef="Sequence_1">
<Sequence.Variables>
<Variable x:TypeArguments="x:String" Name="logMessage" />
<Variable x:TypeArguments="x:Boolean" Name="needsApproval" />
<Variable x:TypeArguments="x:Boolean" Name="isValidVendor" />
<Variable x:TypeArguments="x:Double" Name="approvedLimit" />
<Variable x:TypeArguments="x:Double" Name="totalAmount" />
<Variable x:TypeArguments="x:String" Name="vendorName" />
<Variable x:TypeArguments="x:String" Name="invoiceDate" />
<Variable x:TypeArguments="x:String" Name="invoiceNumber" />
<Variable x:TypeArguments="x:String" Name="extractedData" />
<Variable x:TypeArguments="x:String" Name="currentInvoiceFile" />
<Variable x:TypeArguments="sd:DataTable" Name="vendorDataTable" />
</Sequence.Variables>
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<TryCatch DisplayName="Main_ErrorHandler" sap:VirtualizedContainerService.HintSize="470,1388" sap2010:WorkflowViewState.IdRef="TryCatch_1">
<TryCatch.Try>
<Sequence DisplayName="Try" sap:VirtualizedContainerService.HintSize="468,1043" sap2010:WorkflowViewState.IdRef="Sequence_2">
<Sequence.Variables>
<Variable x:TypeArguments="s:String[]" Name="invoiceFiles" />
</Sequence.Variables>
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<ui:LogMessage DisplayName="Log_ProcessStart" sap:VirtualizedContainerService.HintSize="434,175" sap2010:WorkflowViewState.IdRef="LogMessage_1" Level="Info" Message="["=== Invoice Processing Bot Started at " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ==="]" />
<ui:ReadRange Range="{x:Null}" WorkbookPathResource="{x:Null}" AddHeaders="True" DataTable="[vendorDataTable]" DisplayName="ReadWorkbook_VendorMasterData" sap:VirtualizedContainerService.HintSize="434,120" sap2010:WorkflowViewState.IdRef="ReadRange_1" SheetName="Sheet1" WorkbookPath="Data\VendorMasterData.xlsx.xlsx" />
<ui:LogMessage DisplayName="Log_VendorDataLoaded" sap:VirtualizedContainerService.HintSize="434,175" sap2010:WorkflowViewState.IdRef="LogMessage_2" Level="Info" Message="["Vendor data loaded successfully. Total vendors: " + vendorDataTable.Rows.Count.ToString( )]" />
<Assign DisplayName="Assign_GetInvoiceFiles" sap:VirtualizedContainerService.HintSize="434,115" sap2010:WorkflowViewState.IdRef="Assign_1">
<Assign.To>
<OutArgument x:TypeArguments="s:String[]">[invoiceFiles]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="s:String[]">[System.IO.Directory.GetFiles(".\Input", "*.pdf")]</InArgument>
</Assign.Value>
</Assign>
<ui:LogMessage DisplayName="Log_FilesFound" sap:VirtualizedContainerService.HintSize="434,175" sap2010:WorkflowViewState.IdRef="LogMessage_3" Level="Info" Message="["Found " + invoiceFiles.Length.ToString( ) + "invoice files to process"]" />
<ui:ForEach x:TypeArguments="x:String" CurrentIndex="{x:Null}" DisplayName="ForEach_ProcessInvoices" sap:VirtualizedContainerService.HintSize="434,57" sap2010:WorkflowViewState.IdRef="ForEach`1_1" Values="[invoiceFiles]">
<ui:ForEach.Body>
<ActivityAction x:TypeArguments="x:String">
<ActivityAction.Argument>
<DelegateInArgument x:TypeArguments="x:String" Name="currentInvoiceFile" />
</ActivityAction.Argument>
<Sequence DisplayName="Body" sap:VirtualizedContainerService.HintSize="522,2350" sap2010:WorkflowViewState.IdRef="Sequence_5">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<ui:LogMessage DisplayName="Log_ProcessingCurrentFile" sap:VirtualizedContainerService.HintSize="488,175" sap2010:WorkflowViewState.IdRef="LogMessage_4" Level="Info" Message="["Processing invoice: " + System.IO.Path.GetFileName(currentInvoiceFile)]" />
<ui:ReadPDFText PreserveFormatting="{x:Null}" DisplayName="ReadPDF_ExtractText" FileName="[currentInvoiceFile]" sap:VirtualizedContainerService.HintSize="488,115" sap2010:WorkflowViewState.IdRef="ReadPDFText_1" Range="All" Text="[extractedData]" />
<ui:MultipleAssign DisplayName="Parse_InvoiceData" sap:VirtualizedContainerService.HintSize="488,211" sap2010:WorkflowViewState.IdRef="MultipleAssign_1">
<ui:MultipleAssign.AssignOperations>
<scg:List x:TypeArguments="ui:AssignOperation" Capacity="4">
<ui:AssignOperation sap2010:WorkflowViewState.IdRef="AssignOperation_1">
<ui:AssignOperation.To>
<OutArgument x:TypeArguments="x:String">[invoiceNumber]</OutArgument>
</ui:AssignOperation.To>
<ui:AssignOperation.Value>
<InArgument x:TypeArguments="x:String">[System.Text.RegularExpressions.Regex.Match(extractedData, "(?i)inv[a-z]*[-\s#:]*(\w+[-\w]*)").Groups(1).Value]</InArgument>
</ui:AssignOperation.Value>
</ui:AssignOperation>
<ui:AssignOperation sap2010:WorkflowViewState.IdRef="AssignOperation_2">
<ui:AssignOperation.To>
<OutArgument x:TypeArguments="x:String">[vendorName]</OutArgument>
</ui:AssignOperation.To>
<ui:AssignOperation.Value>
<InArgument x:TypeArguments="x:String">[System.Text.RegularExpressions.Regex.Match(extractedData, "(?i)(ABC Corporation|XYZ Limited|Tech Solutions Inc)").Groups(1).Value]</InArgument>
</ui:AssignOperation.Value>
</ui:AssignOperation>
<ui:AssignOperation sap2010:WorkflowViewState.IdRef="AssignOperation_3">
<ui:AssignOperation.To>
<OutArgument x:TypeArguments="x:Double">[totalAmount]</OutArgument>
</ui:AssignOperation.To>
<ui:AssignOperation.Value>
<InArgument x:TypeArguments="x:Double">[If(System.Text.RegularExpressions.Regex.IsMatch(extractedData, "\$(\d{1,3}(?:,\d{3})*(?:\.\d{2})?)"), Convert.ToDouble(System.Text.RegularExpressions.Regex.Match(extractedData, "\$(\d{1,3}(?:,\d{3})*(?:\.\d{2})?)").Groups(1).Value.Replace(",", "")), 0.0)]</InArgument>
</ui:AssignOperation.Value>
</ui:AssignOperation>
</scg:List>
</ui:MultipleAssign.AssignOperations>
</ui:MultipleAssign>
<ui:LogMessage DisplayName="Log_ExtractedData" sap:VirtualizedContainerService.HintSize="488,175" sap2010:WorkflowViewState.IdRef="LogMessage_5" Level="Info" Message="["Extracted - Invoice: " + invoiceNumber + ", Vendor: " + vendorName + ", Amount: $" + totalAmount.ToString()]" />
<If Condition="[vendorDataTable.AsEnumerable().Any(Function(row) row.Field(Of String)("Vendor Name").Trim().Equals(vendorName.Trim(), StringComparison.OrdinalIgnoreCase))]" DisplayName="If_ValidateVendor" sap:VirtualizedContainerService.HintSize="488,1614" sap2010:WorkflowViewState.IdRef="If_1">
<If.Then>
<Sequence DisplayName="Then" sap:VirtualizedContainerService.HintSize="486,1091" sap2010:WorkflowViewState.IdRef="Sequence_6">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<Assign DisplayName="Assign_GetApprovedLimit" sap:VirtualizedContainerService.HintSize="452,115" sap2010:WorkflowViewState.IdRef="Assign_2">
<Assign.To>
<OutArgument x:TypeArguments="x:Double">[approvedLimit]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:Double">[Convert.ToDouble(vendorDataTable.AsEnumerable().Where(Function(row) row.Field(Of String)("Vendor Name").Trim().Equals(vendorName.Trim(), StringComparison.OrdinalIgnoreCase)).FirstOrDefault()("Approved Limit").ToString())]</InArgument>
</Assign.Value>
</Assign>
<If Condition="[totalAmount > approvedLimit]" DisplayName="If_CheckApprovalNeeded" sap:VirtualizedContainerService.HintSize="452,916" sap2010:WorkflowViewState.IdRef="If_2">
<If.Then>
<Sequence DisplayName="Then" sap:VirtualizedContainerService.HintSize="450,393" sap2010:WorkflowViewState.IdRef="Sequence_8">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<ui:LogMessage DisplayName="Log_ApprovalRequired" sap:VirtualizedContainerService.HintSize="416,175" sap2010:WorkflowViewState.IdRef="LogMessage_6" Level="Warn" Message="["APPROVAL REQUIRED - Invoice: " + invoiceNumber + " Amount: $" + totalAmount.ToString() + " exceeds limit: $" + approvedLimit.ToString()]" />
<ui:AppendLine File="{x:Null}" DisplayName="AppendLog_ApprovalRequired" FileName="Output\ApprovalLog.csv" sap:VirtualizedContainerService.HintSize="416,158" sap2010:WorkflowViewState.IdRef="AppendLine_2" Text="[invoiceNumber + "," + vendorName + "," + totalAmount.ToString() + "," + approvedLimit.ToString() + ",APPROVAL REQUIRED," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")]" UseDefaultEncoding="False" />
</Sequence>
</If.Then>
<If.Else>
<Sequence DisplayName="Else" sap:VirtualizedContainerService.HintSize="450,393" sap2010:WorkflowViewState.IdRef="Sequence_9">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<ui:LogMessage DisplayName="Log_AutoApproved" sap:VirtualizedContainerService.HintSize="416,175" sap2010:WorkflowViewState.IdRef="LogMessage_7" Level="Info" Message="["AUTO-APPROVED - Invoice: " + invoiceNumber + " Amount: $" + totalAmount.ToString() + " within limit: $" + approvedLimit.ToString()]" />
<ui:AppendLine File="{x:Null}" DisplayName="AppendLog_AutoApproved" FileName="Output\ApprovalLog.csv" sap:VirtualizedContainerService.HintSize="416,158" sap2010:WorkflowViewState.IdRef="AppendLine_3" Text="[invoiceNumber + "," + vendorName + "," + totalAmount.ToString() + "," + approvedLimit.ToString() + ",AUTO-APPROVED," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")]" UseDefaultEncoding="False" />
</Sequence>
</If.Else>
</If>
</Sequence>
</If.Then>
<If.Else>
<Sequence DisplayName="Else" sap:VirtualizedContainerService.HintSize="486,393" sap2010:WorkflowViewState.IdRef="Sequence_7">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<ui:LogMessage DisplayName="Log_InvalidVendor" sap:VirtualizedContainerService.HintSize="452,175" sap2010:WorkflowViewState.IdRef="LogMessage_8" Level="Error" Message="["INVALID VENDOR - " + vendorName + " not found in vendor master data"]" />
<ui:AppendLine File="{x:Null}" DisplayName="AppendLog_InvalidVendor" FileName="Output\ApprovalLog.csv" sap:VirtualizedContainerService.HintSize="452,158" sap2010:WorkflowViewState.IdRef="AppendLine_4" Text="[invoiceNumber + "," + vendorName + "," + totalAmount.ToString() + ",N/A,INVALID VENDOR," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")]" UseDefaultEncoding="False" />
</Sequence>
</If.Else>
</If>
</Sequence>
</ActivityAction>
</ui:ForEach.Body>
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">False</x:Boolean>
<x:Boolean x:Key="IsPinned">False</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
</ui:ForEach>
<ui:LogMessage DisplayName="Log_ProcessingSummary" sap:VirtualizedContainerService.HintSize="434,166" sap2010:WorkflowViewState.IdRef="LogMessage_9" Level="Info" Message="["=== PROCESSING COMPLETE === Check Output\\ApprovalLog.csv for detailed results"]" />
</Sequence>
</TryCatch.Try>
<TryCatch.Catches>
<Catch x:TypeArguments="s:Exception" sap2010:WorkflowViewState.IdRef="Catch`1_1">
<ActivityAction x:TypeArguments="s:Exception">
<ActivityAction.Argument>
<DelegateInArgument x:TypeArguments="s:Exception" Name="exception" />
</ActivityAction.Argument>
<Sequence DisplayName="Body" sap:VirtualizedContainerService.HintSize="468,90" sap2010:WorkflowViewState.IdRef="Sequence_4">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
</Sequence>
</ActivityAction>
</Catch>
</TryCatch.Catches>
<TryCatch.Finally>
<Sequence DisplayName="Finally" sap:VirtualizedContainerService.HintSize="468,90" sap2010:WorkflowViewState.IdRef="Sequence_3">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
</Sequence>
</TryCatch.Finally>
</TryCatch>
</Sequence>
</Activity>