# Sample Service Suite Scripts

Here are some Service Suite samples scripts that can be used as a reference.

### Basic Authentication

<div class="code panel pdl conf-macro output-block" id="bkmrk-copy-%2F%2A%2A%C2%A0%2A-btoa%C2%A0%2A-%40p" style="border-width: 1px;"><div class="codeContent panelContent pdl">```

```

<div class="codeSnippet">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * btoa</span><br></br><span style="color: #999988; font-style: italic; "> * @param st</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns base64 encoded string</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br> <span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">btoa</span>(st) {<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> Java.type(<span style="color: #dd1144; ">"java.util.Base64"</span>).getEncoder().encode(st);<br></br>}<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> $username = <span style="color: #dd1144; ">"admin"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> $password = <span style="color: #dd1144; ">"Password@1"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> $TOKEN = <span style="color: #dd1144; ">"Basic "</span>+btoa($username+<span style="color: #dd1144; ">":"</span>+$password);<br></br><br></br>addGlobalHeader(<span style="color: #dd1144; ">"authorization"</span>, $TOKEN);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> url = <span style="color: #dd1144; ">"https://someServer.com/api/somecall"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> data = {<span style="color: #dd1144; ">"short_description"</span>:<span style="color: #dd1144; ">"some data"</span>,<br></br>    <span style="color: #dd1144; ">"description"</span>:<span style="color: #dd1144; ">"some description"</span>};<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> call = createPost(url, data);<br></br>call.addHeader(<span style="color: #dd1144; ">"Content-Type"</span>, <span style="color: #dd1144; ">"application/json"</span>);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> resp = process(call);
```

 </div> </div>```

```

 </div> </div>### Demosite

<div class="codeSnippet" id="bkmrk-copy-var-formpage-%3D-">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">var</span> formPage = get(<span style="color: #dd1144; ">"https://demosite.appvance.com/products/ruby-on-rails-tote"</span>);<br></br>log(getCookies(<span style="color: #dd1144; ">"https://demosite.appvance.com/"</span>));<br></br><span style="color: #333333; font-weight: bold; ">var</span> token = extract(<span style="color: #dd1144; ">"html"</span>,formPage,<span style="color: #dd1144; ">'//form[@action="/orders/populate"]/input[@name="authenticity_token"]/@value'</span>);<br></br>log(<span style="color: #dd1144; ">"Extracted token: "</span>+token);<br></br> <br></br><span style="color: #333333; font-weight: bold; ">var</span> form = formData();<br></br>form.put(<span style="color: #dd1144; ">"authenticity_token"</span>,token);<br></br>form.put(<span style="color: #dd1144; ">"utf-8"</span>,<span style="color: #0086b3; ">decodeURIComponent</span>(<span style="color: #dd1144; ">"%E2%9C%93"</span>));<br></br>form.put(<span style="color: #dd1144; ">"variant_id"</span>,<span style="color: #dd1144; ">"1"</span>);<br></br>form.put(<span style="color: #dd1144; ">"quantity"</span>,<span style="color: #dd1144; ">"1"</span>);<br></br>form.put(<span style="color: #dd1144; ">"button"</span>,<span style="color: #dd1144; ">""</span>);<br></br> <br></br><span style="color: #333333; font-weight: bold; ">var</span> postData = createPost(<span style="color: #dd1144; ">"https://demosite.appvance.com/orders/populate"</span>,form);<br></br><span style="color: #333333; font-weight: bold; ">var</span> purchaseResults = process(postData);<br></br> <br></br>log(<span style="color: #dd1144; ">"response:\n"</span>+purchaseResults.getDataString());<br></br> <br></br>assertContains(get(<span style="color: #dd1144; ">"https://demosite.appvance.com/cart?variant_id=1"</span>).getDataString(),<span style="color: #dd1144; ">"Ruby on Rails Tote"</span>);<br></br>assertContains(get(<span style="color: #dd1144; ">"https://demosite.appvance.com/cart_link"</span>).getDataString(),<span style="color: #dd1144; ">"$15.99"</span>);
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk-" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### Login to AIQ

<div class="codeSnippet" id="bkmrk-copy-%24baseurl-%3D-%22htt">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
$baseURL = <span style="color: #dd1144; ">"http://localhost:8080"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> $loginForm = formData();<br></br><br></br>$loginForm.put(<span style="color: #dd1144; ">"username"</span>,<span style="color: #dd1144; ">"appvance"</span>);<br></br>$loginForm.put(<span style="color: #dd1144; ">"password"</span>,<span style="color: #dd1144; ">"appvance"</span>);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> $call = createPost($baseURL+<span style="color: #dd1144; ">"/AppvanceServer/rest/admin/loggin"</span>, $loginForm);<br></br><span style="color: #333333; font-weight: bold; ">var</span> $resp = process($call);<br></br><span style="color: #333333; font-weight: bold; ">var</span> $json = <span style="color: #0086b3; ">JSON</span>.parse($resp.getDataString());<br></br><br></br><span style="color: #333333; font-weight: bold; ">if</span> ($json.logged) {<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $jsession = getCookieValue($baseURL,<span style="color: #dd1144; ">"JSESSIONID"</span>);<br></br>  addGlobalHeader(<span style="color: #dd1144; ">"cookie"</span>,<span style="color: #dd1144; ">"JSESSIONID="</span>+$jsession);  <span style="color: #999988; font-style: italic; ">// adding global cookie for JSESSIONID</span><br></br>  log(<span style="color: #dd1144; ">"Logged In, JSESSIONID: "</span>+$jsesssion);<br></br>} <span style="color: #333333; font-weight: bold; ">else</span> {<br></br>  log(<span style="color: #dd1144; ">"Unsuccessful login"</span>);<br></br>}
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--1" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### ServiceSuite and XML

<div class="codeSnippet" id="bkmrk-copy-var-payload-%3D-%22">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">var</span> payload = <span style="color: #dd1144; ">"<xml><username>John</username><id>123-1341-123</id></xml>"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> call = createPost(<span style="color: #dd1144; ">"https://example.com/getAddress"</span>, payload, <span style="color: #dd1144; ">"text/xml"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> result = process(call);<br></br><span style="color: #333333; font-weight: bold; ">var</span> address1 = extract(<span style="color: #dd1144; ">"XML"</span>, result, <span style="color: #dd1144; ">"//Address1"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> city = extract(<span style="color: #dd1144; ">"XML"</span>, result, <span style="color: #dd1144; ">"//City"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> state = extract(<span style="color: #dd1144; ">"XML"</span>, result, <span style="color: #dd1144; ">"//ST"</span>);
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--2" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### Upload a file to AIQ repository

<div class="codeSnippet" id="bkmrk-copy-const-%24boundary">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">const</span> $boundary = <span style="color: #dd1144; ">"AIQ-DS-BOUNDARY"</span>;<br></br><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">login</span>($baseURL, $username, $password) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> $loginForm = formData();<br></br>    $loginForm.put(<span style="color: #dd1144; ">"username"</span>,$username);<br></br>    $loginForm.put(<span style="color: #dd1144; ">"password"</span>,$password);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> $call = createPost($baseURL + <span style="color: #dd1144; ">"/AppvanceServer/rest/admin/logginForServices"</span>, $loginForm);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> $resp = process($call).getDataString();<br></br>    <span style="color: #333333; font-weight: bold; ">if</span> ($resp.indexOf(<span style="color: #dd1144; ">"true"</span>) != <span style="color: #008080; ">-1</span>) { <br></br>        <span style="color: #333333; font-weight: bold; ">var</span> $jsession = getCookieValue($baseURL,<span style="color: #dd1144; ">"JSESSIONID"</span>);<br></br>        addGlobalHeader(<span style="color: #dd1144; ">"cookie"</span>,<span style="color: #dd1144; ">"JSESSION="</span> + $jsession);<br></br>        log(<span style="color: #dd1144; ">"Login successful"</span>)<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #008080; ">true</span>;<br></br>    } <span style="color: #333333; font-weight: bold; ">else</span> {<br></br>        log(<span style="color: #dd1144; ">"Login was NOT successful"</span>)<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #008080; ">false</span>;<br></br>    }<br></br>}<br></br><br></br><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">createMultipartPayload</span>($filename) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> header = <span style="color: #dd1144; ">'--'</span> + $boundary + <span style="color: #dd1144; ">'\n'</span> +<br></br>        <span style="color: #dd1144; ">'Content-Disposition: form-data; name="file"; filename="'</span> + $filename + <span style="color: #dd1144; ">'"\r\n'</span> +<br></br>        <span style="color: #dd1144; ">'Content-Type: application/octet-stream\r\n\r\n'</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> headerBytes = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Array</span>(header.length);<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < header.length; ++i) {<br></br>        headerBytes[i] = header.charCodeAt(i);<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> docBytes = readBytes($filename);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> footer = <span style="color: #dd1144; ">'\r\n--'</span> + $boundary + <span style="color: #dd1144; ">"--\r\n"</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> footerBytes = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Array</span>(footer.length);<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < footer.length; ++i) {<br></br>        footerBytes[i] = footer.charCodeAt(i);<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> headerBytes.concat(docBytes).concat(footerBytes);<br></br>}<br></br><br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> $filename = <span style="color: #dd1144; ">"test2.js"</span>;    <span style="color: #999988; font-style: italic; ">// CHANGE FOR YOUR FILE TO UPLOAD</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $repositoryName = <span style="color: #dd1144; ">"test"</span>;  <span style="color: #999988; font-style: italic; ">// CHANGE FOR YOUR REPO NAME, THIS CONF MUST BE IN THE USER ACCOUNT USED TO LOGIN</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $username = <span style="color: #dd1144; ">"appvance"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> $password = <span style="color: #dd1144; ">"appvance"</span>;<br></br><br></br>login(<span style="color: #dd1144; ">"http://my-aiq-controller.appvance.com:8080"</span>, $username, $password);   <span style="color: #999988; font-style: italic; ">// CHANGE FOR YOUR AIQ SERVER DNS</span><br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> data = createMultipartPayload($filename);<br></br>log(data.length, $username, $password);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> call= createPost(<span style="color: #dd1144; ">"http://localhost:8080/AppvanceServer/rest/file/uploadFile?&commitMessage=Appvance+skip+commit&path=REPOSITORY/"</span>+$repositoryName+<span style="color: #dd1144; ">"/"</span>+$filename, data, <span style="color: #dd1144; ">"multipart/form-data"</span>, <span style="color: #dd1144; ">" boundary="</span> + $boundary);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> resp = process(call);<br></br>log(resp.getDataString())<br></br>
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--3" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### Upload the File to an application

<div class="codeSnippet" id="bkmrk-copy-%2F%2A%2A%C2%A0%2A-creates-a">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * Creates a multipart payload from file contentes</span><br></br><span style="color: #999988; font-style: italic; "> **/</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">createMultipartPayload</span>($filename) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> header = <span style="color: #dd1144; ">'--'</span> + $boundary + <span style="color: #dd1144; ">'\n'</span> +<br></br>        <span style="color: #dd1144; ">'Content-Disposition: form-data; name="file"; filename="'</span> + $filename + <span style="color: #dd1144; ">'"\r\n'</span> +<br></br>        <span style="color: #dd1144; ">'Content-Type: application/octet-stream\r\n\r\n'</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> headerBytes = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Array</span>(header.length);<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < header.length; ++i) {<br></br>        headerBytes[i] = header.charCodeAt(i);<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> docBytes = readBytes($filename);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> footer = <span style="color: #dd1144; ">'\r\n--'</span> + $boundary + <span style="color: #dd1144; ">"--\r\n"</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> footerBytes = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Array</span>(footer.length);<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < footer.length; ++i) {<br></br>        footerBytes[i] = footer.charCodeAt(i);<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> headerBytes.concat(docBytes).concat(footerBytes);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/*</span><br></br><span style="color: #999988; font-style: italic; "> * Uploads a file to $SERVER</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">uploadFile</span>($filename) {<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> data = createMultipartPayload($filename);<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> url = $SERVER+ <span style="color: #dd1144; ">"/upload/"</span>+$filename+<span style="color: #dd1144; ">"?filename="</span>+$filename;<br></br>   log(<span style="color: #dd1144; ">"url: "</span>+url);<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> call= createPut(url, data, <span style="color: #dd1144; ">"multipart/form-data"</span>, <span style="color: #dd1144; ">" boundary="</span> + $boundary);<br></br>   <span style="color: #333333; font-weight: bold; ">return</span> process(call).getDataString();<br></br>}<br></br><br></br><span style="color: #333333; font-weight: bold; ">const</span> $boundary = <span style="color: #dd1144; ">"AIQ-DS-BOUNDARY"</span>;<br></br><span style="color: #333333; font-weight: bold; ">const</span> $SERVER = <span style="color: #dd1144; ">"http://xxxx.eu-west-2.elb.amazonaws.com"</span>;<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> $filename = <span style="color: #dd1144; ">"test2.js"</span>;    <span style="color: #999988; font-style: italic; ">// CHANGE FOR YOUR FILE TO UPLOAD</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> result = uploadFile($filename);<br></br><br></br>log(result);
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--4" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### Send an email with a custom timestamp in the Subject

<div class="code panel pdl conf-macro output-block" id="bkmrk-copy-var-date-%3D-new-" style="border-width: 1px;"><div class="codeContent panelContent pdl"><div class="codeSnippet">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">var</span> date = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Date</span>();<br></br><span style="color: #333333; font-weight: bold; ">var</span> formatDate = date.getDate() + <span style="color: #dd1144; ">"-"</span> + date.getMonth() + <span style="color: #dd1144; ">"-"</span> + date.getYear() + <span style="color: #dd1144; ">" "</span> + date.toLocaleTimeString();<br></br><span style="color: #333333; font-weight: bold; ">var</span> graphService = createOAuthMailClient(<span style="color: #dd1144; ">"email"</span>, <span style="color: #dd1144; ">"clientID"</span>, <span style="color: #dd1144; ">"secretKey"</span>, <span style="color: #dd1144; ">"tenantID"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> msg = graphService.createMailMessage(<span style="color: #dd1144; ">"Message generated "</span> + formatDate, <span style="color: #dd1144; ">"Test body email."</span>);<br></br>msg.addTo([<span style="color: #dd1144; ">"to@test.com"</span>]);<br></br><span style="color: #333333; font-weight: bold; ">var</span> sent = graphService.sendMessage(msg);<br></br><span style="color: #333333; font-weight: bold; ">if</span> (!sent) {<br></br>    <span style="color: #333333; font-weight: bold; ">throw</span> <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Error</span>(<span style="color: #dd1144; ">'An error occurred while sending the email.'</span>);<br></br>} <span style="color: #333333; font-weight: bold; ">else</span> {<br></br>    log(<span style="color: #dd1144; ">"Email sent."</span>);<br></br>}
```

 </div> </div> </div> </div>### Extract value from receive email’s subject

<div class="codeSnippet" id="bkmrk-copy-var-graphservic">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">var</span> graphService = createOAuthMailClient(<span style="color: #dd1144; ">"email"</span>, <span style="color: #dd1144; ">"clientID"</span>, <span style="color: #dd1144; ">"secretKey"</span>, <span style="color: #dd1144; ">"tenantID"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> unreadList = graphService.getUnreadMessages();<br></br><span style="color: #333333; font-weight: bold; ">var</span> unreadCount = unreadList.size();<br></br><span style="color: #333333; font-weight: bold; ">if</span> (unreadCount > <span style="color: #008080; ">0</span>) {<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; <span style="color: #999988; font-style: italic; ">//first unread email</span><br></br>  log(<span style="color: #dd1144; ">"Id: "</span> + unreadList.get(i).id);<br></br>  log(<span style="color: #dd1144; ">"From: "</span> + unreadList.get(i).from.emailAddress.address);<br></br>  log(<span style="color: #dd1144; ">"Subject: "</span> + unreadList.get(i).subject);<br></br>    <br></br>  <span style="color: #333333; font-weight: bold; ">var</span> subject = unreadList.get(i).subject;<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> startIndex = subject.lastIndexOf(<span style="color: #dd1144; ">"Ref. "</span>) + <span style="color: #008080; ">5</span>;<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> refCode = subject.substr(startIndex, <span style="color: #008080; ">8</span>);<br></br>  log(<span style="color: #dd1144; ">"Ref code: "</span> + refCode);
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--6" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>### Compare email’s body 

<div class="codeSnippet" id="bkmrk-copy-var-expectedbod">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #333333; font-weight: bold; ">var</span> expectedBody = <span style="color: #dd1144; ">"This is an automated acknowledgement to let you know that your correspondence to the Appvance Information Rights Team has been received.Any request for personal data will be handled as a data subject access request."</span>;<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> body = unreadList.get(i).body.content.replace(/(\r\n|\n|\r)/gm,<span style="color: #dd1144; ">""</span>); <span style="color: #999988; font-style: italic; ">//remove line break and spaces.</span><br></br>  body = body.substr(<span style="color: #008080; ">0</span>,body.indexOf(<span style="color: #dd1144; ">"uk"</span>)+<span style="color: #008080; ">2</span>); <span style="color: #999988; font-style: italic; ">//trim to remove links at the end</span><br></br>  log(<span style="color: #dd1144; ">"Email have the expected content: "</span> + (body === expectedBody));<br></br>} <span style="color: #333333; font-weight: bold; ">else</span> {<br></br>    log(<span style="color: #dd1144; ">"There's no unread messages."</span>);<br></br>}
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--8" style="border-width: 1px;"><div class="codeContent panelContent pdl"> </div> </div>###    
Utility Functions

<div class="codeSnippet" id="bkmrk-copy-%2F%2A%2A%C2%A0%2A-btoa%C2%A0%2A-%40p-1">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="False" style="mc-code-lang: JavaScript;">```
<span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * btoa</span><br></br><span style="color: #999988; font-style: italic; "> * @param st</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns base64 encoded string</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br> <span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">btoa</span>(st) {<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> Java.type(java.util.Base64).getEncoder().encode(st);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * atob</span><br></br><span style="color: #999988; font-style: italic; "> * @param st</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns decoded base64 string</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">atob</span>(st) {<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> Java.type(java.util.Base64).getDecoder().decode(st);<br></br>}<br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> *</span> <br></br><span style="color: #999988; font-style: italic; "> * @param length number</span><br></br><span style="color: #999988; font-style: italic; "> * @returns random number of length number of digits</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">randomNumber</span>(length) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> result = <span style="color: #dd1144; ">''</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < length; i++) {<br></br>        result += <span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * <span style="color: #008080; ">10</span>);<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> result;<br></br>}<br></br><br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * Extracts catching an exception and returning NOT_FOUND string if target is not found.</span><br></br><span style="color: #999988; font-style: italic; "> * @param {string} format ("HTML","HTTP","PDF","CSV","Excel","TEXT","STRING")</span><br></br><span style="color: #999988; font-style: italic; "> * @param {HttpResponse} response</span> <br></br><span style="color: #999988; font-style: italic; "> * @param {string} target</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">extractOrNotFound</span>(format, response, target) {<br></br>    <span style="color: #333333; font-weight: bold; ">const</span> NOT_FOUND = <span style="color: #dd1144; ">"Not found."</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> value;<br></br>    <span style="color: #333333; font-weight: bold; ">try</span> {<br></br>        value = extract(format, response, target);<br></br>        <span style="color: #333333; font-weight: bold; ">if</span> (<span style="color: #333333; font-weight: bold; ">typeof</span> value == <span style="color: #dd1144; ">"undefined"</span>) {<br></br>            <span style="color: #333333; font-weight: bold; ">return</span> NOT_FOUND;<br></br>        }<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> value;<br></br>    } <span style="color: #333333; font-weight: bold; ">catch</span> (e) {<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> NOT_FOUND;<br></br>    }<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * SSN</span><br></br><span style="color: #999988; font-style: italic; "> * @returns random string matching social security number format</span><br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">SSN</span>() {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> result = <span style="color: #dd1144; ">''</span>;<br></br>    result = randomNumber(<span style="color: #008080; ">3</span>) + <span style="color: #dd1144; ">"-"</span> + randomNumber(<span style="color: #008080; ">2</span>) + <span style="color: #dd1144; ">"-"</span> + randomNumber(<span style="color: #008080; ">4</span>);<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> result;<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">// *************************************************************************</span><br></br><span style="color: #999988; font-style: italic; ">// parseCurrencyStringToNumber</span><br></br><span style="color: #999988; font-style: italic; ">//</span><br></br><span style="color: #999988; font-style: italic; ">// Parse a currency string to a number, $1,245.50 -> 1245.5</span><br></br><span style="color: #999988; font-style: italic; ">// ************************************************************************</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">parseCurrencyStringToNumber</span>(currency) {<br></br>    <span style="color: #333333; font-weight: bold; ">if</span> (<span style="color: #333333; font-weight: bold; ">typeof</span> currency == <span style="color: #dd1144; ">"undefined"</span> || currency == <span style="color: #dd1144; ">""</span>) {<br></br>        log(<span style="color: #dd1144; ">"Warning in parseCurrencyStringToNumber, expecting a number but got undefined or empty."</span>);<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #008080; ">-1</span>;<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">if</span> (currency == <span style="color: #dd1144; ">"0"</span>) {<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #008080; ">0</span>;<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">if</span> (currency.indexOf(<span style="color: #dd1144; ">"("</span>) !== <span style="color: #008080; ">-1</span>) {<br></br>        currency = <span style="color: #dd1144; ">"-"</span> + currency.replace(/[(|)]+/g, <span style="color: #dd1144; ">""</span>)<br></br>    }<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #0086b3; ">Number</span>(<span style="color: #0086b3; ">String</span>(currency).replace(/[^<span style="color: #008080; ">0-9.</span>-]+/g, <span style="color: #dd1144; ">""</span>));<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">// *************************************************************************</span><br></br><span style="color: #999988; font-style: italic; ">// parseNumberToCurrency</span><br></br><span style="color: #999988; font-style: italic; ">//</span><br></br><span style="color: #999988; font-style: italic; ">// Parse a number to a string currency with commas, 1245.5  -> $1,245.50</span> <br></br><span style="color: #999988; font-style: italic; ">// ************************************************************************</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">parseNumberToCurrency</span>(aNumber) {<br></br>    <span style="color: #333333; font-weight: bold; ">if</span> (aNumber == <span style="color: #008080; ">0</span>) {<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> (<span style="color: #dd1144; ">"$0.00"</span>);<br></br>    };<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> tempST = <span style="color: #0086b3; ">String</span>(aNumber).replace(/[^<span style="color: #008080; ">0-9.</span>-]+/g, <span style="color: #dd1144; ">""</span>);<br></br>    <span style="color: #333333; font-weight: bold; ">try</span> {<br></br>        <span style="color: #333333; font-weight: bold; ">var</span> tempNumber = <span style="color: #0086b3; ">Number</span>(<span style="color: #0086b3; ">parseFloat</span>(tempST).toFixed(<span style="color: #008080; ">2</span>));<br></br>        <span style="color: #333333; font-weight: bold; ">var</span> tempLocale = tempNumber.toLocaleString(<span style="color: #008080; ">undefined</span>, { minimumFractionDigits: <span style="color: #008080; ">2</span> });<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #dd1144; ">"$"</span> + tempLocale;<br></br>    } <span style="color: #333333; font-weight: bold; ">catch</span> (e) {<br></br>        log(<span style="color: #dd1144; ">"Error converting to currency ["</span> + aNumber + <span style="color: #dd1144; ">"], isNAN: "</span> + <span style="color: #0086b3; ">isNaN</span>(aNumber) + <span style="color: #dd1144; ">" - "</span> + e.message);<br></br>        <span style="color: #333333; font-weight: bold; ">return</span> <span style="color: #dd1144; ">"NA"</span>;<br></br>    }<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * dateToString</span><br></br><span style="color: #999988; font-style: italic; "> * @param day</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">dateToString</span>(day) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> dd = <span style="color: #0086b3; ">String</span>(day.getDate()).padStart(<span style="color: #008080; ">2</span>, <span style="color: #dd1144; ">'0'</span>);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> mm = <span style="color: #0086b3; ">String</span>(day.getMonth() + <span style="color: #008080; ">1</span>).padStart(<span style="color: #008080; ">2</span>, <span style="color: #dd1144; ">'0'</span>); <span style="color: #999988; font-style: italic; ">//January is 0!</span><br></br>    <span style="color: #333333; font-weight: bold; ">var</span> yyyy = day.getFullYear();<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> mm + <span style="color: #dd1144; ">'/'</span> + dd + <span style="color: #dd1144; ">'/'</span> + yyyy;;<br></br>}<br></br><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">getTodayDate</span>() {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> now = java.time.LocalDateTime.now();<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> formatter = java.time.format.DateTimeFormatter.ofPattern(<span style="color: #dd1144; ">"MM/dd/yyyy"</span>);<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> now.withHour(<span style="color: #008080; ">0</span>).withMinute(<span style="color: #008080; ">0</span>).withSecond(<span style="color: #008080; ">0</span>).format(formatter);<br></br>}<br></br><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">getYesterdayDate</span>() {<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> now = java.time.LocalDateTime.now();<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> formatter = java.time.format.DateTimeFormatter.ofPattern(<span style="color: #dd1144; ">"MM/dd/yyyy"</span>);<br></br>   <span style="color: #333333; font-weight: bold; ">return</span> now.minus(<span style="color: #008080; ">1</span>, java.time.temporal.ChronoUnit.DAYS).withHour(<span style="color: #008080; ">0</span>).withMinute(<span style="color: #008080; ">0</span>)<br></br>                .withSecond(<span style="color: #008080; ">0</span>).format(formatter);<br></br>}<br></br><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">getTomorrowDate</span>() {<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> now = java.time.LocalDateTime.now();<br></br>   <span style="color: #333333; font-weight: bold; ">var</span> formatter = java.time.format.DateTimeFormatter.ofPattern(<span style="color: #dd1144; ">"MM/dd/yyyy"</span>);<br></br>   <span style="color: #333333; font-weight: bold; ">return</span> now.plus(<span style="color: #008080; ">1</span>, java.time.temporal.ChronoUnit.DAYS).withHour(<span style="color: #008080; ">0</span>).withMinute(<span style="color: #008080; ">0</span>)<br></br>                .withSecond(<span style="color: #008080; ">0</span>).format(formatter);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * getDateISOString</span><br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">getDateISOString</span>() {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> st = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Date</span>().toISOString();<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> st.replace(/\-/g, <span style="color: #dd1144; ">"_"</span>).replace(/\:/g, <span style="color: #dd1144; ">"_"</span>).replace(/\./g, <span style="color: #dd1144; ">"_"</span>);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * dateOneMonthAfter</span><br></br><span style="color: #999988; font-style: italic; "> * @param $date</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">dateOneMonthAfter</span>($date) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> day = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Date</span>(<span style="color: #0086b3; ">Date</span>.parse($date));<br></br>    day.setMonth(day.getMonth() + <span style="color: #008080; ">1</span>);<br></br>    day.setTime(day.getTime() + TIME_OFFSET);<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> dateToString(day);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * dateOneYearAfter</span><br></br><span style="color: #999988; font-style: italic; "> * @param $date</span> <br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br><span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">dateOneYearAfter</span>($date) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> day = <span style="color: #333333; font-weight: bold; ">new</span> <span style="color: #0086b3; ">Date</span>(<span style="color: #0086b3; ">Date</span>.parse($date));<br></br>    day.setFullYear(day.getFullYear() + <span style="color: #008080; ">1</span>);<br></br>    day.setTime(day.getTime() + TIME_OFFSET);<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> dateToString(day);<br></br>}<br></br><br></br><span style="color: #999988; font-style: italic; ">/**</span><br></br><span style="color: #999988; font-style: italic; "> * randomLastName</span><br></br><span style="color: #999988; font-style: italic; "> * @returns</span> <br></br><span style="color: #999988; font-style: italic; "> */</span><br></br> <span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">randomLastName</span>() {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> sylabs = <span style="color: #008080; ">2</span> + <span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * <span style="color: #008080; ">2</span>)<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> result = <span style="color: #dd1144; ">''</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> characters = <span style="color: #dd1144; ">'bccdfghjkllmnnprrssttvwyz'</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> vocals = <span style="color: #dd1144; ">'aeioeua'</span>;<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> charactersLength = characters.length;<br></br>    result += <span style="color: #dd1144; ">"SBCLKJMCH"</span>.charAt(<span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * <span style="color: #008080; ">9</span>));<br></br>    result += vocals.charAt(<span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * <span style="color: #008080; ">7</span>));<br></br>    sylabs--;<br></br>    <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> i = <span style="color: #008080; ">0</span>; i < sylabs; i++) {<br></br>        result += characters.charAt(<span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * charactersLength));<br></br>        result += vocals.charAt(<span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * <span style="color: #008080; ">7</span>));<br></br>    }<br></br>    result += characters.charAt(<span style="color: #0086b3; ">Math</span>.floor(<span style="color: #0086b3; ">Math</span>.random() * charactersLength));<br></br>    <span style="color: #333333; font-weight: bold; ">return</span> result;<br></br>}
```

 </div> </div><div class="code panel pdl conf-macro output-block" id="bkmrk--9" style="border-width: 1px;"><div class="codeContent panelContent pdl">```

```

 </div> </div><div id="bkmrk-last-updated%3A-june-0">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 02, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>