Los enganches de confirmación realizan acciones adicionales antes de confirmar un registro en la base de datos.
Sub swbug_Commit(actionname, actiontype)
' actionname As String
' actiontype As Long
' acción = comprobada
Dim dups ' Matriz de todos los duplicados directos de este defecto
Dim dupsvar ' Variant que contiene el enlace a un duplicado
Dim dupsobj ' El mismo enlace, pero como un objeto en lugar de como una variante
Dim record ' El registro extraído del enlace
Dim session
Dim parent_id ' El nombre de visualización de este defecto
Dim RetVal
' Hacer que una API llame para verificar si este registro tiene duplicados
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"
' validar y confirmar, con manejo de errores y excepciones
On Error Resume Next
Err.Clear
'RetVal está vacío si es satisfactorio y, de lo contrario, mantiene una cadena
'de caracteres de mensaje de error de la anomalía
RetVal = entity.Validate
if Err.Number <> 0 then
' Se ha producido una excepción
' Err.description mantiene el mensaje de error
' Este ejemplo imprime los detalles del error y revierte el registro a
' su estado anterior.
StdOut "Validation exception:" & vbCrLf &_
" Error number: " & Err.Number & vbCrLf &_
" Error description: '" & Err.Description & vbCrLf
entity.Revert
elseif RetVal <> "" then
' Se ha devuelto una serie de mensaje de error que indica
' que la validación
ha dado error, posiblemente debido a que los valores
' de uno o más campos no son correctos. Puede
intentar resolver el problema
' al determinar qué campos
tienen valores incorrectos, proporcionarles
' valores adecuados y volver a intentar
llamar a entity.Validate. Este
' ejemplo de código imprime los detalles
del error y, a continuación,
' revierte el registro a su estado original.
StdOut "Validation error: " & RetVal & vbCrLf
entity.Revert
else
' La validación ha sido satisfactoria. Puede continuar y confirmar el
' cambio.
StdOut "Validation was successful." & vbCrLf
Err.Clear
RetVal = entity.Commit
if Err.Number <> 0 then
' Se ha producido una excepción (indica que se ha producido un
' error antes de
escribir los valores en la base de datos). ' Este código de ejemplo imprime los
detalles del error y
' revierte el registro a su estado anterior.
StdOut "Commit exception:" & vbCrLf &_
" Error number: " & Err.Number & vbCrLf &_
" Error description: '" & Err.Description & vbCrLf
entity.Revert
elseif RetVal <> "" then
' Se ha devuelto un valor de serie de mensaje de
' error. Indica que
se ha producido un error después de escribir
' los valores en la base de datos (por
ejemplo, una anomalía en
' un enganche de notificación de acción). Puede manejar
el error
' al corregir la anomalía e intentar volverlo a confirmar o
' revertir. Este código de ejemplo imprime los detalles del mensaje
' de error.
StdOut "Commit error (after committing changes): " & RetVal & vbCrLf
else
' No se devuelve ninguna excepción o valor de mensaje de error
StdOut "Commit was successful." & vbCrLf
end if
end if
' Borrar el manejador de errores
Err.Clear
Next
end if
End Sub
sub swbug_Commit {
my($actionname, $actiontype) = @_;
# $actionname As string scalar
# $actiontype as long scalar
# action is Submit
# Este enganche se lanza durante el paso de "confirmación" de una
# actualización de entidad. Es la ubicación adecuada para poner una
# actividad que se deba empaquetar en la misma
# transacción que la confirmación, por ejemplo, subacciones
# o actualizaciones de almacenamiento de datos externos.
my ($RetVal);
my ($dups, # Matriz de todos los duplicados directos de este defecto
$record, # El registro extraído del enlace
$parent_id, # El nombre de visualización de este defecto
$session,
$locEntity,
$dupobj
);
# Hacer que una API llame para verificar si este registro tiene duplicados
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");
# validar y confirmar, con manejo de errores y excepciones
eval {$RetVal = $locEntity->Validate(); };
if ($@){
print "Exception: '$@'\n";
$locEntity->Revert();
}
elsif ($RetVal ne "") {
$session->OutputDebugString ("validation error: $RetVal\n");
# corregir las validaciones anómalas e intentar volver a validar
# o revertir
}
else {
eval {$RetVal = $locEntity->Commit(); };
if ($@){
print "Exception: '$@'\n";
$locEntity->Revert();
}
elsif ($RetVal ne "") {
$session->OutputDebugString ("commit error: $RetVal\n");
# manejo de error - corregir las validaciones anómalas y volverlo
# a intentar o revertir
}
# confirmación satisfactoria
}
}
}
}