Commit hooks perform additional actions before a record is committed to the database.
Sub swbug_Commit(actionname, actiontype) ' actionname As String ' actiontype As Long ' action = tested Dim dups ' Array of all direct duplicates of this defect Dim dupsvar ' Variant containing link to a duplicate Dim dupsobj ' The same link, but as an object rather than a variant Dim record ' The record extracted from the link Dim session Dim parent_id ' The display name of this defect Dim RetVal ' Make an API to call to see if this record has duplicates If HasDuplicates() Then Set session = GetSession dups = GetDuplicates parent_id = GetDisplayName For Each dupvar In dups Set dupobj = dupvar Set entity = dupobj.GetChildEntity session.EditEntity entity, "dupdone" entity.SetFieldValue "action_reason", "Original " & parent_id & " is tested" ' validate and commit, with exception and error handling On Error Resume Next Err.Clear 'RetVal is empty on success else it holds an error message string on failure RetVal = entity.Validate if Err.Number <> 0 then ' An exception occurred ' Err.description holds the error message ' This example prints the error details and reverts the record to ' its previous state. StdOut "Validation exception:" & vbCrLf &_ " Error number: " & Err.Number & vbCrLf &_ " Error description: '" & Err.Description & vbCrLf entity.Revert elseif RetVal <> "" then ' An error message string was returned.indicating that validation failed, ' possibly due to one or more fields having unacceptable values. You can ' attempt to resolve this problem by determining which fields ' have unacceptable values, give them acceptable values, and retry the ' call to entity.Validate. This code example prints the error ' details and then reverts the record to its original state. StdOut "Validation error: " & RetVal & vbCrLf entity.Revert else ' Validate was successful. You can proceed and Commit the change. StdOut "Validation was successful." & vbCrLf Err.Clear RetVal = entity.Commit if Err.Number <> 0 then ' An exception occurred (this indicates that an error occurred before ' the values were written to the database). This example code prints the ' error details and reverts the record to its previous state. StdOut "Commit exception:" & vbCrLf &_ " Error number: " & Err.Number & vbCrLf &_ " Error description: '" & Err.Description & vbCrLf entity.Revert elseif RetVal <> "" then ' An error message string value was returned. This indicates that an ' error occurred after the values were written to the database (for ' example, a failure in an action notification hook). You can handle ' the error by correcting the failure and trying to commit again or ' revert. This example code prints the error message details. StdOut "Commit error (after committing changes): " & RetVal & vbCrLf else ' No exception or returned error message value StdOut "Commit was successful." & vbCrLf end if end if ' Clear the error handler Err.Clear Next end if End Sub
sub swbug_Commit { my($actionname, $actiontype) = @_; # $actionname As string scalar # $actiontype as long scalar # action is Submit # This hook is fired during the "commit" step of an # entity update. It is the appropriate place to put an # activity which should be bundled into the same # transaction as the commit, such as subactions # or updates of external data storage. my ($RetVal); my ($dups, # Array of all direct duplicates of this defect $record, # The record extracted from the link $parent_id, # The display name of this defect $session, $locEntity, $dupobj ); # Make an API to call to see if this record has duplicates if ($entity->HasDuplicates()) { $session = $entity->GetSession(); $dups = $entity->GetDuplicates(); $parent_id = $entity->GetDisplayName(); my $count = $dups->Count(); my $i = 0; for ($i=0;$i<$count;$i++){ $dupobj = $dups->Item($i); $locEntity = $dupobj->GetChildEntity(); $session->EditEntity($locEntity, "dupdone"); $locEntity->SetFieldValue("action_reason", "Original " . $parent_id . " is tested"); # validate and commit, with exception and error handling eval {$RetVal = $locEntity->Validate(); }; if ($@){ print "Exception: '$@'\n"; $locEntity->Revert(); } elsif ($RetVal ne "") { $session->OutputDebugString ("validation error: $RetVal\n"); # correct whatever failed validation and then try validate again or revert } else { eval {$RetVal = $locEntity->Commit(); }; if ($@){ print "Exception: '$@'\n"; $locEntity->Revert(); } elsif ($RetVal ne "") { $session->OutputDebugString ("commit error: $RetVal\n"); # handle error - correct whatever failed and try again or revert } # commit successful } } } }