Jump to content

Rob Gething

Hornbill Users
  • Posts

    37
  • Joined

  • Last visited

Posts posted by Rob Gething

  1. The following code adds a stringValue to a list:

    # Define output stream type
        [OutputType([object])]
    
        # Define runbook input params
        Param
        (
            # API Params
            [string] $application = "com.hornbill.servicemanager",
            [Parameter (Mandatory= $true)]
            [string] $listName,
            [Parameter (Mandatory= $true)]
            [string] $itemValue,
            [string] $defaultItemName,
            [string] $itemNameTranslation
            )
    
        # Add XMLMC params
        Add-HB-Param "application" $application $false
        Add-HB-Param "listName" $listName $false
        Add-HB-Param "itemValue" $itemValue $false
        Add-HB-Param "defaultItemName" $defaultItemName $false
        Add-HB-Param "itemNameTranslation" $itemNameTranslation $false
    
       # Invoke XMLMC call, output returned as PSObject
       $xmlmcOutput = Invoke-HB-XMLMC "data" "listAddItem"
       $exceptionName = "" 
       $exceptionSummary = ""
       
        # Read output status
        if($xmlmcOutput.params.itemValue -and $xmlmcOutput.params.itemValue -eq ""){
                $itemValue = $name
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.exceptionName -and $xmlmcOutput.params.exceptionName -ne ""){
                $exceptionName = $xmlmcOutput.params.exceptionName
                $exceptionSummary = $xmlmcOutput.params.exceptionDescription
            }
        
        # Build resultObject to write to output
        $resultObject = New-Object PSObject -Property @{
            Status = $xmlmcOutput.status
            Error = $xmlmcOutput.error
            ExceptionName = $exceptionName
            ExceptionSummary = $exceptionSummary
            itemValue = $itemValue
            }
    
        if($resultObject.Status -ne "ok" -or $exceptionName -ne ""){
            Write-Error $resultObject
        } else {
            Write-Output $resultObject
           }
    

    This:

    $csv = Import-Csv applications.csv'
        foreach($row in $csv)
        {
            $name = $row.Name
       }
    

    Iterates through a column in a csv file and returns 2734 items, but only "Total: 2734" gets added to the list.

    How do I convert each csv item to an individual stringValue and add all 2734 items to a Hornbill simple list?

  2. @SamS,

    If I do:

    ConvertFrom-Json -InputObject $taskAnswers, I get:

    ConvertFrom-Json : Cannot bind argument to parameter 'InputObject' because it is null.

    If I do:

    $taskAnswers | ConvertFrom-Json
           $answers = $taskAnswers | ConvertFrom-Json
           $answers[0].key
           $answers[0].value
           $answers[0].displayValue


    I get:

    Cannot index into a null array.

    It's as if $taskAnswers has not data to pull back, but I can see it in inspect element:

    taskAnswers: [{key: "OtherCorrectName", value: "Pipeline", displayValue: "Pipeline"},…]0: {key: "OtherCorrectName", value: "Pipeline", displayValue: "Pipeline"}

    displayValue: "Pipeline"

    key: "OtherCorrectName"

    value: "Pipeline"

  3. I am using the following code to get taskAnswers:

    # Define output stream type
        [OutputType([object])]

        # Define runbook input params
        Param
        (
            # API Params
            #[Parameter (Mandatory= $true)]
            [string] $taskId 

    }

        # Add XMLMC params
        Add-HB-Param "taskId" $taskId $false
        
       # Invoke XMLMC call, output returned as PSObject
       $xmlmcOutput = Invoke-HB-XMLMC "task" "taskGetInfo"
       $exceptionName = "" 
       $exceptionSummary = ""
       
        # Read output status
        if($xmlmcOutput.status -eq "ok") {
        if($xmlmcOutput.params.title -and $xmlmcOutput.params.title -ne ""){
                $title = $xmlmcOutput.params.title
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.options -and $xmlmcOutput.params.options -ne ""){
                $options = $xmlmcOutput.params.options
                $requestWarnings = $xmlmcOutput.params.warnings
                }
                if($xmlmcOutput.params.createdOn -and $xmlmcOutput.params.createdOn -ne ""){
                $createdOn = $xmlmcOutput.params.createdOn
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.createdBy -and $xmlmcOutput.params.createdBy -ne ""){
                $createdBy = $xmlmcOutput.params.createdBy
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.owner -and $xmlmcOutput.params.owner -ne ""){
                $owner = $xmlmcOutput.params.owner
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.outcomes -and $xmlmcOutput.params.outcomes -ne ""){
                $outcomes = $xmlmcOutput.params.outcomes
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            if($xmlmcOutput.params.taskAnswers -and $xmlmcOutput.params.taskAnswers -ne ""){
                $taskAnswers = $xmlmcOutput.params.taskAnswers
                $requestWarnings = $xmlmcOutput.params.warnings
            }
            }
        
        # Build resultObject to write to output
        $resultObject = New-Object PSObject -Property @{
            Status = $xmlmcOutput.status
            Error = $xmlmcOutput.error
            ExceptionName = $exceptionName
            ExceptionSummary = $exceptionSummary
            title = $title
            options = $options
            createdOn = $createdOn
            createdBy = $createdBy
            owner = $owner
            outcomes = $outcomes
            taskAnswers = $taskAnswers
            }

        if($resultObject.Status -ne "ok" -or $exceptionName -ne ""){
            Write-Error $resultObject
        } else {
            Write-Output $resultObject
            }

    I can see that taskAnswers is an array, but I am struggling to return:

    taskAnswers: [{key: "OtherCorrectName", value: "Pipeline", displayValue: "Pipeline"},…]0: {key: "OtherCorrectName", value: "Pipeline", displayValue: "Pipeline"}

    I've tried a PSCustomObject with with a ForEach-Object to loop through the array, but this doesn't return any results.

    Having run $taskAnswers | Get-Member, taskAnswers is Boolean so with only return true or false.

  4. Since there’s just the one parameter for the second script, PowerShell will intelligently match the output of one script to the input of the next, when piped.

    ‘.\GetRunID.ps1’ -ReportID xxx | ‘.\DownloadReport.ps1’ returns:

     

    @{delivery=; ExceptionName=; files=;

    Error=Failed to retrieve report info for Id: 45234; reportRun=; Status=fail; ExceptionSummary=}

    If I run the scripts individually I get this from GetRunID:

    Status           : ok

    Error            :

    ExceptionName    :

    runId            : 51542

    ExceptionSummary :

    .\reportRunGetStatus.ps1 -runId 51542 has actually successfully downloaded the file but that’s because I ran GetRunID first, got the reportID and then ran .\reportRunGetStatus.ps1 -runId 51542.

    I can’t get 51542 to parse to the other script through a pipe and download the file.

  5. I have two separate scripts:

    # Define output stream type
        [OutputType([object])]
    
        # Define runbook input params
        Param
        (
            # API Params
            #[Parameter (Mandatory= $true)]
            [string] $reportId = "842",
            [string] $outputFormat,
            [string] $runtimeParameter,
            [string] $comment, 
            [string] $publish
            )
     
        # Add XMLMC params
        Add-HB-Param "reportId" $reportId $false
        Add-HB-Param "outputFormat" $outputFormat $false
        Add-HB-Param "runtimeParameter" $runtimeParameter $false
        Add-HB-Param "comment" $comment $false
        Add-HB-Param "publish" $publish $false
       
       # Invoke XMLMC call, output returned as PSObject
       $xmlmcOutput = Invoke-HB-XMLMC "reporting" "reportRun"
       $exceptionName = "" 
       $exceptionSummary = ""
       
        # Read output status
        if($xmlmcOutput.status -eq "ok") {
            if($xmlmcOutput.params.runId -and $xmlmcOutput.params.runId -ne ""){
                $runId = $xmlmcOutput.params.runId
                }
            if($xmlmcOutput.params.exceptionName -and $xmlmcOutput.params.exceptionName -ne ""){
                $exceptionName = $xmlmcOutput.params.exceptionName
                $exceptionSummary = $xmlmcOutput.params.exceptionDescription
            }
        }
    
        # Build resultObject to write to output
        $resultObject = New-Object PSObject -Property @{
            Status = $xmlmcOutput.status
            Error = $xmlmcOutput.error
            ExceptionName = $exceptionName
            ExceptionSummary = $exceptionSummary
            runId = $runId
        }
    
        if($resultObject.Status -ne "ok" -or $exceptionName -ne ""){
            Write-Error $resultObject
        } else {
            Write-Output $runId
           }

    This generates a run ID for a report which downloads successfully if I manually enter the run ID into:

    
    # Define output stream type
        [OutputType([object])]
    
        # Define runbook input params
        Param
        (
            # API Params
            #[Parameter (Mandatory= $true)]
            [string] $runId = "45234"
            )
    # Add XMLMC params
        Add-HB-Param "runId" $runId $false
        
       # Invoke XMLMC call, output returned as PSObject
       $xmlmcOutput = Invoke-HB-XMLMC "reporting" "reportRunGetStatus"
       $exceptionName = "" 
       $exceptionSummary = ""
       
        # Read output status
        if($xmlmcOutput.status -eq "ok") {
            if($xmlmcOutput.params.reportRun -and $xmlmcOutput.params.reportRun -ne ""){
                $reportRun = $xmlmcOutput.params.reportRun
                }
                if($xmlmcOutput.params.files -and $xmlmcOutput.params.files -ne ""){
                $files = $xmlmcOutput.params.files
                }
                if($xmlmcOutput.params.delivery -and $xmlmcOutput.params.delivery -ne ""){
                $delivery = $xmlmcOutput.params.delivery
                }
            if($xmlmcOutput.params.exceptionName -and $xmlmcOutput.params.exceptionName -ne ""){
                $exceptionName = $xmlmcOutput.params.exceptionName
                $exceptionSummary = $xmlmcOutput.params.exceptionDescription
            }
        }
    
        # Build resultObject to write to output
        $resultObject = New-Object PSObject -Property @{
            Status = $xmlmcOutput.status
            Error = $xmlmcOutput.error
            ExceptionName = $exceptionName
            ExceptionSummary = $exceptionSummary
            reportRun = $reportRun
            files = $files
            delivery = $delivery
        }
    
        if($resultObject.Status -ne "ok" -or $exceptionName -ne ""){
            Write-Error $resultObject
        } else {
        $reportFileLink = $files | Select -ExpandProperty name
        $reportID = "123"
        $HornbillKey = "xxxxxxx"
        [string] $url = "https://mdh-p01-api.hornbill.com/iposervicedesk/dav/" + "reports/" + $reportID + "/" + $reportFileLink
        $headers = @{}
        if ($HornbillKey -ne $null) {
            $headers["Authorization"] = "ESP-APIKEY $HornbillKey"
        }
        try {
            $result = Invoke-WebRequest -Uri $url -Method GET -OutFile "./$reportFileLink" -Headers $headers
            } 
        Catch {
            Write-Error $_.Exception.Message
        }
        }

    What I want to do is parse the run ID that is output from the first piece of code so that the report downloads without having to manually specify the run ID to the second piece of code.

    . "./script1.ps1" - runId $runId

    Doesn't have the desired effect. 

  6. I have a teams bot that is an Azure function written in PowerShell.

    I have the following function:

    function Update-TakeRequest {
        [CmdletBinding()]
        param(
            [string]$ID,
            [string]$Key,
            [string]$OwnerID,
            [string]$OwnerName,
            [string]$TeamID,
            [string]$TeamName,
            [string]$RequestRef
        )
        $Request = Get-RequestDetails $ID $Key $RequestRef
        $MessageBody = ""
        
        if($null -eq $Request.Params.primaryEntityData) {
            $MessageBody += "Request $($RequestRef) not found."      
        } else {
            $RD = $Request.Params.primaryEntityData.record
            if ($RD.h_fk_team_id -ne $TeamID) {
                $MessageBody += "Request $($RequestRef) isn't owned by $($TeamName), so can't be taken by a user in this Team."      
            } else {
                Set-HB-Instance -Instance $ID -Key $Key
                Add-HB-Param "inReference" $RequestRef
                Add-HB-Param "inAssignToId" $OwnerID
                Add-HB-Param "inAssignToGroupId" $TeamID
                
                $Timeline = @{
                    "updateText" = "''Assigned by $($OwnerName) via Microsoft Teams''"
                    "source" = "teams"
                    "extra" = @{
                        "h_ownername" = $OwnerName
                        "h_fk_team_id" = $TeamID
                        "h_group_name" = $TeamName
                    }
                    "visibility" = "trustedGuest"
                }
                $TimelineJSON = $Timeline | ConvertTo-JSON
                Add-HB-Param "updateTimelineInputs" $TimelineJSON
                $APICall = Invoke-HB-XMLMC "apps/com.hornbill.servicemanager/Requests" "assign"
                if ($APICall.Status -eq "ok") {
                    if ($null -ne $APICall.Params.assignError -and $APICall.Params.assignError -ne "") {
                        $MessageBody = "An error occurred when attempting to assign the request."
                    } else {
                        $MessageBody = "$($RequestRef) has been assigned to you in $($TeamName)"
                    }
                } else{
                    $MessageBody = "An error occurred when attempting to assign the request."
                }
            }
        }    
        $bodyObj = @{
            "type" = "message"
            "text" = $MessageBody
        }
        return $bodyObj
    }

    run.ps1:

    if ($Request.Body.text -like '*update request*') {
        $StringArray = $Request.Body.text -split "update request",2
        $ContentString = $StringArray[$StringArray.Count - 1].TrimStart()
        $ContentArray = $ContentString -split " ",2
        $bodyObj = Update-Request $InstanceName $InstanceKey $User.displayName $ContentArray[0] $ContentArray[1] $TeamDetails.Params.id $TeamDetails.Params.name
        $body = $bodyObj | ConvertTo-Json -Depth 4
    }

    If a call is assigned to a colleague in my team and I invoke @Hornbill take request IN0012345 for example, I expect that call to be taken from them and assigned to me. What happens instead is the the call gets taken from the owner and assigned back into the main queue for my team, rather than being directly assigned to me.

    How do I take from one owner and assign to another?

  7. Hi @SamS,

    I can confirm that the account does exist and is not disabled.

    I have a Teams bot that uses the same keysafe key and that's functioning. Surely if the keysafe key or the account that granted the authorisation were the issue, my bot would be affected too?

  8. I get the above error when using the Hornbill Service Manager BPM >> Microsoft / Teams / PostToChannel method, yet I have a Teams license. 

    I am currently using an incoming webhook as an alternative, but I have concerns that this isn't the most secure method.

×
×
  • Create New...