Skip to main content
Solved

How do get my workflows to just start and return a jobid?

  • 2 July 2024
  • 6 replies
  • 30 views

All my workflows will start but stay on the submission page until the workflow completes.

What am I doing wrong?

I want to enter the options for the workflow and then have it return the jobid.

 

Thanks.

6 replies

We need more details… Can you share a generalized (with no credentials etc.) WF?

Userlevel 5
Badge +16

Sure. 

I’ll share one I just cooked up.

 

<?xml version="1.0" encoding="UTF-8"?>
<Workflow_WorkflowDefinition outputs="&lt;outputs /&gt;" webHidden="0" isHtmlDescription="0" inputs="&lt;inputs&gt;&lt;Clients class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;Group class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;/inputs&gt;" interactive="0" description="Adds List of Clients to a specified group" manualPercentageComplete="0" apiMode="0" executeOnWeb="1" variables="&lt;variables&gt;&lt;Succesfull class=&quot;java.lang.Integer&quot; _list_=&quot;false&quot; /&gt;&lt;Failed class=&quot;java.lang.Integer&quot; _list_=&quot;false&quot; /&gt;&lt;/variables&gt;" revision="$Revision: $" tags="" uniqueGuid="5ff5e09a-7f55-4b45-ae46-830904420a7e" name="Create Client Groups" config="&lt;configuration&gt;&lt;regex_findfqdn class=&quot;java.lang.String&quot; _list_=&quot;false&quot;&gt;(?i)^(?:([a-z0-9-]+|\*)\.)?([a-z0-9-]{1,61})\.([a-z0-9]{2,7})$&lt;/regex_findfqdn&gt;&lt;regex_checkiftextisip class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;/configuration&gt;">
<schema>
<outputs className="" type="" name="outputs" />
<variables className="" type="" name="variables">
<children hidden="0" defaultValue="" className="java.lang.Integer" type="{http://www.w3.org/2001/XMLSchema}integer" listType="0" inputType="java.lang.Integer" attribute="0" controlType="0" name="Succesfull" />
<children hidden="0" defaultValue="" className="java.lang.Integer" type="{http://www.w3.org/2001/XMLSchema}integer" listType="0" inputType="java.lang.Integer" attribute="0" controlType="0" name="Failed" />
</variables>
<inputs className="" type="" attribute="0" name="inputs">
<children hidden="0" defaultValue="" displayName="" className="java.lang.String" type="{http://www.w3.org/2001/XMLSchema}string" listType="0" required="0" minimumValue="" inputType="java.lang.String" attribute="0" documentation="" controlHidden="0" readOnly="0" searchable="0" controlType="0" name="Group" maximumValue="" />
<children hidden="0" defaultValue="" displayName="" className="java.lang.String" type="{http://www.w3.org/2001/XMLSchema}string" listType="0" required="0" minimumValue="" inputType="java.lang.String" attribute="0" documentation="" controlHidden="0" readOnly="0" searchable="0" controlType="1" name="Clients" maximumValue="" />
</inputs>
<config className="" type="" attribute="0" name="configuration">
<children hidden="0" defaultValue="" displayName="" className="java.lang.String" type="{http://www.w3.org/2001/XMLSchema}string" listType="0" required="0" minimumValue="" inputType="java.lang.String" attribute="0" documentation="" controlHidden="0" readOnly="0" searchable="0" controlType="0" name="regex_findfqdn" maximumValue="" />
<children hidden="0" defaultValue="" displayName="" className="java.lang.String" type="{http://www.w3.org/2001/XMLSchema}string" listType="0" required="0" minimumValue="" inputType="java.lang.String" attribute="0" documentation="" controlHidden="0" readOnly="0" searchable="0" controlType="0" name="regex_checkiftextisip" maximumValue="" />
</config>
</schema>
<Start displayName="Start" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" commented="0" height="36" created="0" breakpoint="0" uniqueName="Start_Workflow" skipAttempt="0" name="Start" width="58" x="328" y="135" style="image;image=/images/jgraphx/house.png">
<inputs val="&lt;inputs /&gt;" />
<transition sourceX="70" sourceY="60" activity="SanitizeClientinputs" targetY="590" targetX="410" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
</Start>
<Activity displayName="Create Client Group" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities.cmd.operation" commented="0" height="50" created="1719920321807" breakpoint="0" uniqueName="CreateClientGroup" skipAttempt="1" name="Execute" width="170" x="266" y="318" style="label;image=commvault.cte.workflow.activities.cmd.operation.OperationExecute;shadow=0">
<inputs val="&lt;inputs&gt;&lt;inputXml class=&quot;java.lang.String&quot; _list_=&quot;false&quot;&gt;&amp;lt;App_PerformClientGroupReq&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupDetail&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedClients&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedClients&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedClients&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedClients&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroup&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientGroupName&amp;gt;xpath:{/workflow/inputs/Group}&amp;lt;/clientGroupName&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;newName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroup&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupActivityControl&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;activityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dateTime/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableActivityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableAfterADelay/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;activityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dateTime/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableActivityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableAfterADelay/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupActivityControl&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupSecurity&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userGroupName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userGroupName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;associatedUserGroupsOperationType/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;ownerCapabilities&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilities/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilities/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilitiesOperationType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/ownerCapabilities&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupSecurity&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;description/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;dlpPropertise&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpContents/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpEnableClientKeys/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpMinFileAgeMins/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpRMProperties/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpScanIntervalMins/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpStolen/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableDLP/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/dlpPropertise&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isAddinClientGroup/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isEDCInstanceAssociated/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isEDCInstanceDeleted/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isNetworkThrottleEnabled/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isSmartClientGroup/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;overrideHigherLevelSettings&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;overrideGlobalAuthentication/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;useLocalSystemAccount/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;userAccount&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/userAccount&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/overrideHigherLevelSettings&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;scgRule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;op/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rules&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;op/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rules&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;filterID/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;propID/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;propType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;secValue/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;value/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rules&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rules&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/scgRule&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;webSearchServer&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/webSearchServer&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupDetail&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientGroupOperationType&amp;gt;Create&amp;lt;/clientGroupOperationType&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/App_PerformClientGroupReq&amp;gt;&lt;/inputXml&gt;&lt;escapeXml class=&quot;java.lang.Boolean&quot; _list_=&quot;false&quot;&gt;false&lt;/escapeXml&gt;&lt;commandArgs class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;sessionOptions class=&quot;workflow.types.cmd.SessionOptions&quot; _list_=&quot;false&quot;&gt;&lt;useImpersonatedAccount class=&quot;java.lang.Boolean&quot; _list_=&quot;false&quot;&gt;true&lt;/useImpersonatedAccount&gt;&lt;tokenFile class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;token class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;/sessionOptions&gt;&lt;/inputs&gt;" />
<transition sourceX="350" sourceY="340" activity="WorkflowEnd_1" targetY="330" targetX="570" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="2">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
<transition sourceX="350" sourceY="340" activity="ForEach_Client" targetY="530" targetX="360" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="3">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
</Activity>
<Activity displayName="ForEach" interactive="0" originalStyle="" jobMode="0" description="iterates a group of activities over a list of values" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="310" created="1719920390791" breakpoint="0" uniqueName="ForEach_Client" skipAttempt="1" name="ForEach" width="430" x="210" y="440" style="swimlane">
<inputs val="&lt;inputs&gt;&lt;name class=&quot;java.lang.String&quot;&gt;output&lt;/name&gt;&lt;values class=&quot;java.lang.Object&quot; _list_=&quot;false&quot;&gt;xpath:{/workflow/SanitizeClientinputs/output}&lt;/values&gt;&lt;numberOfParallelExecutions class=&quot;java.lang.Integer&quot; _list_=&quot;false&quot;&gt;1&lt;/numberOfParallelExecutions&gt;&lt;continueOnFailure class=&quot;java.lang.Boolean&quot; _list_=&quot;false&quot;&gt;false&lt;/continueOnFailure&gt;&lt;/inputs&gt;" />
<superProcess>
<Start displayName="Start" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" commented="0" height="30" created="1719920390791" breakpoint="0" uniqueName="Start_UpdatingClientGroup" skipAttempt="1" name="Start" width="120" x="94" y="41" style="label;fillColor=#FFFF33;gradientColor=#FFFF00;shadow=0">
<inputs val="&lt;inputs /&gt;" />
<transition sourceX="157" sourceY="55" activity="updateClientGroup" targetY="145" targetX="167" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
</Start>
<Activity displayName="Update Client Group" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities.cmd.operation" commented="0" height="50" created="1719920706523" breakpoint="0" uniqueName="updateClientGroup" skipAttempt="1" name="Execute" width="190" x="58" y="111" style="label;image=commvault.cte.workflow.activities.cmd.operation.OperationExecute;shadow=0">
<onExit language="4" script="String event = &quot;&quot;;&#xD;&#xA;String client = xpath:{/workflow/ForEach_Client/output};&#xD;&#xA;String group = xpath:{/workflow/inputs/Group};&#xD;&#xA;int exitcode = xpath:{/workflow/updateClientGroup/exitCode};&#xD;&#xA;if (exitcode != 0)&#xD;&#xA; {event = String.format(&quot;%s was added to client group %s&quot;,client,group);}&#xD;&#xA;else&#xD;&#xA; {event = String.format(&quot;%s was not added to client group %s&quot;,client,group);}&#xD;&#xA;&#xD;&#xA;workflow.setLocalVariable(&quot;event&quot;,event);" />
<inputs val="&lt;inputs&gt;&lt;inputXml class=&quot;java.lang.String&quot; _list_=&quot;false&quot;&gt;&amp;lt;App_PerformClientGroupReq&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientGroupOperationType&amp;gt;Update&amp;lt;/clientGroupOperationType&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupDetail&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;associatedClientsOperationType&amp;gt;2&amp;lt;/associatedClientsOperationType&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedClients&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName&amp;gt;xpath:{/workflow/ForEach_Client/output}&amp;lt;/clientName&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedClients&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedClients&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedClients&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroup&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientGroupName&amp;gt;xpath:{/workflow/inputs/Group}&amp;lt;/clientGroupName&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;newName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroup&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupActivityControl&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;activityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dateTime/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableActivityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableAfterADelay/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;activityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dateTime/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableActivityType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableAfterADelay/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/activityControlOptions&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupActivityControl&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;clientGroupSecurity&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userGroupName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userGroupName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/associatedUserGroups&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;associatedUserGroupsOperationType/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;ownerCapabilities&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilities/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilities/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;individualCapabilitiesOperationType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/ownerCapabilities&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupSecurity&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;description/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;dlpPropertise&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpContents/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpEnableClientKeys/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpFilters/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpMinFileAgeMins/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpRMProperties/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpScanIntervalMins/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;dlpStolen/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;enableDLP/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/dlpPropertise&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isAddinClientGroup/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isEDCInstanceAssociated/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isEDCInstanceDeleted/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isNetworkThrottleEnabled/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;isSmartClientGroup/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;overrideHigherLevelSettings&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;overrideGlobalAuthentication/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;useLocalSystemAccount/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;userAccount&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;userName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/userAccount&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/overrideHigherLevelSettings&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;scgRule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;op/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rules&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;op/&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rules&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;filterID/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;propID/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;propType/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;secValue/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;value/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rules&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rule&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/rules&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/scgRule&amp;gt;&amp;#xD;&#xD;&#xA;&amp;lt;webSearchServer&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientName/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/webSearchServer&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;claQuota/&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/clientGroupDetail&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;clientGroupOperationType&amp;gt;Update&amp;lt;/clientGroupOperationType&amp;gt;&amp;#xD;&#xD;&#xA; &amp;lt;/App_PerformClientGroupReq&amp;gt;&lt;/inputXml&gt;&lt;escapeXml class=&quot;java.lang.Boolean&quot; _list_=&quot;false&quot;&gt;false&lt;/escapeXml&gt;&lt;commandArgs class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;sessionOptions class=&quot;workflow.types.cmd.SessionOptions&quot; _list_=&quot;false&quot;&gt;&lt;useImpersonatedAccount class=&quot;java.lang.Boolean&quot; _list_=&quot;false&quot;&gt;true&lt;/useImpersonatedAccount&gt;&lt;tokenFile class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;token class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;/sessionOptions&gt;&lt;/inputs&gt;" />
<transition sourceX="150" sourceY="140" activity="LogEvent_1" targetY="220" targetX="180" originalStyle="" description="" points="" x="0" y="0" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
</Activity>
<Activity displayName="java:{&#xD;&#xA;return workflow.getLocalVariable(&quot;event&quot;);&#xD;&#xA;}:java" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="70" created="1719926622609" breakpoint="0" uniqueName="LogEvent_1" skipAttempt="0" name="LogEvent" width="340" x="27" y="203" style="label;image=commvault.cte.workflow.activities.LogEventActivity;shadow=0">
<inputs val="&lt;inputs&gt;&lt;severity class=&quot;workflow.types.SeverityLevel&quot; _list_=&quot;false&quot;&gt;INFO&lt;/severity&gt;&lt;message class=&quot;java.lang.String&quot; _list_=&quot;false&quot; /&gt;&lt;/inputs&gt;" />
</Activity>
</superProcess>
<activitySchema>
<outputs name="outputs">
<children hidden="0" defaultValue="" className="java.lang.Object" type="{http://www.w3.org/2001/XMLSchema}anyType" listType="0" inputType="java.lang.Object" attribute="0" name="output" />
</outputs>
<inputs defaultValue="" className="" type="" listType="0" name="">
<children hidden="0" defaultValue="" className="java.lang.String" type="{http://www.w3.org/2001/XMLSchema}string" listType="0" inputType="java.lang.String" attribute="0" name="name" />
<children hidden="0" defaultValue="" className="java.lang.Object" type="{http://www.w3.org/2001/XMLSchema}anyType" listType="0" inputType="java.lang.Object" attribute="0" name="values" />
<children hidden="0" defaultValue="1" displayName="" className="java.lang.Integer" type="{http://www.w3.org/2001/XMLSchema}integer" listType="0" inputType="java.lang.Integer" attribute="0" name="numberOfParallelExecutions" />
<children hidden="0" defaultValue="false" className="java.lang.Boolean" type="{http://www.w3.org/2001/XMLSchema}boolean" listType="0" inputType="java.lang.Boolean" attribute="0" name="continueOnFailure" />
</inputs>
</activitySchema>
</Activity>
<Activity displayName="Sanitize Client Inputs" interactive="0" originalStyle="" jobMode="0" description="" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="50" created="1712154451302" breakpoint="0" uniqueName="SanitizeClientinputs" skipAttempt="1" name="Script" width="170" x="264" y="228" style="label;image=commvault.cte.workflow.activities.ScriptActivity;shadow=0;whiteSpace=wrap">
<inputs val="&lt;inputs&gt;&lt;script language=&quot;4&quot; script=&quot;/*&amp;#xD;&amp;#xA;Create Client Group script&amp;#xD;&amp;#xA;Christopher Lecky &amp;#xD;&amp;#xA;Cleans up ClientName list&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;*/&amp;#xD;&amp;#xA;import java.util.HashMap;&amp;#xD;&amp;#xA;import java.util.ArrayList;&amp;#xD;&amp;#xA;import java.util.List;&amp;#xD;&amp;#xA;import java.util.regex.*; &amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA; &amp;#xD;&amp;#xA;//---------------------------- Script Variables Begin --------------------------&amp;#xD;&amp;#xA;def inputClientNamestring = xpath:{/workflow/inputs/Clients};&amp;#xD;&amp;#xA;String status = &amp;quot;&amp;quot;;&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;//##################################################### Script ##################################################################################&amp;#xD;&amp;#xA;logger.info(System.getProperty(&amp;quot;line.separator&amp;quot;));&amp;#xD;&amp;#xA;logger.info(&amp;quot;############################################ Sanitize ClientName Search list Script LOG ############################################&amp;quot;);&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;String[] ClientNames = sanitizeClientNamelist(inputClientNamestring);&amp;#xD;&amp;#xA;return ClientNames;&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;//################################################# Functions #############################################&amp;#xD;&amp;#xA;// --------------------------- Function - String to Map Begin----------------&amp;#xD;&amp;#xA;Map stringToMap(String data) {&amp;#xD;&amp;#xA; Map map = new HashMap();&amp;#xD;&amp;#xA; String key,value;&amp;#xD;&amp;#xA; String[] keyValues = data.split(&amp;quot;,&amp;quot;);&amp;#xD;&amp;#xA; for (String keyValue : keyValues) {&amp;#xD;&amp;#xA; String[] parts = keyValue.split(&amp;quot;=&amp;quot;);&amp;#xD;&amp;#xA; key = parts[0];&amp;#xD;&amp;#xA; value = parts[1];&amp;#xD;&amp;#xA; logger.info(&amp;quot;Key :&amp;quot; + key + &amp;quot; Value:&amp;quot; + value);&amp;#xD;&amp;#xA; map.put(key, value);&amp;#xD;&amp;#xA; }&amp;#xD;&amp;#xA;return map;&amp;#xD;&amp;#xA;}&amp;#xD;&amp;#xA;// --------------------------- Function - Sanitize ClientName list ----------------&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;String[] sanitizeClientNamelist(String ClientNames){&amp;#xD;&amp;#xA; ArrayList tempinputClientNameList = ClientNames.split(&amp;quot;[^a-zA-Z0-9-.]&amp;quot;);&amp;#xD;&amp;#xA; &amp;#xD;&amp;#xA; tempinputClientNameList.removeAll(Collections.singleton(null));&amp;#xD;&amp;#xA; tempinputClientNameList.removeAll(Collections.singleton(&amp;quot;&amp;quot;));&amp;#xD;&amp;#xA; String newLine = System.getProperty(&amp;quot;line.separator&amp;quot;);&amp;#xD;&amp;#xA; List sanitizedClientNamelist = new ArrayList();&amp;#xD;&amp;#xA; logger.info(&amp;quot;Starting virtual machine name validation:&amp;quot;);&amp;#xD;&amp;#xA; for (tempinputClientName : tempinputClientNameList){&amp;#xD;&amp;#xA; &amp;#xD;&amp;#xA; if (isthisanIP(tempinputClientName)){&amp;#xD;&amp;#xA; status = String.format(&amp;quot;%-30s is a IP address and will be removed from the search list&amp;quot;,tempinputClientName); &amp;#xD;&amp;#xA; logger.info(status);&amp;#xD;&amp;#xA; continue; //Skips to next ClientNamename in list&amp;#xD;&amp;#xA; }&amp;#xD;&amp;#xA; &amp;#xD;&amp;#xA; if (isthisaHostName(tempinputClientName)){&amp;#xD;&amp;#xA; String[] parts = tempinputClientName.split( &amp;quot;\\.&amp;quot; );&amp;#xD;&amp;#xA; sanitizedClientNamelist.add(parts[0]);&amp;#xD;&amp;#xA; sanitizedClientNamelist.add(tempinputClientName);&amp;#xD;&amp;#xA; status = String.format(&amp;quot;%-30s is a fully qualified name, the fully qualified name AND the shorteneded name will be added to the search list&amp;quot;,tempinputClientName);&amp;#xD;&amp;#xA; sanitizedClientNamelist.add(parts[0]);&amp;#xD;&amp;#xA; sanitizedClientNamelist.add(tempinputClientName);&amp;#xD;&amp;#xA; }else{&amp;#xD;&amp;#xA; status = String.format(&amp;quot;%-30s is a valid name and will be added to the search list&amp;quot; ,tempinputClientName);&amp;#xD;&amp;#xA; sanitizedClientNamelist.add(tempinputClientName);&amp;#xD;&amp;#xA; }&amp;#xD;&amp;#xA; logger.info(status);&amp;#xD;&amp;#xA; &amp;#xD;&amp;#xA; }&amp;#xD;&amp;#xA; status = sanitizedClientNamelist + &amp;quot; will be processed&amp;quot; ;&amp;#xD;&amp;#xA; logger.info(status); &amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;return sanitizedClientNamelist;&amp;#xD;&amp;#xA;}&amp;#xD;&amp;#xA;// --------------------------- Function is this an IP-----------------------&amp;#xD;&amp;#xA;boolean isthisanIP (String ip) {&amp;#xD;&amp;#xA; try {&amp;#xD;&amp;#xA; if (ip == null || ip.isEmpty()){return false;}&amp;#xD;&amp;#xA; String[] parts = ip.split( &amp;quot;\\.&amp;quot; );&amp;#xD;&amp;#xA; if ( parts.length != 4 ){return false;}&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA; for (String s : parts) {&amp;#xD;&amp;#xA; int i = Integer.parseInt(s);&amp;#xD;&amp;#xA; if ( (i &amp;lt; 0) || (i &amp;gt; 255) ){return false;}&amp;#xD;&amp;#xA; }&amp;#xD;&amp;#xA; if ( ip.endsWith(&amp;quot;.&amp;quot;) ){return false;}&amp;#xD;&amp;#xA; return true;&amp;#xD;&amp;#xA; } catch (NumberFormatException nfe) {return false;}&amp;#xD;&amp;#xA;}&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;boolean isthisaHostName (String name) {&amp;#xD;&amp;#xA; String fqdnregex = xpath:{/workflow/configuration/regex_findfqdn};&amp;#xD;&amp;#xA; Pattern regexPattern = Pattern.compile(fqdnregex);&amp;#xD;&amp;#xA; Matcher matchRegex = regexPattern.matcher(name);&amp;#xD;&amp;#xA; return matchRegex.matches();&amp;#xD;&amp;#xA;}&quot; /&gt;&lt;/inputs&gt;" />
<transition sourceX="346" sourceY="258" activity="CreateClientGroup" targetY="378" targetX="436" originalStyle="" description="" points="" x="16" y="178" transitionIndex="0" style="defaultEdge" commented="0" status="0">
<condition language="4" script="/*&#xA;The expression should return a boolean. Use the variable name &quot;activity&quot; to refer to the previous activity object. Example:&#xA;activity.exitCode==0;&#xA;*/&#xA;" />
</transition>
</Activity>
<Activity displayName="Client group xpath:{/workflow/inputs/Group} could not be created" interactive="0" originalStyle="" jobMode="0" description="Ends the workflow" waitSetting="0" continueOnFailure="0" namespaceUri="commvault.cte.workflow.activities" commented="0" height="30" created="1719926001812" breakpoint="0" uniqueName="WorkflowEnd_1" skipAttempt="0" name="WorkflowEnd" width="470" x="555" y="323" style="label;image=commvault.cte.workflow.activities.EndActivity;shadow=0">
<inputs val="&lt;inputs&gt;&lt;completionStatus class=&quot;workflow.types.WorkflowCompletionStatus&quot; _list_=&quot;false&quot;&gt;FAILED&lt;/completionStatus&gt;&lt;failureMessage class=&quot;java.lang.String&quot; _list_=&quot;false&quot;&gt;Client Group xpath:{/workflow/inputs/Group} could not be created&lt;/failureMessage&gt;&lt;/inputs&gt;" />
</Activity>
<formProperties css="" javaScript="" pageMode="0" formVersion="0">
<rules />
</formProperties>
<minCommCellVersion servicePack="0" releaseID="16" />
</Workflow_WorkflowDefinition>

 

Userlevel 5
Badge +16

Oh brother. I pasted the XML but the post got flagged for review 😭

Userlevel 5
Badge +16

What is happening?

Userlevel 5
Badge +16

I tried to post the XML of an example workflow but it got blocked. 

 

 

Most of the workflows I make use the intput wizard, because the standard inputs don’t allow for filtering.

 

for example I have a workflow for decommissioning servers, if I allow selection of the servers for the workflow input it will allow end users to select the commserve or media agents either maliciously or by accident. 

By using a wizard I can select for specific clients, based on whatever criteria I consider to be relevant.

For those workflows I cannot set the workflow as interactive to it just sits there's and waits while the workflow runs. 

I guess the question is how do I switch the workflow from interactive to non-interactive?

 

Also. how do I get the workflow to pop the jobid for the workflow after submission?

Essentially when I set the workflow for interactive it submits but doesn't give you the jobid in command center like I see some workflows do.

 

This makes running the workflow seamless, I want to submit the workflow then click on the jobid to monitor.

 

 

Userlevel 5
Badge +16

BUMP

Reply