Example External Document Review Script

The following sample script illustrates the use of the ExternalDocReviewCompleted event. This event is fired by the Check-In Document Review Construct API that is called by a 3rd party document review application when it checks in a reviewed document. As shown in the following sample code snippet, an agency can use this event to script any of the following use cases:
  • Automatically update the status of the original document.
  • Activate the next workflow status
  • Send a notification email to the citizen when the reviewed file is checked in

var servProvCode = aa.env.getValue("ServiceProviderCode");
var capType = aa.env.getValue("RecordType").toString();
var checkInDocuments = aa.env.getValue("CheckedinDocuments");
var altID = aa.env.getValue("AlternateID");
var capStatus = aa.env.getValue("CapStatus");

var capId = getCapId();   // CapId object
var year = aa.date.getCurrentDate().getYear();
var month =aa.date.getCurrentDate().getMonth();
var day = aa.date.getCurrentDate().getDayOfMonth();
var currentDate = month+"/"+day+"/"+year;
var sysDate = aa.date.getCurrentDate();
var currentDate = dateFormatted(sysDate.getMonth(),sysDate.getDayOfMonth(),
sysDate.getYear(),"");
var error = "";
var message = "";
var br = "<br>";

var checkedinFileName='';
var docSeqNbr = '';
var firstName ='';
var middleName ='';
var lastName = '';
var planReview="Plan Review";
var needCorrection="Need Corrections";
var wfObj = aa.workflow.getTasks(capId).getOutput();
var stepnumber;
var processID;
var workflowTaskStatus = capStatus;

aa.print("RecordType      =:" + capType);
aa.print("ServiceProviderCode  =:"+ servProvCode);
aa.print("Alt ID  =:"+ altID);
aa.print("CapStatus  =:"+ capStatus);
aa.print("PreviousDocID  =:"+ aa.env.getValue("PreviousDocID"));

/*--------------------------------------------------------------------/
| Update the original document status by previous document id.
/--------------------------------------------------------------------*/
var previousDocID  = aa.env.getValue("PreviousDocID").toString();
var result = aa.document.getDocumentByPK(previousDocID);
if(result.getSuccess())
{
   var orgDocModel  = result.getOutput();
   if(orgDocModel!= null)
   {
   orgDocModel.setDocStatus("");
   aa.document.updateDocument(orgDocModel);
   
   }
}

/*--------------------------------------------------------------------/
| Get the checked-in document name.
/--------------------------------------------------------------------*/
   if(checkInDocuments != null && checkInDocuments.length > 0)
   {
   for(var i = 0; i < checkInDocuments.length; i++)
   {
      var documentModel = checkInDocuments[i];
         docSeqNbr = documentModel.getDocumentNo();
         checkedinFileName = documentModel.getFileName();
   }
   }

/*--------------------------------------------------------------------/
| Update the current workflow task Plan Review to Need Corrections.
/--------------------------------------------------------------------*/
for (i in wfObj)
{
   fTask = wfObj[i];
   //complete the "Plan Review" task
   if (planReview.equals(fTask.getTaskDescription()))
   {
   aa.print("Complete the task: Plan Review");
   stepnumber = fTask.getStepNumber();
   processID = fTask.getProcessID();
   aa.workflow.adjustTask(capId, stepnumber, processID, "N", "Y", null, null);
   }
   if (needCorrection.equals(fTask.getTaskDescription()))
   {
   aa.print("Active the task: Need Corrections");
   stepnumber = fTask.getStepNumber();
   processID = fTask.getProcessID();
   aa.workflow.adjustTask(capId, stepnumber, processID, "Y", "N", null, null);
   }
}


/*-----------------------------------------------------------------/
| Send email to applicant.
/-----------------------------------------------------------------*/
var capContactResult = aa.people.getCapContactByCapID(capId);
if (capContactResult.getSuccess())
{
   var email = '';
   var primaryFlag ='';
   var Contacts = capContactResult.getOutput();
   for (var contactIdx in Contacts)
   {
   primaryFlag = Contacts[contactIdx].getCapContactModel().getPrimaryFlag();
   email = Contacts[contactIdx].getCapContactModel().getEmail();
   firstName = Contacts[contactIdx].getCapContactModel().getFirstName();
   middleName = Contacts[contactIdx].getCapContactModel().getMiddleName();
   lastName = Contacts[contactIdx].getCapContactModel().getLastName();
   if ('Y'== primaryFlag)
   {
      if(email !='')
      {
      break;
      }
   }
   }
}
var host = "https://10.50.70.35:5443";
var documentLink = host + "/portlets/document/documentReviewCommentsList.do?mode=list&entityType=CAP&from=CAP&docSeqNbr="+ docSeqNbr;

var mailFrom = "shell.wang@achievo.com";
var mailCC = "Cindy.q@beyondsoft.com";

var subject ="Plan Review Result for your Application " + altID;
var applicant = buildFullName(firstName, middleName,lastName);
sendNotificationEmail(mailFrom, email,mailCC, subject,documentLink, applicant,capType, altID,workflowTaskStatus,checkedinFileName);

function buildFullName(firstName,middleName,lastName)
{
   var fullName = "";
   if(firstName && firstName != null)
   {
   fullName +=firstName;
   }
   if(middleName && middleName != null)
   {
   fullName += " "+ middleName
   }
   if(lastName && lastName != null)
   {
   fullName += " "+ lastName
   }
   return fullName;
}

function sendNotificationEmail(from, to,cc, subject,documentLink, applicant,capType, altID,workflowTaskStatus,checkedinFileName)
{
   
   var templateName = "EXTERNALDOCREVIEWCOMPLETED";
   var emailParameters = aa.util.newHashtable();
   addParameter(emailParameters, "$$applicant$$",applicant);
   addParameter(emailParameters, "$$AltID$$",altID);
   addParameter(emailParameters, "$$CapType$$",capType);
   addParameter(emailParameters, "$$workflowTaskStatus$$",workflowTaskStatus);
   addParameter(emailParameters, "$$reviewLink$$",documentLink);
   addParameter(emailParameters, "$$subject$$",subject);

   sendNotification(to, templateName, emailParameters, null);
}

function getCapId()  {

    var s_id1 = aa.env.getValue("PermitId1");
    var s_id2 = aa.env.getValue("PermitId2");
    var s_id3 = aa.env.getValue("PermitId3");

    var s_capResult = aa.cap.getCapID(s_id1, s_id2, s_id3);
    if(s_capResult.getSuccess())
      return s_capResult.getOutput();
    else
    {
      logMessage("**ERROR: Failed to get capId: " + s_capResult.getErrorMessage());
      return null;
    }
  }

function dateFormatted(pMonth,pDay,pYear,pFormat)
{
   var mth = "";
   var day = "";
   var ret = "";
   if (pMonth > 9)
   mth = pMonth.toString();
   else
   mth = "0"+pMonth.toString();

   if (pDay > 9)
   day = pDay.toString();
   else
   day = "0"+pDay.toString();

   if (pFormat=="YYYY-MM-DD")
   ret = pYear.toString()+"-"+mth+"-"+day;
   else
   ret = ""+mth+"/"+day+"/"+pYear.toString();

   return ret;
}

function addParameter(pamaremeters, key, value)
{
   if(key != null)
   {
   if(value == null)
   {
      value = "";
   }
   pamaremeters.put(key, value);
   }
}

function sendNotification(userEmailTo,templateName,params,reportFile)
{
   var result = null;
   result = aa.document.sendEmailAndSaveAsDocument(mailFrom, userEmailTo, mailCC, templateName, params, getCapScriptModel(), reportFile);
   if(result.getSuccess())
   {
   aa.log("Send email successfully!");
   return true;
   }
   else
   {
   aa.log("Fail to send mail.");
   return false;
   }
}

function getCapScriptModel()
{
   var s_id1 = aa.env.getValue("PermitId1");
   var s_id2 = aa.env.getValue("PermitId2");
   var s_id3 = aa.env.getValue("PermitId3");
   return aa.cap.createCapIDScriptModel(s_id1, s_id2, s_id3);
}

function addParameter(pamaremeters, key, value)
{
   if(key != null)
   {
   if(value == null)
   {
      value = "";
   }   
   pamaremeters.put(key, value);
   }
}

function logMessage(str)
{
   message += str + br;
}

if (error && error.length > 0)
{
   aa.env.setValue("ScriptReturnCode", "1");
   aa.env.setValue("ScriptReturnMessage", error);
}
else
{
   aa.env.setValue("ScriptReturnCode", "0");
   aa.env.setValue("ScriptReturnMessage", message);
}