-
Posts
746 -
Joined
-
Last visited
-
Days Won
30
Content Type
Profiles
Forums
Enhancement Requests
Everything posted by Steve G
-
Hello everyone, We've just released v.1.16.0 of the Hornbill Cleaner Utility. This release requires Service Manager build 2241 or above. Changes Updates to cater for move of Configuration Manager into Service Manager Features Added support to filter Requests for deletion by Catalog ID Added support to delete Service Availability records, filtered by Service ID(s) Added support to delete Contact records Added support to delete Organization records Added version check against Github repo Enhanced debug logging, now logs request and response payloads when an API call into Hornbill fails This can be downloaded from Github, and is documented on the Hornbill Wiki.
-
Hi @Martyn Houghton, I'll add this to the list, it would also be useful in the other import tools that use JSON config. In the mean time, you could always use something like https://codebeautify.org/jsonvalidator, or an IDE like Visual Studio Code, to check the validity of the JSON. Cheers,
- 1 reply
-
- 1
-
- request import
- error
-
(and 2 more)
Tagged with:
-
Hi @Martyn Houghton, I'll add it to the list, will let you know when we get to it. Cheers, Steve
- 3 replies
-
- clean utility
- contacts
-
(and 1 more)
Tagged with:
-
API to read back posts from the request timeline
Steve G replied to BillP's topic in Integration Connectors, API & Webhooks
Hi @BillP, No worries. Although if you're using smGetReqDetails2, you don't actually need the additional call to getRequestRecord, as smGetReqDetails2 provides an activity stream accessToken in the output params, as well as the activity stream ID in the requestDetails output param Cheers, Steve -
API to read back posts from the request timeline
Steve G replied to BillP's topic in Integration Connectors, API & Webhooks
Hi @BillP, You can use the activityStreamQuery API to pull paginated lists of posts (and optionally comments) from a requests timeline, using an access token and activity stream ID returned by a call to the getRequestRecord API. The activity stream ID will be returned in the h_activity_stream_id column within the primaryEntityData output parameter of getRequestRecord. Let me know if you need any more info. Cheers, Steve -
Hi @Martyn Houghton, The code looks ok, I think the issue may be with the delete - deleting the file from the session before attachFileFromSession can perform its logic. I've looked at the Service Manager code behind attachFileFromSession, and it actually handles the delete from the session for you, so performing the delete in your code is unnecessary. I knocked up a very basic example PHP script, using your example from above, and had it attach 1000 images to a request, and all 1000 were successful: <? $image_path = "/Users/steveg/Pictures/me_new.jpg"; for ($x = 0; $x < 1000; $x++) { $file_name = "me_new".$x.".jpg"; $url = "https://hhq-p01-api.hornbill.com/stevegdev/dav/session/" . $file_name; uploadFile($url, $image_path); attachFileToRequest($file_name); } function uploadFile($url, $image_path) { $image_handler = fopen($image_path, 'rb'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: ESP-APIKEY myapikey' )); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_INFILE, $image_handler); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($image_path)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo "[UPLOAD] [".$http_status."] [".$url."] [".$image_path."]\n"; curl_close($ch); } function attachFileToRequest($file_name) { $ch = curl_init(); $url = "https://hhq-p01-api.hornbill.com/stevegdev/xmlmc/apps/com.hornbill.servicemanager/Requests?method=attachFileFromSession"; $request_id = "IN00013698"; $file_in_session = "/session/".$file_name; $data = '<methodCall service="apps/com.hornbill.servicemanager/Requests" method="attachFileFromSession"> <params> <requestId>'.$request_id.'</requestId> <fileName>'.$file_in_session.'</fileName> <description>some file description</description> <visibility>trustedGuest</visibility> </params> </methodCall>'; curl_setopt_array($ch, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 15, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => array( 'Authorization: ESP-APIKEY myapikey', 'Content-Type: text/xmlmc', 'Accept: application/json' ), )); $result = curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); $json_response = json_decode($result); $hornbill_api_status = $json_response->{'@status'} ? 'true' : 'false'; echo "[ATTACH] [".$http_status."] [". $hornbill_api_status ."] [".$file_name."]\n"; curl_close($ch); } ?> And the 1000 attachments against the request: Hope this helps, Steve
-
POWER BI Connection error
Steve G replied to vhayer's topic in Integration Connectors, API & Webhooks
Hi @vhayer and @MattZ, Apologies for the delay in responding, I've been on annual leave. The issue here is that you're providing the entire URL to the web frontend for your instance in the instanceName variable, instead of just the instance name. So for example, if your instance was called myinstance, you are currently setting: instanceName = "https://live.hornbill.com/myinstance/" When this should actually read: instanceName = "myinstance" Hope this helps, Steve -
POWER BI Connection error
Steve G replied to vhayer's topic in Integration Connectors, API & Webhooks
Hi @vhayer, That error is likely due to an incorrect value in the instanceName varible (row 2, attached), meaning that the script can't access your instance details to proceed: Note, the instance ID is case sensitive. Kind regards, Steve -
Hi @Martyn Houghton, The process would be: HTTP POST the file to the users session folder in dav, providing the API key in the header in the same was as you do for other API calls: https://mdh-p01-api.hornbill.com/yourinstanceid/dav/session/yourfilename.png Make an API call to apps/com.hornbill.servicemanager/Requests::attachFileFromSession as below to attach the file HTTP DELETE the file from the users session folder (same URL as above) <methodCall service="apps/com.hornbill.servicemanager/Requests" method="attachFileFromSession"> <params> <requestId>IN00012345</requestId> <fileName>/session/yourfilename.png</fileName> <description>some file description</description> <visibility>trustedGuest</visibility> </params> </methodCall> Hope this helps, Steve
-
Hi @AndyGilly, The preferred method to do what you need is: Write-Output "{{SISJobOutputParameterStart:MoverADGroups}}$($output){{SISJobOutputParameterEnd}}" Note the use of a subexpression $($output), this will ensure your variable is printed as you would expect, in the event it's not of type string. Cheers, Steve
-
@AndyGilly The operation is now documented, here: https://wiki.hornbill.com/index.php?title=Active_Directory_User_Management Cheers, Steve
-
Morning @AndyGilly, Great stuff There actually already is a Get operation in the AD User Management package, I just appear to have forgotten to document it on the Wiki... I'll correct that this morning! Cheers, Steve
-
what can i do Document Manager - Product Specialist/Super User
Steve G replied to Jeremy's topic in Document Manager
Hi @Jeremy, This would suggest your form is not submitting its data - e is an object that should contain the form response when your Form project trigger runs the onSubmit action: So this will be an issue with your Google Form configuration, probably in the project triggers... Cheers, Steve -
Clean utility - delete all requests logged using a specific Catalog Item?
Steve G replied to a topic in Service Manager
Hi @Paul Alexander, This would require a small change in Service Manager to be able to add this feature to the cleaner tool - I'll add it to the list, but if you're after a quick fix you could always export a list of references for the requests you wish to delete, and add them to the RequestReferences array in the cleaner config. With this set and CleanRequests set to true, running the tool will delete just those requests (and related records). Hope this helps, Steve -
Upload and download of staff images
Steve G replied to BillP's topic in Integration Connectors, API & Webhooks
Hi @BillP, There's a good example of how to manage this requirement within the LDAP Import tool, in the userImageUpdate function from the image.go file you have linked above. The process is basically: HTTP PUT the file into the session folder in dav, with the link (replacing yourinstanceid and thefilename as appropriate ): https://mdh-p01-api.hornbill.com/yourinstanceid/dav/session/thefilename.jpg Use activity::profileImageSet to apply the profile image, where sourceImage would be /session/thefilename.jpg HTTP DELETE the file from your session folder in dav, with the link from the PUT. This is to ensure your session folder doesn't end up being full of unnecessary files. Note, the HTTP PUT and HTTP DELETE need authenticating, so you'll need to provide the API Key for the user you are using in the Authorization header, in the same manner as you would for making XMLMC API calls into Hornbill. With regards to the profileImageGet output, you can get these images via https://mdh-p01-api.hornbill.com/yourinstanceid/dav/_static/img/thevalueofimageReference_theimageresolution.jpg So for example, if you had a user profile with an image reference of 50/0000002698, and you wanted the image with a resolution of 512x512, then your url would be: https://mdh-p01-api.hornbill.com/yourinstanceid/dav/_static/img/50/0000002698_512x512.jpg As always, you will need a valid session, or API key, to get at those images. Supported resolutions are: 16x16 24x24 32x32 54x54 64x64 128x128 200x200 220x264 256x256 512x512 Note, you don't need to update the image in these resolutions, the userProfileSet API takes care of the resize/cropping for you. Hope this helps, Steve -
Asset import from MS Intune
Steve G replied to MikeW's topic in Integration Connectors, API & Webhooks
HI @Samantha Melville, The Intune to Hornbill asset import script can be installed via the Runbook Gallery in Azure Automation: Note, this requires the Hornbill modules to be installed from the Modules Gallery: Thanks, Steve -
Hi @AndyGilly, This is posssibly due to the default ErrorAction for the cmdlet in question not being Stop. I've seen examples where the error is output to the CLI and the script continues as normal, even when in a try-catch. If the cmdlet you are using supports it, then set the -ErrorAction Stop argument (either directly in the command line, or by splatting the param(s) in a hash table, example below). This will ensure the error can be caught and handled gracefully. try { $Params = @{ Name = $Name ErrorAction = "Stop" WarningVariable = "warnings" WarningAction = "SilentlyContinue" } Start-VM @Params } catch { Write-Output "{{SISJobOutputParameterStart:errors}}$($_.Exception.Message){{SISJobOutputParameterEnd}}" Write-Output "{{SISJobOutputParameterStart:outcome}}FAIL{{SISJobOutputParameterEnd}}" Exit 0 } Cheers, Steve
-
Hi @AndyGilly, Yes, I've added this to the list. Will let you know when it hits the top Cheers, Steve
-
SCCM add to device collection error
Steve G replied to AndyGilly's topic in IT Operations Management
Hi @AndyGilly, This is not WW environment specific, Windows servers restrict script execution by default. We've provided a Set Execution Policy operation in the Windows Management package that can be executed either side of the operation you wish to run so that the local machine or current user policy doesn't need to be left in a permanently relaxed state. So in a runbook for example, you could use the Set Execution Policy operation to relax the script execution policy for the current user, then execute your actual operation, then use Set Execution Policy to restrict it again. I expect the AD package operations are ok as the target machine must already have a less-restrictive script execution policy in place, either in the local machine or current user policies. Cheers, Steve -
Outbound API calls
Steve G replied to Ieuan Payne IPO's topic in Integration Connectors, API & Webhooks
Hi @Ieuan Payne IPO, As Gerry has mentioned, we already provide a few DevOps integrations via the iBridge, based around Releases and Work Items, but we could certainly add more. What are the specific DevOps features you are wanting to automate, is it just to run an existing pipeline or are there other requirements? Thanks, Steve