Hi Team,
Here is what I am trying to do -
Example Workflow Sequence
-
JSONToResultSet
- Input: JSON string (e.g., from an API or workflow variable)
- Output: resultSet
-
ResultSetToHTML
- Input: resultSet (from previous step)
- Output: htmlTable
-
Email
- Body: Insert variable for htmlTable
- Format: HTML
What I get in the email -
JSON in HTML Tables.. Effectively Junk…
If you want to follow along (Locate {YOURCommserveURL},{YOURServersEMAILADDRESS}, {YourEMAILADDRESS} and change before importing) -
<?xml version="1.0" encoding="UTF-8"?>
<Workflow_WorkflowDefinition outputs="<outputs />" webHidden="0" isHtmlDescription="0" inputs="<inputs />" interactive="0" description="" manualPercentageComplete="0" apiMode="0" executeOnWeb="0" variables="<variables />" revision="$Revision: $" tags="" uniqueGuid="48bb19cf-4d95-43d0-bf71-b58f31ce7db6" name="Daily Backup Report Testing" config="<configuration />">
<schema>
<outputs className="" type="" name="outputs" />
<variables className="" type="" name="variables" />
<inputs className="" type="" attribute="0" name="inputs" />
<config className="" type="" name="configuration" />
</schema>
<Start displayName="Start" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" commented="0" height="36" created="0" breakpoint="0" uniqueName="Start_1" skipAttempt="0" name="Start" width="58" x="45" y="41" style="image;image=/images/jgraphx/house.png">
<inputs val="<inputs />" />
<transition sourceX="72" sourceY="59" activity="HttpClient_1" targetY="116" targetX="237" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition script="/*
The expression should return a boolean. Use the variable name "activity" to refer to the previous activity object. Example:
activity.exitCode==0;
*/
" />
</transition>
</Start>
<Activity displayName="HttpClient" interactive="0" originalStyle="" jobMode="0" description="performs http operations" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="34" created="1770612538350" breakpoint="0" uniqueName="HttpClient_1" skipAttempt="0" name="HttpClient" width="100" x="184" y="253" style="label;image=commvault.cte.workflow.activities.HttpClientActivity">
<inputs val="<inputs><request><url>https://{YOURCommserveURL}/commandcenter/api/cr/reportsplusengine/datasets/2638c3d3-adc7-4b61-bb24-2ba509229bf5:a30bd278-c7d9-470f-9ae9-8b4922743330/data</url><method>GET</method><postType>Raw</postType><postContent></postContent><postContentType>application/xml; charset=UTF-8</postContentType><parameters><name>orderby</name><value>[JobId] Desc</value></parameters><parameters><name>parameter.JobStatus[]</name><value>Running,Delayed,Failed,No Run,Killed,Completed with Errors,Completed with Warnings,Committed</value></parameters><parameters><name>parameter.timeframe</name><value>	-PT24H P0D</value></parameters><parameters><name>parameter.useCSTimeZone</name><value>-2</value></parameters><parameters><name>parameter.WindowStartTime</name><value>00:00:00</value></parameters><parameters><name>parameter.datasource[]</name><value>2</value></parameters><headers><name>Authtoken</name><value>QSDKONLY xpath:{/workflow/system/token}</value></headers><headers><name>Accept</name><value>application/json</value></headers></request></inputs>" />
<transition sourceX="237" sourceY="116" activity="JSONToResultSet_1" targetY="381" targetX="180" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*
The expression should return a boolean. Use the variable name "activity" to refer to the previous activity object. Example:
activity.exitCode==0;
*/
" />
</transition>
</Activity>
<Activity displayName="Email" interactive="0" originalStyle="" jobMode="0" description="Sends an email to a list of users" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="34" created="1770613083665" breakpoint="0" uniqueName="Email_1" skipAttempt="0" name="Email" width="100" x="909" y="256" style="label;image=commvault.cte.workflow.activities.EmailActivity">
<inputs val="<inputs><email><from>Galaxy@{YOURServersEMAILADDRESS}</from><to>{YourEMAILADDRESS}z</to><cc /><bcc /><subject>Fulton Hogan Daily Backup Report</subject><attachments /><repeatInterval /><body>&lt;div style="background-color: white; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px"&gt;&#xD;
 &lt;h2 align="left" style="margin-top: 0"&gt;&#xD;
 Commvault Cloud Software Status&#xD;
 &lt;/h2&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 CommVault:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 xpath:{/workflow/ResultSetToHTML_1/output}&#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Missed SLA:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 &#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Aux Tape Backup:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 &#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Aux Disk Backup:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 &#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Totals:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 &#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Scratch Pool Check:&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="margin-top: 4px"&gt;&#xD;
 &#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;div style="padding-top: 12px; padding-right: 12px; padding-bottom: 12px; padding-left: 12px; margin-top: 10px; margin-bottom: 10px; margin-right: 0; margin-left: 0; background-color: #fafafa; background-image: null; background-repeat: repeat; background-attachment: scroll; background-position: null; border-left-color: #4a90e2; border-left-style: solid; border-left-width: 5px"&gt;&#xD;
 &lt;div&gt;&#xD;
 Tape Libraries and Status:&#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;&#xD;
 &lt;/div&gt;</body><html>true</html></email></inputs>" />
</Activity>
<Activity displayName="JSONToResultSet" interactive="0" originalStyle="" jobMode="0" description="converts a json string to a result set" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="34" created="1771548667599" breakpoint="0" uniqueName="JSONToResultSet_1" skipAttempt="0" name="JSONToResultSet" width="131" x="151" y="363" style="label;image=commvault.cte.workflow.activities.JsonToResultSet">
<inputs val="<inputs><json class="java.lang.String" _list_="false">xpath:{/workflow/HttpClient_1/output}</json></inputs>" />
<transition sourceX="216" sourceY="380" activity="ResultSetToHTML_1" targetY="433" targetX="377" originalStyle="" description="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*
The expression should return a boolean. Use the variable name "activity" to refer to the previous activity object. Example:
activity.exitCode==0;
*/
" />
</transition>
</Activity>
<Activity displayName="ResultSetToHTML" interactive="0" originalStyle="" jobMode="0" description="converts a result set to an HTML table" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="34" created="1771548712005" breakpoint="0" uniqueName="ResultSetToHTML_1" skipAttempt="0" name="ResultSetToHTML" width="131" x="405" y="290" style="label;image=commvault.cte.workflow.activities.ResultSetToHTML">
<inputs val="<inputs><resultSet class="java.lang.Object" _list_="false">xpath:{/workflow/JSONToResultSet_1/resultSet}</resultSet><headers class="java.lang.Boolean" _list_="false">false</headers></inputs>" />
<transition sourceX="470" sourceY="307" activity="Email_1" targetY="276" targetX="667" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*
The expression should return a boolean. Use the variable name "activity" to refer to the previous activity object. Example:
activity.exitCode==0;
*/
" />
</transition>
</Activity>
<formProperties />
<minCommCellVersion servicePack="0" releaseID="16" />
</Workflow_WorkflowDefinition>
Thanks for reading :)
