{
  "Name": "Reportworq - Rest API Run Job Sample - Cloud - 1.1",
  "HasSecurityAccess": false,
  "PrologProcedure": "\r\n#****Begin: Generated Statements***\r\n#****End: Generated Statements****\r\n\r\n\r\n#==========================================================================================\r\n# PROCESS\r\n# Reportworq - Rest API Run Job Sample - Cloud - 1.1\r\n#==========================================================================================\r\n#\r\n# PURPOSE:\r\n#\r\n#    THIS PROCESS CAN BE USED TO RUN A Reportworq JOB\r\n#           USING THE Reportworq CLOUD REST API\r\n#\r\n#    THE PROCESS BUILDS A JOB REQUEST JSON FILE,\r\n#          WRITES THE REQUIRED POWERSHELL SCRIPT,\r\n#       AND SENDS THE REQUEST TO THE Reportworq SERVER\r\n#             API FOR JOB EXECUTION\r\n#\r\n# PARAMETERS:\r\n# pApiUrl (String): Cloud API endpoint for running a job from TI. Example: https://api.quebit.com/call/run\r\n# pCloudConnectorApiKey (String): Cloud API key required for API access.\r\n# pJobName (String): Reportworq Job Path (MyFolder/MyJob or MyJob).\r\n# pWorkspaceName (String): Reportworq workspace to run the job on. If there is only one workspace available, this parameter is optional.\r\n# pNotificationEmail (String): Email address to send notifications (optional).\r\n# pHoldForDelivery (String): Hold Jobs for Review before Distribution ( true/false ) - by default this is set to false.\r\n# pAllowedFileOutputTypes (String): Allowed output types for the job, semicolon delimited, blank defaults to all configured (excel/pdf/ppt/csv).\r\n# pAllowedDestinationTypes (String): Allowed distribution types for the job, semicolon delimited, blank defaults to all configured (file/sharepoint/sheets/email/slack/teams).\r\n# pConvertPowerPointToPdf (String): Convert PPT files to PDF before Distribution ( true/false ).\r\n# pTlsSecurity (String): Supported Tls security modes used to connect to Reportworq; by default these are set to Tls11,Tls12.\r\n# pLogLevel (String): Optional Reportworq job log level (Debug/Trace); by default this is blank for a regular job run.\r\n#\r\n# MODIFICATION HISTORY:\r\n# Version 1.0: initial release for IBM PA Cloud\r\n# Version 1.1: commentary updated to match current cloud TI parameters and behavior\r\n#\r\n#==========================================================================================\r\n\r\n\r\n############################\r\n# PATH SETTINGS\r\n############################\r\n\r\n#   Reportworq Folder: \r\n#      This is the folder where all Reportworq files are stored, inside the model's Data folder\r\n#   \r\n\r\ncReportworqFolder = './Reportworq/';\r\n\r\n#   Reportworq Job Request Folder: \r\n#      This is the folder where the job json request is written by this process, and then referenced in the call to \r\n#       RunApiJob.ps1 file that  will be used to call the Reportworq Server API to run a job.\r\n#   \r\n\r\ncJobRequestFolder = cReportworqFolder | 'RunAPIJobRequests/';\r\n\r\n#   Reportworq Logs Folder: \r\n#      This is the folder where logs will be written.\r\n#   \r\n\r\ncLogsFolder = cReportworqFolder | 'RunAPIJobLogs/';\r\n\r\n#   Reportworq PowerShellScriptFile : \r\n#      This is the .ps1 file that will be used to call the Reportworq Server API to run a job.   \r\n\r\ncCommandFileName = cReportworqFolder | 'Reportworq_RunAPIJob.ps1';\r\n\r\n\r\n#####################################\r\n# POWERSHELL SCRIPT\r\n#####################################\r\n\r\ncCloudPSScript = 'param (' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '[string]$token,' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '[string]$url,' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '[string]$jobPath,' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '[string]$tlsSecurity' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | ')' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | 'try {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        $executionPolicy = Get-ExecutionPolicy' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'Write-Host ' | Char(92) | Char(34) | 'Current Execution Policy:' | Char(92) | Char(34) | ' $executionPolicy' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'Write-Host ' | Char(92) | Char(34) | 'Tls security used to establish Reportworq connection:' | Char(92) | Char(34) | ' $tlsSecurity' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | '[Net.ServicePointManager]::SecurityProtocol = $tlsSecurity' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | '$PSDefaultParameterValues[''''Invoke-WebRequest:UseBasicParsing''''] = $true' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'Write-Host ' | Char(92) | Char(34) | 'Location of job request data:' | Char(92) | Char(34) | ' $jobPath' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | '$job = Get-Content -Path ' | Char(92) | Char(34) | '$jobPath' | Char(92) | Char(34) | ' -Raw' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'Write-Host ' | Char(92) | Char(34) | 'Executing job via Reportworq API at endpoint:' | Char(92) | Char(34) | ' $url' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | '$response = Invoke-RestMethod -Uri $url -Method ' | Char(92) | Char(34) | 'Post' | Char(92) | Char(34) | ' -Body $job -ContentType ' | Char(92) | Char(34) | 'application/json' | Char(92) | Char(34) | ' -Headers @{' | Char(92) | Char(34) | 'apiKey' | Char(92) | Char(34) | '=$token}' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'Write-Host ' | Char(92) | Char(34) | 'Executing job via Reportworq API at endpoint complete. See below for additional response details:' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | Char(9) | Char(9) | 'return $response' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '}' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | 'catch {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    Write-Host ' | Char(92) | Char(34) | 'Executing failed. Exception details:' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    $ex = $_.Exception' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    Write-Host (' | Char(92) | Char(34) | '`tMessage: ' | Char(92) | Char(34) | ' + $ex.Message)' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    if ($ex.Response) {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        Write-Host (' | Char(92) | Char(34) | '`tStatus code: ' | Char(92) | Char(34) | ' + [int]$ex.Response.StatusCode)' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        Write-Host (' | Char(92) | Char(34) | '`tStatus description: ' | Char(92) | Char(34) | ' + $ex.Response.StatusDescription)' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        try {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            $stream = $ex.Response.GetResponseStream()' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            if ($stream) {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                $reader = New-Object System.IO.StreamReader($stream)' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                $responseBody = $reader.ReadToEnd()' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                $reader.Dispose()' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                Write-Host ' | Char(92) | Char(34) | '`tResponse body:' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                Write-Host $responseBody' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            else {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '                Write-Host ' | Char(92) | Char(34) | '`tResponse body: <empty stream>' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        catch {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '            Write-Host ' | Char(92) | Char(34) | '`tResponse body could not be read from response stream.' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    else {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        Write-Host ' | Char(92) | Char(34) | '`tNo HTTP response object was returned.' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    if ($_.ErrorDetails -and $_.ErrorDetails.Message) {' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        Write-Host ' | Char(92) | Char(34) | '`tPowerShell ErrorDetails message:' | Char(92) | Char(34) | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '        Write-Host $_.ErrorDetails.Message' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '    }' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '}' | Char(13) | Char(10);\r\ncCloudPSScript = cCloudPSScript | '' | Char(13) | Char(10);\r\n\r\n\r\n#####################################\r\n#      CREATE REQUIRED FOLDERS\r\n#      AND POWERSHELL SCRIPT\r\n#####################################\r\n\r\nvJobRequestsDirCommand = 'cmd /c if not exist \"' | cJobRequestFolder | '\" mkdir \"' | cJobRequestFolder | '\"';\r\nEXECUTECOMMAND( vJobRequestsDirCommand , 1);\r\n\r\nvLogDirCommand = 'cmd /c if not exist \"' | cLogsFolder | '\" mkdir \"' | cLogsFolder | '\"';\r\nEXECUTECOMMAND( vLogDirCommand , 1);\r\n\r\nvCommandFileCommand = 'powershell -Command if(!(Test-Path ' | cCommandFileName | ')){echo ''' | cCloudPSScript | ''' >> ' | cCommandFileName | ' 2>&1}';\r\nEXECUTECOMMAND( vCommandFileCommand , 1);\r\n\r\n\r\n#####################################\r\n# CONSTRUCT JOB REQUEST \r\n# DETAILS IN THE REQUIRED \r\n# JSON FORMAT\r\n#####################################\r\n\r\nvDelimiter = ';';\r\nvAllowedOutputFileTypes = '[';\r\nsString = pAllowedFileOutputTypes;\r\nnDelimiterIndex = 1;\r\nWHILE(nDelimiterIndex <> 0);\r\n  nDelimiterIndex = SCAN(vDelimiter, sString);\r\n  IF(nDelimiterIndex = 0);\r\n    sElm = sString;\r\n  ELSE;\r\n    sElm = TRIM(SUBST(sString, 1, nDelimiterIndex - 1));\r\n    sString = TRIM(SUBST(sString, nDelimiterIndex + LONG(vDelimiter), LONG(sString)));\r\n  ENDIF;\r\n  IF(sElm @<> '');\r\n    vAllowedOutputFileTypes = vAllowedOutputFileTypes | '\"' | sElm | '\", ';\r\n  ENDIF;\r\nEND;\r\n\r\nvAllowedOutputFileTypes = vAllowedOutputFileTypes | ']';\r\n\r\nvDelimiter = ';';\r\nvAllowedDestinationTypes = '[';\r\nsString = pAllowedDestinationTypes;\r\nnDelimiterIndex = 1;\r\nWHILE(nDelimiterIndex <> 0);\r\n  nDelimiterIndex = SCAN(vDelimiter,sString);\r\n  IF(nDelimiterIndex = 0);\r\n    sElm = sString;\r\n  ELSE;\r\n    sElm = TRIM(SUBST(sString, 1, nDelimiterIndex - 1));\r\n    sString = TRIM(SUBST(sString, nDelimiterIndex + LONG(vDelimiter), LONG(sString)));\r\n  ENDIF;\r\n  IF(sElm @<> '');\r\n    vAllowedDestinationTypes = vAllowedDestinationTypes | '\"' | sElm | '\", ';\r\n  ENDIF;\r\nEND;\r\n\r\nvAllowedDestinationTypes = vAllowedDestinationTypes | ']';\r\n\r\nvConvertPowerPointToPdf = 'null';\r\nIF(pConvertPowerPointToPdf @<> '');\r\n  vConvertPowerPointToPdf = pConvertPowerPointToPdf;\r\nENDIF;\r\n\r\njson = EXPAND(\r\n'{\r\n   \"name\": \"%pJobName%\",\r\n   \"notification\": \"%pNotificationEmail%\",\r\n   \"holdForDelivery\": %pHoldForDelivery%,\r\n   \"allowedOutputFileTypes\": %vAllowedOutputFileTypes%,\r\n   \"allowedDestinationTypes\": %vAllowedDestinationTypes%,\r\n   \"convertPowerPointToPdf\": %vConvertPowerPointToPdf%,\r\n');\r\n\r\nIF(pLogLevel @<> '');\r\n  IF(pLogLevel @<> 'Debug' & pLogLevel @<> 'Trace');\r\n      LOGOUTPUT( 'ERROR', 'Invalid Reportworq job log level: ' | pLogLevel );\r\n      PROCESSERROR;\r\n  ENDIF;\r\n  json = json | \r\n    EXPAND('\"LogLevel\": \"%pLogLevel%\",');\r\nENDIF;\r\n\r\n############################################################################\r\n# UNCOMMENT AND DUPLICATE PARAMETER TEMPLATES AS NEEDED\r\n# IF JOB EXECUTION REQUIRES PARAMETER OVERRIDES\r\n#\r\n# Valid parameter types: list, subset, mdx, mdxrepeater\r\n############################################################################\r\n\r\n#########################\r\n# List Parameter Template\r\n#########################\r\n\r\n#parameter1Name = 'MyParameterName';\r\n#parameter1Value = 'MyParameterValue1;MyParameterValue2;MyParameterValue3';\r\n\r\n#parameter1Type = 'list';\r\n#parameter1Delimiter = ';';\r\n\r\n#parameter1Json = EXPAND(\r\n#'          {\r\n#               \"type\": \"%parameter1Type%\",\r\n#               \"name\": \"%parameter1Name%\",\r\n#               \"delimiter\": \"%parameter1Delimiter%\",\r\n#               \"value\": \"%parameter1Value%\"\r\n#            }'\r\n#);\r\n\r\n###########################\r\n# Subset Parameter Template\r\n###########################\r\n\r\n#parameter2Type = 'subset';\r\n#parameter2Name = 'MyParameterName';\r\n#parameter2Subset = 'MyParameterSubset';\r\n#parameter2Server = 'MyParameterServer';\r\n#parameter2Dimension = 'MyParameterDimension';\r\n\r\n#parameter2json = EXPAND(\r\n#'          {\r\n#               \"type\": \"%parameter2Type%\",\r\n#               \"name\": \"%parameter2Name%\",\r\n#               \"server\": \"%parameter2Server%\",\r\n#               \"dimension\": \"%parameter2Dimension%\",\r\n#               \"value\": \"%parameter2Subset%\"\r\n#            }'\r\n#);\r\n\r\n##########################\r\n# MDX Parameter Template\r\n##########################\r\n\r\n#parameter3Type = 'mdx';\r\n#parameter3Name = 'MyParameterName';\r\n#parameter3Server = 'MyParameterServer';\r\n#parameter3Dimension = 'MyParameterDimension';\r\n#parameter3Alias = 'MyParameterAlias';\r\n#parameter3Mdx = 'TM1SUBSETALL([' | parameter3Dimension | '])';\r\n\r\n#parameter3json = EXPAND(\r\n#'          {\r\n#               \"type\": \"%parameter3Type%\",\r\n#               \"name\": \"%parameter3Name%\",\r\n#               \"server\": \"%parameter3Server%\",\r\n#               \"dimension\": \"%parameter3Dimension%\",\r\n#               \"alias\": \"%parameter3Alias%\",\r\n#               \"value\": \"%parameter3Mdx%\"\r\n#            }'\r\n#);\r\n\r\n\r\n##################################\r\n# MDX Repeater Parameter Template\r\n##################################\r\n\r\n#parameter4Type = 'mdxrepeater';\r\n#parameter4Name = 'MyParameterName';\r\n#parameter4Server = 'MyParameterServer';\r\n#parameter4Dimension = 'MyParameterDimension';\r\n#parameter4RepeatParameter = 'MyRepeatParameter';\r\n#parameter4Alias = 'MyParameterAlias';\r\n#parameter4Mdx = '[' | parameter4Dimension | '].[%ELEMENT%].Children';\r\n\r\n#parameter4json = EXPAND(\r\n#'          {\r\n#               \"type\": \"%parameter4Type%\",\r\n#               \"name\": \"%parameter4Name%\",\r\n#               \"server\": \"%parameter4Server%\",\r\n#               \"dimension\": \"%parameter4Dimension%\",\r\n#               \"alias\": \"%parameter4Alias%\",\r\n#               \"repeatParameter\": \"%parameter4RepeatParameter%\",\r\n#               \"value\": \"%parameter4Mdx%\"\r\n#            }'\r\n#);\r\n\r\n\r\n##################################\r\n# Combine Job Json with Parameter(s)\r\n##################################\r\n\r\njsonParameters = \r\n'   \"parameters\": ' |\r\n    '[ '|\r\n#             ' | parameter1Json | ',\r\n#             ' | parameter2Json | ',\r\n#             ' | parameter3Json | ',\r\n#             ' | parameter4Json | '\r\n    ' ]';\r\n\r\n# Use an empty parameter override list if there are no overrides\r\n\r\njson = json | \r\n            jsonParameters | '\r\n}';\r\n\r\n\r\n###################################################\r\n# WRITE JOB REQUEST JSON TO TIMESTAMPED FILE\r\n###################################################\r\n\r\n# Prevent any leading or trailing quotes\r\nOriginalQuoteCharacter = DatasourceASCIIQuoteCharacter;\r\nDatasourceASCIIQuoteCharacter=' ';\r\n\r\n# Replace any invalid file characters in the file path\r\nsJobNameForFile = '';\r\nsValidFileNameCharacters = '_- 1234567890abcdefghijklmnopqrstuvwxyz';\r\nnCurrIdx = 1;\r\nWHILE (nCurrIdx <= LONG(pJobName));\r\n  sCurrChar = SUBST( pJobName, nCurrIdx, 1 );\r\n\r\n  # Include characters in list above\r\n  IF ( SCAN( LOWER( sCurrChar ), sValidFileNameCharacters ) > 0 );\r\n     sJobNameForFile = sJobNameForFile | sCurrChar;\r\n  ENDIF;\r\n\r\n   # Switch forward and back slashes to underscores\r\n   IF( sCurrChar @= '\\' % sCurrChar @= '/' );\r\n     sJobNameForFile = sJobNameForFile | '_';     \r\n   ENDIF;\r\n   nCurrIdx = nCurrIdx + 1;\r\nEND;\r\n\r\n# Write out file json\r\nvJobSpecificationFile = cJobRequestFolder | sJobNameForFile | '_Request_' | TIMST( NOW(), '\\Y\\m\\d\\h\\i\\s') | '.txt';\r\n\r\n# test prolog output\r\nvJobSpecCommand = 'cmd /c \"echo ' | json | ' >> \"' | vJobSpecificationFile | '\"\"';\r\nExecuteCommand ( vJobSpecCommand, 1 );\r\nDatasourceASCIIQuoteCharacter=OriginalQuoteCharacter;\r\n\r\n\r\n###################################################\r\n# ARGUMENT BUILDER\r\n###################################################\r\n\r\nvArgs = '-token \"' | pCloudConnectorApiKey | '\" ';\r\n\r\nIF(pWorkspaceName @<> '');\r\n    vApiUrl = pApiUrl | '?workspace=' | pWorkspaceName;\r\nELSE;\r\n    vApiUrl = pApiUrl;\r\nENDIF;\r\n\r\nvArgs = vArgs | '-url \"' | vApiUrl | '\" ';\r\nvArgs = vArgs | '-jobPath \"' | vJobSpecificationFile | '\" ';\r\nvArgs = vArgs | '-tlsSecurity \"' | pTlsSecurity | '\" ';\r\n\r\nguid = TIMST(NOW, '\\Y\\m\\d\\h\\H\\i\\s');\r\n\r\n\r\n###################################################\r\n# EXECUTE SCRIPT\r\n###################################################\r\n\r\nvBat = 'powershell -File ' | cCommandFileName | ' ';\r\nvCommand = 'cmd /c '| vBat | vArgs | '> ' | cLogsFolder | '/RunAPIJobLog' | TIMST( NOW(), '\\Y\\m\\d\\h\\i\\s') | '.txt 2>&1';\r\n\r\nEXECUTECOMMAND( vCommand , 1);\r\n",
  "MetadataProcedure": "\r\n#****Begin: Generated Statements***\r\n#****End: Generated Statements****",
  "DataProcedure": "\r\n#****Begin: Generated Statements***\r\n#****End: Generated Statements****",
  "EpilogProcedure": "\r\n#****Begin: Generated Statements***\r\n#****End: Generated Statements****",
  "Parameters": [
    {
      "Name": "pApiUrl",
      "Prompt": "Cloud API endpoint for running a job from TI",
      "Value": "https://api.quebit.com/call/run",
      "Type": "String"
    },
    {
      "Name": "pCloudConnectorApiKey",
      "Prompt": "Cloud API Key",
      "Value": "REPORTWORQ_XXXXXXXXX",
      "Type": "String"
    },
    {
      "Name": "pJobName",
      "Prompt": "Reportworq Job Path (MyFolder/MyJob or MyJob)",
      "Value": "",
      "Type": "String"
    },
    {
      "Name": "pWorkspaceName",
      "Prompt": "Reportworq workspace to run job on. If there is only one workspace available, this parameter is optional",
      "Value": "Default",
      "Type": "String"
    },
    {
      "Name": "pNotificationEmail",
      "Prompt": "Email address to send notification (optional)",
      "Value": "",
      "Type": "String"
    },
    {
      "Name": "pHoldForDelivery",
      "Prompt": "Hold Jobs for Review before Distribution (true/false)",
      "Value": "false",
      "Type": "String"
    },
    {
      "Name": "pAllowedFileOutputTypes",
      "Prompt": "Allowed output types for the job, semicolon delimited, blank defaults to all configured (excel/pdf/ppt/csv)",
      "Value": "",
      "Type": "String"
    },
    {
      "Name": "pAllowedDestinationTypes",
      "Prompt": "Allowed distribution types for the job, semicolon delimited, blank defaults to all configured (file/sharepoint/sheets/email/slack/teams)",
      "Value": "",
      "Type": "String"
    },
    {
      "Name": "pConvertPowerPointToPdf",
      "Prompt": "Convert PPT files to PDF before Distribution (true/false)",
      "Value": "",
      "Type": "String"
    },
    {
      "Name": "pTlsSecurity",
      "Prompt": "Supported Tls security modes used to connect to Reportworq",
      "Value": "Tls11,Tls12",
      "Type": "String"
    },
    {
      "Name": "pLogLevel",
      "Prompt": "Optional Reportworq job log level (Debug/Trace)",
      "Value": "",
      "Type": "String"
    }
  ]
}