Rob Gething Posted May 26, 2022 Posted May 26, 2022 I wrote a PowerShell script to change An Asset Class from mobileDevice to computer using entityUpdateRecord: Add-HB-Param "application" "com.hornbill.servicemanager" Add-HB-Param "entity" "Asset" Add-HB-Param "returnModifiedData" "true" Open-HB-Element "primaryEntityData" Open-HB-Element "record" Add-HB-Param "h_pk_asset_id" "506" Add-HB-Param "h_class" "computer" Add-HB-Param "h_asset_urn" ("urn:sys:entity:com.hornbill.servicemanager:Asset:") Close-HB-Element "record" Close-HB-Element "primaryEntityData" $UpdateAsset = Invoke-HB-XMLMC "data" "entityUpdateRecord" if($UpdateAsset.status -ne 'ok') { Write-Output $UpdateAsset.Error -ErrorAction Stop } else{ Write-Output "Asset Primary Record Updated" Add-HB-Param "application" "com.hornbill.servicemanager" Add-HB-Param "entity" "Asset" Add-HB-Param "returnModifiedData" "true" Open-HB-Element "primaryEntityData" Open-HB-Element "record" Add-HB-Param "h_pk_asset_id" "506" Close-HB-Element "record" Close-HB-Element "primaryEntityData" Open-HB-Element "relatedEntityData" Add-HB-Param "relationshipName" "AssetClass" Add-HB-Param "entityAction" "update" Open-HB-Element "record" Add-HB-Param "h_type" "3" Close-HB-Element "record" Close-HB-Element "relatedEntityData" $UpdateAssetRelated = Invoke-HB-XMLMC "data" "entityUpdateRecord" } if($UpdateAssetRelated.status -eq 'ok') { Write-Output "Asset Related Record Updated" } else { Write-Output $UpdateAssetRelated.Error } If I run it against asset ID 506, I get: Asset Primary Record Updated There are no values to update You can see from the attached image that the record does actually change the class to computer an the type to physical as expected: If I use any other asset ID, I get: A database or query error occurred while updating record(s) Any idea what's special about 506 and why it works for that record. but will not work for any others?
SamS Posted May 27, 2022 Posted May 27, 2022 Hi @Rob Gething, It appears that you are changing the Asset Class. Each Asset Class is linked to a particular secondary table. Your API actions have likely broken the link between the main CMDB record and the secondary table data. I suspect you tested a few things with Asset 506 which changed that link in a different way to the assets you are currently testing. Hence the difference in behaviour/error message. IT is currently not possible via the GUI to change the Asset Class of an asset and there is currently no API to change the Asset Class of an asset either. The asset class data link mentioned might not be the only link maintained behind-the-scenes. It is ill-advised to directly manipulate the data without knowing/imagining the possible consequences.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now