Add Detail Row
Append a single processed-record row — success or failure — to the RPA Watch details table
Add Detail Row appends one row to the DataTable produced by Create Details Table. Use it inside your processing loop, in both the Try and Catch paths, so each record contributes exactly one row to the report.

Properties
Input
| Property | Required | Type | Description |
|---|---|---|---|
| Details Table | Yes | DataTable | The table created by Create Details Table. |
Record
| Property | Required | Type | Description |
|---|---|---|---|
| Sequence No | Yes | Int32 | 1-based row number. Use the loop index or a running counter. |
| Status | Yes | String | success or failed. The value is trimmed and lowercased before it is written, so "Success" and " SUCCESS " are both stored as success. |
| Record ID | No | String | Stable identifier of the processed record (e.g. INV-1001, EMP-0042). |
| Record Name | No | String | Human-readable name displayed on the dashboard. |
| Result | No | String | Result message for successful records — e.g. "Posted to SAP under document 5100023987". |
| Error Message | No | String | Error message for failed records — e.g. ex.Message. |

Status semantics
Only success and failed are meaningful. Send Report uses these values to calculate the overall run status:
- All rows success → run status is success
- All rows failed → run status is failed
- Mixed → run status is partial_success
Any other value (typos, custom states) will be treated as notsuccess and notfailed and will skew the calculation. Stick to the two accepted values.
Patterns
Map a source column to the RPA Watch status (recommended)
When you read records from Excel, a database, or another upstream system, those records usually already have their own status column Completed, Error, Pending, etc.). The simplest pattern is to translate that value to success or failed with an inline ternary expression — no Try/Catch needed:
Add Detail Row
Details Table = detailsTable
Sequence No = index // ForEachRow.CurrentIndex
Record ID = currentDataRow["National ID"].ToString()
Record Name = currentDataRow["First Name"].ToString() + " "
+ currentDataRow["Last Name"].ToString()
Status = currentDataRow["Flow Status"].ToString() == "Completed"
? "success" : "failed"
Result = currentDataRow["Log"].ToString()
Error Message = currentDataRow["Error"].ToString()Wrap exception-driven processing in Try/Catch
When the act of processing a record can throw, log the outcome in both branches:
For Each row in dtInput
Try
// …business logic…
Add Detail Row (
detailsTable, sequenceNo,
RecordId = row["Id"].ToString(),
RecordName = row["Name"].ToString(),
Status = "success",
Result = "OK")
Catch ex
Add Detail Row (
detailsTable, sequenceNo,
RecordId = row["Id"].ToString(),
Status = "failed",
ErrorMessage = ex.Message)
End TryUse ForEachRow.CurrentIndex for Sequence No
For Each Row exposes a CurrentIndex property. Bind a workflow variable (e.g. index) to it in the Properties panel and feed that variable straight into Add Detail Row → Sequence No. You don't need a manual counter and the value is guaranteed to be 0-based, dense, and aligned with the row being processed.
Skipping records without inflating the count
If a record is intentionally skipped (e.g. filtered out by validation), don't add a row for it. Send Report's status calculation is based on the rows you log, so silent skips should not appear as success or failed.