Save (Write)¶
Public override on ClaimAppManager that wraps subclass save logic in a transaction lifecycle.
| Field | Value |
|---|---|
| Operation ID | OP-CLM-004 |
| Trigger | Caller requests persistence via Write(). |
| Inputs | None (operates on in-memory state built up by the concrete subclass) |
| Outputs | Boolean (success/failure) |
| Primary components | ClaimAppManager.Write, OnTransactionStart, OnTransactionStop |
| Entry point | SAIF.Application.Claim\ClaimAppManager.vb |
Steps¶
- Call
OnTransactionStart()— begins an Oracle DPI transaction ifNot DPI.TransactionPending(DataLayer.DAL.BeginTransaction(DPI.PortalID)). - Call
OnWrite()— implemented by the concrete subclass, not in this library; save logic is not traceable from this library's source**. - On success or failure,
OnTransactionStop(WriteResult)runs in aFinallyblock — commits or rolls back (DataLayer.DAL.EndTransaction(DPI.PortalID, inCommit)) based on the write result. - On exception during
OnWrite():OnTransactionStop(False)is explicitly called (forcing rollback) before the exception is re-thrown; theFinallyblock'sOnTransactionStop(WriteResult)then also executes per VB.NETTry/Catch/Finallysemantics, meaningOnTransactionStopmay be invoked twice on the exception path*.DPI.TransactionPendingis checked insideOnTransactionStop/OnTransactionStartso this is not expected to be observably harmful, but is noted as an implementation nuance.
Process flow¶
flowchart TD
Start([Write called]) --> TxStart[OnTransactionStart]
TxStart --> OnWrite[OnWrite<br>subclass-implemented]
OnWrite --> Exception{Exception?}
Exception -->|Yes| ForceRollback[OnTransactionStop False]
ForceRollback --> Rethrow([Re-throw exception])
Exception -->|No| Finally[OnTransactionStop WriteResult<br>Finally block]
Rethrow --> Finally
Finally --> End([Return WriteResult])
Failure and edge-case behavior¶
- Exception during
OnWrite(): forced rollback, thenOnTransactionStopmay run twice per VB.NETTry/Catch/Finallysemantics*.
Related documentation¶
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with**could not be confirmed; treat as unknown until verified.
Sources¶
SAIF.Application.Claim\ClaimAppManager.vb