Document toolboxDocument toolbox

(2024.1) Service Now Integration - New Service

Service Now Integration is built upon PCR-360's (2024.1) Custom API Endpoints. Service Now will send its requests to the appropriate Endpoint and PCR-360 will process the details accordingly.

SNOW: New Service
<?php if (!empty($request["servicenow_number"])) { // log the original request JSON in the SERVICENOW_DETAILS UDF table $details = ["data" => []]; $systemValues = [ "apikey" => "apikey", "typeformat" => "typeformat", "module" => "module", "controller" => "controller", "action" => "action", "request_method" => "request_method", "limit" => "limit", "page" => "page", "tenants_recid" => "tenants_recid", "ident" => "ident" ]; $data = array_diff_key($request, $systemValues); foreach ($data as $field => $value) { $details["data"][] = [ "LABEL" => $field, "VALUE" => $value ]; } // set the default save data to create an SO with the SNOW data in a UD table $payload = [ "type" => "SO", "csr" => "1", // User Demo "udf_SERVICENOW_NUMBER" => trim($request["servicenow_number"]), // SERVICENOW_NUMBER "udf_SERVICENOW_DETAILS" => json_encode($details), // SERVICENOW_DETAILS "service_host" => "1" ]; // get the requestor based on the incoming requestor email address $requestorQuery = $this->query( "SELECT C.RECID FROM CONTACTS C JOIN CONTACTS_EMAILS CE ON C.RECID = CE.CONTACTS_RECID WHERE CE.EMAIL = :requestor", [":requestor" => trim($request["requestor"])] ); if (count($requestorQuery) && ($requestorRecid = $requestorQuery[0]["RECID"])) { // find the catalog RECID $catalogQuery = $this->query( "SELECT SC.RECID FROM SERV_CATALOG SC WHERE SC.SERVICE_NAME = :catalog", [":catalog" => $request["catalog"]] ); if (count($catalogQuery) && ($catalogRecid = $catalogQuery[0]["RECID"])) { // find the location RECID of the location $locationQuery = $this->query( "SELECT L.RECID FROM LOCATIONS L WHERE L.NAME = :location", [ ":location" => $request["new_location"] ]); if (count($locationQuery) && ($locationRecid = $locationQuery[0]["RECID"])) { // set the SDA variables if the data is valid $payload["sd_action"] = "ADD"; $payload["requestor"] = $requestorRecid; $payload["owner_contact"] = $requestorRecid; $payload["catalog"] = $catalogRecid; $payload["location"] = $locationRecid; } else { $response["error_message"] = "A valid LOCATION RECID could not be found in PCR360 based " . "on the incoming Location: " . $request["new_location"]; } } else { $response["error_message"] = "The Catalog '" . $catalog . "' could not be found in PCR360."; } } else { $response["error_message"] = "A valid CONTACT RECID could not be found in PCR360 based " . "on the incoming email address: " . $request["requestor"]; } if (isset($response["error_message"])) { // log the error as a remark on the SO $payload["remarks"] = "A Service Desk Action could not be created on this Service Order " . "due to the following error: " . $response["error_message"]; } $result = $this->call("saveServiceDesk", $payload); $response["servicedesk_number"] = $result["data"]; }