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 ' Ensemble de tous les doublons directs de ce défaut
Dim dupsvar ' Variante contenant un lien vers un doublon
Dim dupsobj ' Le même lien, comme objet et non comme variante
Dim record ' L'enregistrement extrait du lien
Dim session
Dim parent_id ' Le nom à afficher pour ce défaut
Dim RetVal
' Créer une API permettant de vérifier si cet enregistrement a des doublons
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 : scalaire long
# action is Submit
# Ce crochet se déclenche pendant l'étape de validation d'une
# mise à jour d'entité. C'est l'endroit le plus indiqué pour
# intégrer des activités devant être regroupées dans la même
# transaction que la validation (telles que des sous-actions
# ou des mises à jour du stockage de données externes).
my ($RetVal);
my ($dups, # Ensemble de tous les doublons directs de ce défaut
$record, # L'enregistrement extrait du lien
$parent_id, # Le nom à afficher pour ce défaut
$session,
$locEntity,
$dupobj
);
# Créer une API permettant de vérifier si cet enregistrement a des doublons
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
}
}
}
}