Jump to content

Update custom field using Powershell and API


Guest Paul Alexander

Recommended Posts

Guest Paul Alexander

HI

We're trying to update a request using the API from a Powershell script, but nothing is happening (the code runs, and there are no errors, but the request doesn't get updated).

image.png.69af8e7e88eb60d4fdf8844c5a018f26.png

 

The requestId is updated as a global value (we've used this script to update the timeline too, and that works fine) but I can't see why the custom field isn't being updated.

Any thoughts please?

 

thanks

Link to comment
Share on other sites

Guest Paul Alexander

Hi @Victor

 

Just tried that, and we're getting the error (below). Sorry it's a bit messy, but basically we're trying to call the 'Requests::update' function with the customFields parameters:

 

image.png.b7cfa9f6a3e21ed974398b4e97c3472f.png

 

Error message is:

 

Add-HB-Param : Cannot process argument transformation on parameter 'ParamAllowEmpty'. Cannot convert value "System.String" to type "System.Boolean". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0. At line:120 char:32 + Add-HB-Param "customFields" "{"h_custom_a":"test"}" + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Add-HB-Param], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Add-HB-Param

Link to comment
Share on other sites

Guest Paul Alexander

@Victor the script developer has asked why HB seems to be asking for a 'system.boolean' value when we're trying to use the customFields parameter (Add-HB-Param "customFields" "{"h_custom_a":"test"}") when the template doesn't ask for ANY boolean values?

 

image.png.774912a1b89c9d77a32b522388df7fb5.png

 

 

image.thumb.png.d5d371f02b19459452c72478c5ae3f70.png

 

Link to comment
Share on other sites

You've got double-quotes within double-quotes, which doesn't work. You'll need to use PowerShell's version of escaping the quotes, which I believe is to double-up like so:

Add-HB-Param "customFields" "{""h_custom_a"":""test""}"

but please check this in the PowerShell documentation because I'm no expert on that.

Link to comment
Share on other sites

Guest Paul Alexander

For anyone else in this predicament, the code we finally got to work was this (lots of quotes and + signs....I have no idea what all the syntax means but it works...):

 

image.png.3532afec455a47c8b3863a5b49357c54.png

Link to comment
Share on other sites

  • 2 months later...

Here's a similar snippet of code, for those who find all the quotes and + signs confusing:
 

                $requestDetails = $requestOutput.Params.requestDetails | ConvertFrom-Json
                if ($requestDetails.h_custom_t -ne $TPEntity.Id) {
                    [string]$CustomT = $TPEntity.Id
                    $JsonCustomT = New-Object PSObject | Add-Member NoteProperty h_custom_t $CustomT -PassThru | ConvertTo-Json
                    Add-HB-Param -ParamName "requestId" -ParamValue $requestDetails.h_pk_reference
                    Add-HB-Param -ParamName "customFields" -ParamValue $JsonCustomT
                    $requestOutput = Invoke-HB-XMLMC "apps/com.hornbill.servicemanager/Requests" "update"
                    if ($requestOutput.Status -ne "ok") {
                        #
                        Write-Host "failed to set custom_t to $CustomT"
                    }
                }

What's going on here is that I'm using the h_custom_t field to store an external reference from Hornbill to the software development team's own SCRUM tracking system - the Hornbill Request Details are in $requestDetails and the SCRUM tracking story Id is in $TPEntity.Id

If they don't match (which they won't, because up till now there's only been a one-way link), then I copy the Id into  a new string $CustomT, and create a custom object from it, with a single, named field.  ConvertTo-Json does the heavy lifting.  Importantly, if the custom field itself contained quotes or other unusual characters, the ConvertTo-Json will take care of any necessary escape sequences or code conversions.

Barely a quote in sight!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...