/
Annotate Document

Annotate Document

A common ask in approval workflows is to stamp a document approved when the document has completed the process. Live Fields solves this problem by calling the GlobalSearch API to add a new annotation to the active document. This is an advanced example designed to illustrate the power of Live Fields as a feature.

The top of this script includes 4 default parameters that should be changed to fit a customer’s specific environment. The values here must match exactly or results will be unexpected. Unless you are comfortable with authoring and debugging Javascript, a rule of this complexity shouldn’t be altered outside of setting the default parameters.

//Change these defaults const approvalStatusField = "Approval Status APWF"; //The name of the list we are checking. const fieldTriggerValue = "Approved"; //The list value that triggers annotation placement. const fieldCompleteValue = "Release to Dynamics"; //The list value to change it to on approval. const stampValue = "Approved"; //The text of the stamp. const doc = $$inject.properties.document; if (doc.id === 0) { return "Approval flow disabled during import."; } const token = $$inject.properties.authToken; const approvalKey = 'approval-' + doc.hash; var hasStoredApprovalKey = !!sessionStorage.getItem(approvalKey); const approvalValue = $$inject.fields[approvalStatusField]; //debugger; // Clear the session key if the document is not approved, so that it can be reset without a new session. if (hasStoredApprovalKey && approvalValue !== fieldTriggerValue && approvalValue !== fieldCompleteValue) { console.debug("LiveField: Clearing annotated session flag, document is no longer approved."); sessionStorage.removeItem(approvalKey); hasStoredApprovalKey = false; } const needsStamp = !hasStoredApprovalKey && approvalValue == fieldTriggerValue; if (!needsStamp) { console.debug("LiveField: Skipping annotation, document doest not require stamp."); return 'Document does not require stamp.'; } const annotationData = { "0": [ { "type": "stamp", "x": 816.1113834891682, "y": 1565.9614899051453, "height": 401.76366322008863, "width": 856.0945347119645, "rotation": 319, "username": "", "cornerradius": 0, "burn": false, "outline": { "color": "#f08080", "opacity": 1, "width": 15 }, "fill": { "color": "", "opacity": 0 }, "text": { "value": stampValue, "align": "left", "font": { "bold": true, "italic": false, "strike": false, "underline": false, "color": "#f08080", "family": "Arial", "size": 140 } } } ], "hasBurned": false } const xhr = new XMLHttpRequest(); xhr.open("PUT",window.location.origin + "/square9api/api/UpdateDocument/databases/"+doc.databaseId+"/archive/"+doc.archiveId+"/document/"+doc.id+"/AnnotationData?pageCount=1&filename="+doc.fileId, false); xhr.withCredentials = true; xhr.setRequestHeader("auth-token", token); xhr.setRequestHeader("secureid", doc.hash); xhr.setRequestHeader("session-actions","annotationdata"); xhr.setRequestHeader("session-id","00000000-0000-0000-0000-000000000000"); xhr.setRequestHeader("content-type","application/json;charset=UTF-8"); xhr.setRequestHeader("accept","application/json, text/plain, */*"); xhr.send(JSON.stringify(annotationData)); console.debug("LiveField: Added approval stamp, storing session flag."); sessionStorage.setItem(approvalKey, true); // Update the field value to approved and save in 2 seconds. $$inject.fields[approvalStatusField] = fieldCompleteValue; console.debug("LiveField: Setting approved and saving."); setTimeout(()=>{ // Ensure annotation is loaded to viewer. angular.element(document).injector().get('annotationsService').reload(); },0); return "Approval stamp added. Document Approved.";

Related content

Live Fields
Live Fields
More like this
What's New 6.3
What's New 6.3
Read with this
Set Process Field Node (GlobalCapture 3.0 and Earlier)
Set Process Field Node (GlobalCapture 3.0 and Earlier)
More like this
Warn on blank field
Warn on blank field
More like this
Accessing The Current Validation Step
Accessing The Current Validation Step
More like this
Set Process Field Node
Set Process Field Node
More like this