Updating duplicate records to match the parent record
The following code fragment example checks to see whether the record (entity) has any duplicates (children). If so, the hook edits each of the duplicates with the dupone action name, and sets the "action_info" field to indicate that the original (parent) record is tested.
Note: You synchronize duplicate records with the original
record by using an action notification hook. An action notification
hook fires after a record has been successfully committed to the database.
You can use an action commit hook instead of an action notification
hook. However, using an action commit hook creates a risk: if the parent record
is not committed to the database, but the children records are committed
to the database, your records will be out of synch. You can also use nested
actions. See "Actions and access control" and Nested actions.
VBScript
Dim status
Dim session ' The current Session object
Dim parent_id ' The current Entity's display name (ID string)
Dim dups ' Array of all direct duplicates of this Entity
Dim dupvar ' Variant containing a Link to a duplicate
Dim dupobj ' The same Link, but as an Object rather than a Variant
Dim entity ' The Entity extracted from the Link
If (HasDuplicates()) Then
Set session = GetSession
dups = GetDuplicates
parent_id = GetDisplayName
for each dupvar in dups
' You could check these various functions for failures and
' then report any failures to the user (for example, using
' MsgBox).
' Failures are unlikely, but possible--for example, someone
' could concurrently "unmark" an entity as a duplicate.
Set dupobj = dupvar
Set entity = dupobj.GetChildEntity
session.EditEntity entity, "dupdone"
SetFieldValue "action_info", _
"Original " & parent_id & " is tested"
' commit the record to the database if validation returns no
' errors
status = entity.Validate
if status = "" then
entity.Commit
else
entity.Revert
End If
Next
End If
Perl
my($session); # The current Session object
my($links); # The reference to the links collection object
my($link);
my($cnt);
my($itm);
my($childID);
if ($entity->HasDuplicates()) {
$session = $entity->GetSession();
$links = $entity->GetDuplicates();
$session->OutputDebugString("links is " . $links . "(" . ref ($links) .
")\n" );
$cnt = $links->Count();
$session->OutputDebugString("count is " . $cnt . "(" . ref ($cnt) .
")\nchildren:\n" );
for ($i = 0; $i<$cnt; $i++) {
$itm = $links->Item($i);
$session->OutputDebugString("Item is " . $itm . "(" . ref ($itm) . ")\n";
$childID = $itm->GetChildEntityId();
$session->OutputDebugString($childID . "\n" );
}
$session->OutputDebugString("done");
}
else {
}