Skip to content

Record Merge Event Handlers

Your organization may want to create custom Record Merge Event Handlers which execute custom logic immediately when a record merge begins or after a record merge completes. You can initiate a record merge operation through Vault API or the Vault Java SDK. Record Merge Event Handlers execute regardless of the merge operation origin, for example, starting a merge from the SDK or the API. The @RecordMergeEventHandlerInfo annotation indicates that a class is a Record Merge Event Handler and specifies the object where this handler will execute. Each Vault object can only have one (1) Record Merge Event Handler.

The RecordMergeEventHandler interface contains the logic for your record merges. Custom logic can execute either:

  • onMergeStart(): Invoked when the merge starts.
  • onMergeComplete(): Invoked when the merge completes.

For example, your organization may need a record merge event handler if you have an external integration that relies on records that may be undergoing a merge. onMergeStart(), the handler can send a message to the integration that it should pause integration activities. onMergeComplete(), the handler can send another message that integration can resume again.

The following example is a skeleton for a Record Merge Event Handler:

@RecordMergeEventHandlerInfo(object = "account__v") public class RecordMergeEventHandlerSample implements RecordMergeEventHandler { @Override public void onMergeStart(RecordMergeEventStartContext context) { LogService logService = ServiceLocator.locate(LogService.class); String objectName = context.getObjectName(); String jobId = context.getJobId(); List mergeSets = context.getRecordMergeSets(); for (RecordMergeSet mergeSet : mergeSets) { String dupRecordId = mergeSet.getDuplicateRecordId(); String mainRecordId = mergeSet.getMainRecordId(); logService.info(String.format("Started merge of duplicate record [%s] into main record [%s] for object [%s] job [%s]", dupRecordId, mainRecordId, objectName, jobId)); //do something } } @Override public void onMergeComplete(RecordMergeEventCompletionContext context) { LogService logService = ServiceLocator.locate(LogService.class); String objectName = context.getObjectName(); String jobId = context.getJobId(); List mergeSetResults = context.getRecordMergeSetResults(); for (RecordMergeSetResult mergeSetResult : mergeSetResults) { String dupRecordId = mergeSetResult.getDuplicateRecordId(); String mainRecordId = mergeSetResult.getMainRecordId(); RecordMergeCompletionStatus status = mergeSetResult.getStatus(); if (status == RecordMergeCompletionStatus.SUCCESS) { logService.info(String.format("Succeeded in merge of duplicate record [%s] into main record [%s] for object [%s] job [%s]", dupRecordId, mainRecordId, objectName, jobId)); //do something for success } else if (status == RecordMergeCompletionStatus.FAILURE) { logService.info(String.format("Failed in merge of duplicate record [%s] into main record [%s] for object %s job %s", dupRecordId, mainRecordId, objectName, jobId)); //do something for failure } } } }

After writing your handler code, you must deploy your Record Merge Event Handler to make it active in your Vault. You can view all of the extensions currently deployed to your Vault in Admin > Configuration > Vault Java SDK.

Learn more about Record Merge Event Handlers in the Javadocs.