We have seen many time to send the Completion Notification , when the Access Review is completed CertificationSignOffApprover Rule can be used to send the notification , here is the sample code for using this Rule.
import java.util.Map; import java.util.List; import java.util.Arrays; import sailpoint.object.Identity; import sailpoint.api.SailPointContext; import sailpoint.object.Certification; import sailpoint.object.EmailOptions; import sailpoint.object.EmailTemplate; import sailpoint.object.SignOffHistory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; System.out.println("Entering Certification Sign Off Rule."); List signOffList=certification.getSignOffHistory(); System.out.println("signOffList : " + signOffList); for(SignOffHistory signOffHistory:signOffList){ if(signOffHistory.getSignerName().equalsIgnoreCase("spadmin")){ System.out.println("signOffHistory.getSignerName() : " + signOffHistory.getSignerName()); return null; } } Date activationDate = certification.getActivated(); System.out.println("activationDate : " + activationDate); if (activationDate != null) { List certifiers = certification.getCertifiers(); Identity certifier = context.getObjectByName(Identity.class,certifiers.get(0).toString()); System.out.println("certifier : " + certifier); List toAddresses = Arrays.asList(""); if (null != certifier) { toAddresses = Arrays.asList(certifier.getEmail()); } String tplName = "Certification Completion Notification"; EmailTemplate template = context.getObjectByName(EmailTemplate.class, tplName); if (null == template) { System.out.println("Could not find email template [ " + tplName + "]"); return null; } Map args = new HashMap(); args.put("certification", certification); args.put("ownerName", certifier.getDisplayName()); //Send Notifciation of completion } System.out.println("Exiting Certification Sign Off Rule"); return null;