PADFoundationloggingrun-trackingfooterdurationfoundationcleanup

Run Finalizer

Closes out a flow run by calculating duration, setting final status, and building a formatted summary footer. Pairs with Variable Bootstrap and Run Header Initializer to provide complete run lifecycle tracking with duration and record counts.

0 copies

Section 1: Capture End Time and Calculate Duration

PAD Script
1**REGION Capture End Time and Calculate Duration
2DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> dtRunEnd
3DateTime.Subtract Date: dtRunEnd SubtractDate: dtRunStart TimeUnit: DateTime.DifferenceTimeUnit.Seconds TimeDifference=> numDurationSeconds
4SET numDurationMinutes TO numDurationSeconds / 60
5SET numDurationRemainder TO numDurationSeconds - (numDurationMinutes * 60)
6Text.ConvertNumberToText.ConvertNumberToText Number: numDurationMinutes DecimalPlaces: 0 Result=> strMinutes
7Text.ConvertNumberToText.ConvertNumberToText Number: numDurationRemainder DecimalPlaces: 0 Result=> strSeconds
8SET strRunDuration TO $'''%strMinutes%m %strSeconds%s'''
9**ENDREGION

Section 2: Determine Final Status

PAD Script
1**REGION Determine Final Status
2IF numErrorCount = 0 THEN
3 SET strRunStatus TO $'''Success'''
4 SET boolSuccess TO True
5ELSE
6 SET strRunStatus TO $'''Completed with Errors'''
7 SET boolSuccess TO False
8END
9**ENDREGION

Section 3: Build Run Footer

PAD Script
1**REGION Build Run Footer
2Text.ConvertDateTimeToText.FromCustomDateTime DateTime: dtRunEnd CustomFormat: $'''yyyy-MM-dd HH:mm:ss''' Result=> strEndTimestamp
3SET strRunFooter TO $'''Run ID: %strRunId% | Status: %strRunStatus% | Records: %numRecordsProcessed% | Errors: %numErrorCount% | Duration: %strRunDuration% | Ended: %strEndTimestamp%'''
4**ENDREGION

Usage Notes

  • Place this pattern at the very end of your Main flow, after all business logic has completed
  • dtRunStart must already exist from the Variable Bootstrap pattern — the duration calculation subtracts start from end
  • numErrorCount and numRecordsProcessed are expected to have been incremented during the flow processing loops
  • strRunFooter produces a single pipe-delimited summary line matching the format of the Run Header Initializer output
  • Use strRunFooter as the final entry written by Log Detail Writer so every log file ends with a complete execution summary
  • boolSuccess provides a simple flag for conditional logic after finalization (e.g., send success email vs. failure alert)
  • Duration is displayed as Xm Ys (e.g., 3m 45s) — for sub-minute flows, it shows 0m Xs
  • The three Foundation patterns form a complete lifecycle: Variable BootstrapRun Header Initializer → (business logic) → Run Finalizer

Requirements

  • dtRunStart must be initialized by the Variable Bootstrap pattern before this runs
  • numErrorCount and numRecordsProcessed must be initialized (by Variable Bootstrap or manually set to 0)
  • strRunId must be set by the Variable Bootstrap pattern for the footer output
  • DateTime.Subtract action requires PAD DateTime actions (included in all PAD versions)
  • Text.ConvertNumberToText action requires PAD text actions (included in all PAD versions)
  • No external dependencies — uses only built-in PAD actions
Run Finalizer | FlowLibs