# SailPoint Ivanti Cherwell Service Desk Connector Documentation > Ivanti Cherwell Service Desk Connector Documentation # Documentation # Configuring Ivanti Cherwell Service Desk In SailPoint, configure the following items for your Ivanti Cherwell Service Desk integration: - [Ticket Creation](<#ticket-creation>) - [Status Mapping](<#status-mapping>) - [Requester Source](<#requester-source>) On the Summary page, you can review the general settings and parameters for the connectivity and authentication. > [!NOTE] > > All activity on the Service Desk connector appears as [events in Search]() and on the Activity tab of an identity. ## Ticket Creation In a centralized approach spanning many users and resources to strengthen IT controls and provide proof of compliance to auditors and executive management, you can create a ticket for your integration based on your requirements. A ticket has all the relevant data filed for further processing. The information provided in this section is used to create the payload from SailPoint to create a ticket on the managed Ivanti Cherwell instance. You can customize this information by adding fields as required. > [!IMPORTANT] > > SailPoint recommends that you include the Apache Velocity variables as needed to meet your specific use cases. > [!NOTE] > > **Screenshot** > > [![Ticket Creation]()]() 1. Enter a **Persist** value for the ticket. Set `persist = true` to actually save the Business Object (ticket request) to disk. 2. Enter the list of mapped fields and their values that are sent to the Cherwell Service Management system to create tickets. For example: ```json [ { "dirty": "true", "displayName": "Call Source", "name": "CallSource", "value": "Event", "fieldId": "FIELD ID FOR CALL SOURCE" }, { "dirty": "true", "displayName": "Description", "name": "Description", "value": "SailPoint Access Request $!plan.arguments.identityRequestId #if($plan.arguments.identityName) for the user $plan.arguments.identityName #end $newline $newline #foreach($req in $plan.requests) #if($req.operation == 'Create') Create Account on application $req.resource #else For $req.id in application $req.resource #end #if($req.items) $newline #foreach($item in $req.items) #if ($item.name == '*disabled*' && $item.value == 'true') Requested action from SailPoint : Disable Account #if ($request.arguments.comments), Comments : $request.arguments.comments #end $newline #elseif ($item.name == '*disabled*' && $item.value == 'false') Requested action from SailPoint : Enable Account #if ($request.arguments.comments), Comments : $request.arguments.comments #end $newline #elseif ($item.name == '*locked*' && $item.value == 'false') Requested action from SailPoint : Unlock Account #if ($request.arguments.comments), Comments : $request.arguments.comments #end $newline #else $!item.Operation $item.name: $item.value #if ($item.arguments.comments), Comment from SailPoint : $item.arguments.comments #end $newline #end #end #else $newline $!req.Operation Account #end #end", "fieldId": "FIELD ID FOR DESCRIPTION" }, { "dirty": "true", "displayName": "Status", "name": "Status", "value": "New", "fieldId": "FIELD ID FOR STATUS" }, { "dirty": "true", "displayName": "Requester ID", "name": "RequesterID", "value": "$!plan.arguments.opened_by", "fieldId": "FIELD ID FOR REQUESTER ID" }, { "dirty": "true", "displayName": "Requester", "name": "Requester", "value": "$!plan.arguments.openedByFullName", "fieldId": "FIELD ID FOR REQUESTER" }, { "dirty": "true", "displayName": "Email Notifications", "name": "EmailNotifications", "value": "Customer and Requester", "fieldId": "FIELD ID FOR EMAIL NOTIFICATIONS" }, { "dirty": "true", "displayName": "On Behalf Of", "name": "OnBehalfOf", "value": "True", "fieldId": "FIELD ID FOR ON BEHALF OF" }, { "dirty": "true", "displayName": "Incident Type", "name": "IncidentType", "value": "Incident", "fieldId": "FIELD ID FOR INCIDENT TYPE" }, { "dirty": "true", "displayName": "Service", "name": "Service", "value": null, "fieldId": "FIELD ID FOR SERVICE" }, { "dirty": "true", "displayName": "Category", "name": "Category", "value": null, "fieldId": "FIELD ID FOR CATEGORY" }, { "dirty": "true", "displayName": "Subcategory", "name": "Subcategory", "value": null, "fieldId": "FIELD ID FOR SUB CATEGORY" }, { "dirty": "true", "displayName": "Priority", "name": "Priority", "value": "3", "fieldId": "FIELD ID FOR PRIORTY" }, { "dirty": "true", "displayName": "Customer ID", "name": "CustomerRecID", "value": "$!plan.arguments.requested_for", "fieldId": "FIELD ID FOR CUSTOMER RECORD ID" } ] ``` 3. Enter the Business Object ID in **Bus Ob Id** for the Incident business object template from your Cherwell Service Management system. In CSM, Incidents and Service Requests are stored together in the Incident Business Object. For more information, refer to [CSM 10.4.0 ITSM Practices: About Incidents and Service Requests](). #### Advanced Properties To add advanced properties to the details of the ticket, select **Advanced Properties**. > [!NOTE] > > **Screenshot** > > [![Advanced Properties]()]() 1. Enter the basic JSON root element of the request ticket in the **Request Root Element**. For example, `Ticket`. 2. Enter the type of the Request Root Element. For example, `JSONObject`. 3. Enter the resource used for the request ticket in the **Resource**. Do not include the base URL for the instance in the value. Provide only the remaining directories for the endpoint. For example, `/CherwellAPI/api/V1/savebusinessobject`. 4. Enter the JSON path expression that indicates the location of the ticket number in the **Response Element** field. For example, `$.busObPublicId`. > [!NOTE] > > The ticket number generated on the Service Desk system for the corresponding provisioning action can be seen under **Search \> Account Activity** details of the identity. For more information, refer to [Account Activity Using Search](). ## Status Mapping Map the status of the incident in SailPoint to the corresponding Ivanti Cherwell status. To add another row for status mapping, select **Add Status**. Customize the status map to meet your needs by adding or deleting rows as needed. > [!NOTE] > > **Screenshot** > > [![Status Mapping]()]() > [!IMPORTANT] > > Each status must have at least one mapped value. For more information, refer to [Get the time check configuration of queued service desk integration module tickets]() and [Update the time check configuration of queued SDIM tickets](). ### Status Mapping for Incident If any changes are required in the mapping, change the default values in **Status Mapping** as mentioned in the following table: | Entry key (Ivanti Cherwell Service Management) Status | Values (SailPoint) | | --- | --- | | Assigned | Queued | | Closed | Committed | | In Cart | Queued | | In Progress | Queued | | New | Queued | | Pending | Queued | | Reopened | Queued | | Resolved | Committed | ### Status Mapping for Service Request If any changes are required in the mapping, change the default values in **Status Mapping** as mentioned in the following table: | Entry key (Ivanti Cherwell Service Management) Status | Values (SailPoint) | | --- | --- | | Assigned | Queued | | Closed | Committed | | In Cart | Queued | | In Progress | Queued | | New | Queued | | Pending | Queued | | Reopened | Queued | | Resolved | Committed | #### Advanced Properties To add more details to the status mapping, select **View Advanced Properties**. > [!NOTE] > > **Screenshot** > > [![Advanced Properties]()]() 1. Enter the resource used for the request ticket in the **Resource**. Do not include the base URL for the instance in the value. Replace `BUSINESS OBJECT ID FROM CSM SYSTEM` with the actual value of the business object ID (**Bus Ob Id**) for the Incident business object template provided during [Ticket Creation](<#ticket-creation>). Provide only the remaining directories for the endpoint. For example, `/CherwellAPI/api/V1/getbusinessobject/busobid/{BUSINESS OBJECT ID FROM CSM SYSTEM}/publicid/$ticketId`. 2. Enter the JSON path in the **Response Element** for the status mapping. For example, `$.fields.[?(@.name=='Status')].value`. ## Requester Source The Requester Source attribute expects a source name through which the Ivanti Cherwell Service Management Customer records are aggregated. > [!NOTE] > > **Screenshot** > > [![Requester Source]()]() Select the source name that aggregated the Ivanti Cherwell Service Management Customer records. # Connecting SailPoint and Ivanti Cherwell Service Desk The Ivanti Cherwell Service Desk Integration Module (SDIM) helps to perform effective and efficient service management for SailPoint services offered to the organization. It enables customers to create and manage tickets reported from other sources. > [!NOTE] > > Ivanti Cherwell Service Desk SDIM supports Incident and Service Request ticket types. You can integrate a SailPoint source with the Ivanti Cherwell Management System for access request and monitoring. > [!NOTE] > > **Screenshot** > > [![Service Desk Integrations landing page]()]() **To create the connection:** 1. Sign in to **SailPoint \> Admin interface**. 2. Go to **Connections \> Service Desk**. The Service Desk connections page displays. 3. Select **Create**. The Create Integration page displays. 4. Provide the required information on the [General Settings](<#general-settings>) page. 5. Select **Continue**. The Configure page appears. 6. Provide the [Connectivity and Authentication](<#connectivity-and-authentication>) information on the Configure page. 7. Provide the [Ticket Creation]() information on the Configure page. 8. Provide the [Status Mapping]() information on the Configure page. 9. Provide the [Requester Source]() information on the Configure page. 10. Select **Continue** to save the configuration and review the Summary of the configuration. ## General Settings > [!NOTE] > > **Screenshot** > > [![General Settings]()]() > [!NOTE] > > Ensure that the name and description of each connection are unique. Because you can configure multiple source types to use this connection, you should specify the sources in the description. The tickets for those sources will be processed on the managed system while the status of the tickets are synchronized in SailPoint. 1. Enter a descriptive **Name** for the connection. 2. Enter the **Description** of the connection. 3. Select **Integration Type** Ivanti Cherwell ITSM SDIM from the drop-down list. 4. Select **Incident** in the **Ticket Type** dropdown list. 5. Select the Connection Type: - [VA-Based Connection Type](<#va-based-connection-type>) - Select the **VA-Based** connection type if you want to use a Virtual Appliance Cluster. - [SaaS Connection Type](<#saas-connection-type>) - Select the **SaaS** connection type if you want to create a SaaS application without using a Virtual Appliance Cluster. > **Notes** > > - SaaS Connection types don't support Credential Providers. > - Once you create an integration, you cannot edit the connection type. 6. (Optional) If Credential Providers are supported for this integration, you can select **Use a Credential Provider** to use a credential provider configured in your tenant. 7. Enter the name of the **Integration Owner**. ### VA-Based Connection Type > [!NOTE] > > **Screenshot** > > [![VA-Based Connection Type]()]() 1. Select **VA-Based** connection type if you want to use a Virtual Appliance Cluster. 2. Select **Save**. ### SaaS Connection Type > [!NOTE] > > **Screenshot** > > [![SaaS Connection Type]()]() 1. Select **SaaS** connection type if you want to create a SaaS application without using a Virtual Appliance Cluster. > [!NOTE] > > When you select the SaaS connection type, the [Enable Debug Logging](<#administrator-settings>) feature is available. It is only supported for Service Desk SaaS integration. #### Administrator Settings > [!NOTE] > > **Screenshot** > > [![Administrator Settings]()]() 1. Select the **Enable Debug Logging** checkbox to enable the integration to create and send debug log files to SailPoint Support to help troubleshoot issues. 2. If the **Enable Debug Logging** feature is needed, please contact SailPoint. > **Note** > > **Enable Debug Logging** should not be enabled without SailPoint guidance. ### Sources > [!NOTE] > > **Screenshot** > > [![Sources]()]() In the **Sources** dropdown list, select sources to configure from the available sources. For each source you want to integrate with the Ivanti Cherwell Service Desk system, verify that it is configured for provisioning. > [!TIP] > > Edit the **Description** field for these sources to indicate they are used in the Ivanti Cherwell Service Desk integration. ## Connectivity and Authentication In the **Configure \> Connectivity and Authentication** sub-panel, complete all the details required to integrate your Ivanti Cherwell instance with Ivanti Cherwell Service Desk. 1. Enter the **URL** of the Ivanti Cherwell instance that you are integrating with. For example, `https://CSMSiteName.cherwell.com`. 2. Select the **Authentication Type** as OAuth2. 3. Select your **Grant Type**: - [Password Grant Type](<#password-grant-type>) - [Refresh Token Grant Type](<#refresh-token-grant-type>) ### Password Grant Type > [!NOTE] > > **Screenshot** > > [![Password Grant Type]()]() 1. Select the **Grant Type** as PASSWORD. 2. Enter the **Token URL** for generating an access token. For example, `https://CSMSiteName.cherwell.com/CherwellAPI/token`. 3. Enter the **Username** with the Service Account username. 4. Enter the **Password** with the Service Account user's password. 5. Enter the **Client ID** for OAuth2 authentication. 6. Enter the **Client Secret** for OAuth2 authentication. ### Refresh Token Grant Type > [!NOTE] > > **Screenshot** > > [![Refresh Token Grant Type]()]() 1. Select the **Grant Type** as REFRESH\_TOKEN. 2. Enter the **Token URL** for generating an access token. For example, `https://CSMSiteName.cherwell.com/CherwellAPI/token`. 3. Enter a valid **Refresh Token**. 4. Enter the **Client ID** for OAuth2 authentication. 5. Enter the **Client Secret** for OAuth2 authentication. # Integrating SailPoint Ivanti Cherwell Service Desk > [!NOTE] > > **Integration** > > This is an integration and requires additional licensing or subscriptions to utilize it. For more information, contact your customer success manager. SailPoint's Ivanti Cherwell Service Desk connector integrates with the Ivanti Cherwell Management System to bring the Ivanti Cherwell experience to SailPoint, where you can raise and track service desk tickets (Incident and Service Request) to their logical closure without leaving SailPoint - for example, creating an account, removing or deleting access, and other operations - using REST APIs. The seamless integration of SailPoint with the Ivanti Cherwell Management System eliminates the need to build and maintain a custom integration and reduces time-to-deployment. [![Service desk integration process flow]()]() > [!NOTE] > > All activity on the Service Desk connector appears as [events in Search]() and on the Activity tab of an identity. The new service desk functionality provides an easy way to: - See a list of integrations - View summaries of the integrations - Create new integrations - Edit/Update existing integrations - Delete integrations This document describes how to configure a Ivanti Cherwell Service Desk Integration Module. > [!NOTE] > > The Ivanti Cherwell Service Desk configuration requires SailPoint Services hours or Partner involvement. For more information, contact your SailPoint Customer Success Manager. > [!NOTE] > > To view the latest features, enhancements, and fixes for all SaaS connectors, refer to the [SaaS Release Notes]() page. ## Supported Features SailPoint's Ivanti Cherwell Service Desk connector supports the following features: - Creating tickets for manual provisioning operations. - Checking status of the tickets. - Synchronizing ticket status between SailPoint's Ivanti Cherwell Service Desk Integration Module and the Cherwell Service Management system. - Retry Mechanism for Create Ticket request failure. > [!NOTE] > > The Ivanti Cherwell Service Desk Integration can be configured as a [SaaS Connection Type]() for SaaS connectivity that doesn't require a Virtual Appliance Cluster. ## Prerequisites > [!IMPORTANT] > > For Service Desk Integration Module to function properly, ensure that the feature flag `GOV_DISABLE_PLAN_INITIALIZER` is set to `true` for your organization. For more information, reach out to [Professional Services/Expert Services](). - Configure the virtual appliance cluster only when using a VA-based connection type. For instructions, refer to the [Virtual Appliance Reference Guide](). > **Note** > > This requirement doesn't apply to SaaS connections. - Configure at least one source to generate manual tasks for Provisioning. For more information, refer to [Configuring Source Account Provisioning](). - Be familiar with Apache Velocity scripting. For more information, refer to [Apache Velocity Engine - Getting Started](). - Know the authentication option (OAuth 2.0 Authentication) to use to authenticate into the Ivanti Cherwell instance. - Aggregate the customers from the Cherwell Service Management system into SailPoint. - Create a new Client ID for the service account. For more information, refer to [Obtaining API Client IDs](). ## System Requirements SailPoint's Ivanti Cherwell Service Desk supports the following versions of the Ivanti Cherwell product: - Cherwell Service Management (cloud) version 2023.1.1 - Cherwell Service Management (cloud) version 10.4.0 - The Ivanti Cherwell Service Management system is deployed on the cloud. - The virtual appliance must be able to connect to the ITSM system when using a VA-based connection type, typically using outbound access for port 443 (HTTPS). > **Note** > > This requirement doesn't apply to SaaS connections. ## Required Permissions - Assign the following minimum access permissions to create and get the status of the ticket: - The Security Group assigned to the service account requires View, Add, and Edit permissions on the Incident business object. - Admin user level permissions are required to create and configure Ivanti Cherwell Service Desk connections. Refer to [Setting User Level Permissions]() for more information about setting the user level permissions. # Enable Connector Logging This topic provides the steps needed to enable logging on SailPoint using REST APIs. > [!NOTE] > > This topic only applies to VA-based integrations. > [!NOTE] > > The examples provided might not match your configuration. Use the logging levels and logging classes reference at the bottom of the topic to configure your API responses to match your connector. This process is broken up into four steps: 1. Identify the Virtual Appliance (VA) cluster on which you want to enable logging. 2. Get the logging configuration for the existing VA cluster. 3. Update the VA cluster to enable logging levels. 4. Observe logging changes to the logging levels. ### Identify the Virtual Appliance Cluster Select the VA on which you need to enable logging using REST API. If you already know the VA application's `id`, proceed to [Get the Logging Configuration](<#get-the-logging-configuration>). 1. Make the following call to the REST API to return a list of available VA clusters: GET /v3/managed-clusters The REST API returns a response that looks similar to the following: ```json [ { "id": "2c9180866166b5b0016167c32ef31a66", "name": "Development Cluster", "description": "Development Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": null }, { "id": "2c9180846a93ce60016ab29f039944de", "name": "Cloud Cluster", "description": "Cloud Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } } ] ``` > **Note** > > The previous example code shows two VA clusters. One VA cluster has a log configuration and the other does not (refer to the `logConfiguration` value in each returned VA cluster). This is because one of the clusters already has logging enabled. This is just an example configuration, and your environment may not have logging enabled on a cluster. 2. Identify the VA cluster that you want to enable logging on by its name or description and record its `id` attribute. ### Get the Logging Configuration Get your selected VA's cluster logging configuration and identify the values you need to update. 1. Make the following call to the REST API to return the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. GET /v3/managed-clusters/{id}/log-config - If the VA doesn't have a logging configuration currently set, it returns `204 No Content` as a response. - If the VA has an existing logging configuration, it returns something similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` You'll need to configure the following information in the response: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). ### Update Logging Configuration Update the VA cluster configuration returned by the REST API to update the logging settings as needed. 1. Make the following call to the REST API to update the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. PUT /v3/managed-clusters/{id}/log-config 2. Submit your configuration changes to the REST API in a JSON body. - If the VA cluster did not already have a logging configuration and you received a `204 No Content` response, you can create a new one. - If the VA returned a configuration, you can edit it to include the changes. The JSON body should be as follows: ```json { "durationMinutes": 60, "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` Consider the following as you edit the JSON: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). If the update was successful, the REST API should return a response similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` ### Observe Logging Changes Approximately five minutes after you update the configuration, the VA cluster starts generating log files you can review. You can view the log files in **ccg.log**. ### References The tables in this reference section list information that can be helpful when creating the JSON body you'll use to configure the VA cluster's configuration file. #### Logging Levels | Logging Level | Description | | --- | --- | | ERROR | Designates error events that might still allow the connector to continue. | | WARN | Designates potentially harmful situations. | | INFO | Designates information messages that highlight process at a coarse-grain level. | | DEBUG | Very verbose. Fine grain logging levels used for development and debugging. | | TRACE | Most verbose. Finer grain logging levels than debugging. | #### Logging Classes | Connector | Logging Class | | --- | --- | | Active Directory | sailpoint.connector.ADLDAPConnector sailpoint.connector.LDAPConnector | | AIX | openconnector.connector.unix.AIXConnector openconnector.connector.unix.UnixConnector | | Amazon Web Services | logger.aws.name=openconnector.connector.aws logger.aws.level=trace logger.aws.additivity = false logger.aws.appenderRef.rolling.ref = STDOUT | | Atlassian Suite Cloud | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianConnector | | Atlassian Data Center | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianDataCenterConnector | | Microsoft Entra ID | sailpoint.connector.AzureADConnector | | Box | openconnector.connector.BoxNetConnector sailpoint.connector.OpenConnectorAdapter | | Cerner | openconnector.connector.CernerConnector sailpoint.connector.OpenConnectorAdapter | | Delimited File | logger.DelimitedFileConnector.name = sailpoint.connector.DelimitedFileConnector logger.DelimitedFileConnector.level = debug logger.DelimitedFileConnector.additivity = false logger.DelimitedFileConnector.appenderRef.rolling.ref = STDOUT | | Dropbox | openconnector.connector.DropBoxConnector sailpoint.connector.OpenConnectorAdapter | | Epic | openconnector.connector.EPICConnector sailpoint.connector.OpenConnectorAdapter | | GE Centricity | openconnector.connector.GECentricity sailpoint.connector.OpenConnectorAdapter | | Google Apps / G Suite | openconnector.connector.GoogleAppsDirect sailpoint.connector.OpenConnectorAdapter | | IBM i | openconnector.connector.IBMiConnector | | Lotus Domino | sailpoint.connector.LotusDomino | | JDBC | sailpoint.connector.JDBCConnector | | Sun One LDAP | sailpoint.connector.LDAPConnector | | Linux | openconnector.connector.unix.LinuxConnector sailpoint.connector.OpenConnectorAdapter sailpoint.connector.UnixConnector | | Microsoft Office365 | sailpoint.connector.Office365Connector | | Microsoft SQL Server | sailpoint.connector.mssql.serviceimpl.MSSQLServerConnectorV2 | | Okta | logger.openconnector.name = openconnector.connector.okta.OktaConnector logger.openconnector.level = debug logger.openconnector.additivity = false logger.openconnector.appenderRef.rolling.ref = STDOUT | | Oracle Database | sailpoint.connector.OracleDBConnector sailpoint.connector.JDBCConnector | | Oracle E-Business | sailpoint.connector.OracleEBSConnector sailpoint.connector.JDBCConnector | | Oracle Fusion HCM | openconnector.connector.oraclefusionhcm.OracleFusionHCMConnector sailpoint.connector.OpenConnectorAdapter | | Oracle HCM Cloud | sailpoint.connector.oraclehcmcloud.OracleHCMCloudConnector | | Oracle HRMS | sailpoint.connector.OracleAppsHRMSConnector sailpoint.connector.JDBCConnector | | Oracle Netsuite | openconnector.connector.netsuite.NetsuiteConnector | | PeopleSoft ERP | openconnector.connector.PeopleSoftConnector sailpoint.connector.OpenConnectorAdapter | | PeopleSoft HRMS | sailpoint.connector.PeopleSoftHRMSConnector | | RemedyForce | sailpoint.connector.ForceConnector | | RSA Authentication Manager | openconnector.connector.RSAConnector openconnector.connector.rsa.RSAHTTPClient sailpoint.connector.OpenConnectorAdapter | | Salesforce | sailpoint.connector.ForceConnector | | SAP Concur | openconnector.connector.sapconcur.SAPConcurConnector | | SAP - Direct | sailpoint.connector.SAPConnector sailpoint.connector.SAPInternalConnector | | SAP GRC | logger.SAPGRCConnector.name = sailpoint.connector.sapgrc logger.SAPGRCConnector.level = debug logger.SAPGRCConnector.additivity = false logger.SAPGRCConnector.appenderRef.rolling.ref = STDOUT | | SAP HR/HCM | sailpoint.connector.SAPHRInternalConnector | | SCIM 1.1 | openconnector.connector.SCIMConnector sailpoint.connector.OpenConnectorAdapter | | SCIM 2.0 | openconnector.connector.scim2.SCIM2Connector sailpoint.connector.OpenConnectorAdapter | | ServiceNow | openconnector.connector.servicenow.ServiceNowConnector openconnector.connector.servicenow.ServiceNowRestClient sailpoint.connector.OpenConnectorAdapter | | ServiceNow Service Desk Integration | openconnector.connector.servicedesk.ServiceNowServiceDeskConnector sailpoint.connector.OpenConnectorAdapter | | Siebel | openconnector.connector.SiebelConnector sailpoint.connector.OpenConnectorAdapter | | Snowflake | openconnector.connector.snowflake.SnowflakeConnector sailpoint.connector.OpenConnectorAdapter | | Solaris | openconnector.connector.unix.SolarisConnector openconnector.connector.unix.UnixConnector sailpoint.connector.OpenConnectorAdapter | | SuccessFactors | sailpoint.connector.SuccessFactorsConnector | | Sybase | sailpoint.connector.SybaseDirectConnector sailpoint.connector.JDBCConnector | | Webex | openconnector.connector.Webex sailpoint.connector.OpenConnectorAdapter | | Workday | openconnector.connector.WorkDay sailpoint.connector.OpenConnectorAdapter | | Workday Accounts | openconnector.connector.workdayaccounts openconnector.connector.workdayaccounts.WorkdayAccountsConnector sailpoint.connector.OpenConnectorAdapter | | Web Services | sailpoint.connector.WebServices | | XML | openconnector.connector.XMLConnector sailpoint.connector.OpenConnectorAdapter | | Yammer | openconnector.connector.YammerConnector sailpoint.connector.OpenConnectorAdapter | | Zoom | openconnector.connector.zoom.ZoomConnector sailpoint.connector.OpenConnectorAdapter | # Troubleshooting If you encounter any of the following issues or errors, SailPoint recommends that you follow the guidance provided below to resolve the error before contacting SailPoint Support. For issues or errors that are not addressed in this connector guide, refer to the following resources for troubleshooting information: - [SailPoint Identity Services Documentation]() - [SailPoint Support Knowledge Base]() - [SailPoint Developer Community]() ## Ticket creation fails because the request includes escape characters (`\\`) Ticket creation fails because the request includes escape characters (`\\`). The system produces the following error message: ```text Ticket creation failed. com.google.gson.stream.MalformedJsonException: Invalid escape sequence ``` **Resolution**: Edit the **Fields** with the Description attribute value by replacing the existing text with: ```text #foreach($req in $plan.requests) #if($req.operation == 'Create') Create Account on application $req.resource #else For $req.id in application $req.resource #end #if($req.items) $newline #foreach($item in $req.items) #if ($item.name == '*disabled*' && $item.value == 'true') Disable Account. $newline #elseif ($item.name == '*disabled*' && $item.value == 'false') Enable Account. $newline #elseif ($item.name == '*locked*' && $item.value == 'false') Unlock Account. $newline #else $!item.Operation $item.name: $$StringEscapeUtils.escapeJava ($StringEscapeUtils.escapeJava($item.value.toString())) $newline #end #end #else $newline $!req.Operation Account #end $newline #end ``` ## Ticket creation fails when a user (identity) does not have a Cherwell user's Customer record in the CSM Ticket creation fails because the user (identity) does not have a Cherwell user's Customer record in the CSM. The system produces the following error message: ```text sailpoint.connector.ConnectorException: [ ConnectorException ] [ Error details ] Request execution failed. ...,"errorMessage":"The field Incident.Customer ID must be filled in before the record can be saved.\r\nThe field Incident.Customer Display Name must be filled in before the record can be saved.","hasError":true}. Status: 500 ``` **Resolution**: Ensure that the user for whom you are requesting the ticket is present on the Ivanti Cherwell Service Management System and has an associated Customer record. ## Status Mapping is not defined The following error message appears if the provisioning status map is not defined: ```text InvalidConfigurationException ] [ Error details ] SailPoint Identity Platform provisioning status is not defined against the IT Service Management status 'Resolved' in the check status configuration 'statusMap' for the 'incident' ticket type. ``` **Resolution**: First define the ticket system provisioning status map to the SailPoint status in [Status Mapping](), and then perform the operation. # Timeout Errors and Settings Timeout errors might occur when SailPoint is waiting for a response from the Virtual Appliance (VA). These errors are applicable to all connectors and tend to occur during the setup of sources or when sources are down. This document is designed to give specific information that can be used to resolve these errors. Each timeout attribute has a default time value that is listed in seconds or minutes. Increasing the time value may resolve the error as it will allow for longer communication time between the two systems, thus avoiding the timeout error. > [!IMPORTANT] > > Add the necessary attributes or values before performing the "replace" operation, as missing attributes will cause the operation to fail. To increase the communication time, increase the value of the appropriate timeout attribute. Then submit the change to the VA using the SailPoint REST API. > [!NOTE] > > For more information on SailPoint's REST APIs, refer to [Best Practices: REST API Authentication]() and [REST API - Update Source (Partial)]() in the SailPoint Developer Community. ### aggregateTimeout **Description:** This parameter is set for the aggregation timeout, measured in seconds. **Resolution:** Increase the `aggregateTimeout` value gradually to optimize aggregation. Start with 180, then increase to 600, 900, and finally 1800. The maximum value is 3600 seconds. For example: If your current time value is 180 seconds, update the `aggregateTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/aggregateTimeout", "value": 600 } ] ``` ### healthCheckTimeout **Description:** This parameter is set for the test connection and health check timeout. **Resolution:** The default value is 30 seconds. If the timeout error continues, increase the value in 15 second increments and try again. For example: If your current time value is 30 seconds, update the `healthCheckTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/healthCheckTimeout", "value": 45 } ] ``` ### provisioningTimeout **Description:** This parameter is set for provisioning timeout. **Resolution:** Increase the `provisioningTimeout` value gradually to optimize provisioning. Start with 180, then increase to 360, and finally 600. The maximum value is 600 seconds. For example: If your current time value is 180 seconds, update the `provisioningTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/provisioningTimeout", "value": 360 } ] ``` ### timeout **Description:** This parameter is set for pass-through authentication timeout. **Resolution:** The default value is 15 seconds. If the timeout error continues, increase this value in 15 second increments and try again. For example: If your current time value is 15 seconds, update the `timeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeout", "value": 30 } ] ``` ### apiTimeout **Description:** This parameter is set for API time tracking; customers can check it using an external tool. **Resolution:** The default value is 60 seconds. If the error continues, increase the value by 15 second increments and try again. For example: If your current time value is 60 seconds, update the `apiTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/apiTimeout", "value": "75" } ] ``` ### timeoutInSeconds **Description:** This parameter helps prevent the VA from waiting indefinitely for an API response, ensuring efficient handling of API requests. For example: If your current time value is 30 seconds, update the `timeoutInSeconds` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeoutInSeconds", "value": "15" } ] ```