Creating/Editing a Change Management Instance
To create a Change Management instance, select the Change Management tab, and click the button. To edit an existing instance, click on an Instance row from the list.
Enter values for the fields as described in the table below.
Field Name | Required | Description |
---|---|---|
Instance Code | Yes | Short name for the instance. As the code is available as Groovy and Shell variables it must not contain spaces or other special characters, aside from underscores. |
Instance Name | Yes | Display name for the instance. |
Change Management | Yes | The change management system. |
Description | No | A meaningful description of the instance. |
Active | Yes | Whether or not the instance is active in the system. Defaults to "Yes" when creating a new instance. |
If the selected Change Management System has any properties defined, enter the values for those properties.
Click the Test button to test the connection and verify that the url, port, username, and password are correct. Click the Save button to save the changes. Optionally click the Apply button to save the changes, but remain on the current screen until the Cancel button is clicked.
ServiceNow Properties
Property | Type | Description |
---|---|---|
ServiceNow URL | String | The URL for accessing ServiceNow. |
ServiceNow User Name | String | A local ServiceNow service account user with a non-expiring password. |
ServiceNow Password | String | The password for the ServiceNow User Name above. Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately. Required for the following Auth Types, BasicAuth and OAuthResourceOwner |
ServiceNow Auth Type | String | Authentication method for connecting to ServiceNow, BasicAuth, OAuthResourceOwner, OAuthJWTAssertion. Defaults to BasicAuth. @Since 5.6.0.6 |
ServiceNow Client ID | String | The auto-generated unique ID of the application. The instance uses the client ID when requesting an access token. @Since 5.6.0.6 Required for the following Auth Types, OAuthResourceOwner and OAuthJWTAssertion. |
ServiceNow Client Secret | String | The shared secret string that both the instance and the client application use to authorize communications with one another. The instance uses the client secret when requesting an access token. (Encrypted). @Since 5.6.0.6 Required for the following Auth Types, OAuthResourceOwner and OAuthJWTAssertion. |
ServiceNow Keystore Path | String | ServiceNow Keystore Path (path to the jks file). @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow Keystore Passphrase | String | Java keystore passphrase for the ServiceNow Keystore (Encrypted). @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow Certificate Alias | String | Private certificate alias. @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow Certificate Passphrase | String | Passphrase for the ServiceNow Certificate (Encrypted). @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow JWT Verifier Map Key ID | String | ServiceNow JWT Verifier Map Key ID. @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow Certificate Algorithm | String | Algorithm used for the certificate. Defaults to RS256. @Since 5.6.0.6 Required for the following Auth Types, OAuthJWTAssertion. |
ServiceNow Refresh Token Lifespan | Long | The number of seconds that a refresh token is valid. The instance uses the lifespan value when requesting a refresh token. By default, refresh tokens expire in 100 days (8640000 seconds). @Since 5.6.0.6 |
ServiceNow Request GET URL | String | The URL to get the change request details as json response. @Since 5.4.0.1
|
ServiceNow Navigation Request URL | String | The URL to open ServiceNow and navigate to the Change ticket associated to the project workflow execution @Since 5.4.0.3
|
ServiceNow Request POST URL | String | The URL to create a change request. @Since 5.4.0.3
|
Approved Check Script | String | A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
If the Approved Check Script is left blank, the default implementation is to return true if the "approval" field of the ticket is set to "approved". Simple Example which is used by default TICKET.approval == 'approved' Example that checks myfield value specific to target environment (TICKET.myfield == 'UATApproved' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.myfield == 'PRODApproved' && FD_ENVIRONMENT_CODE='PROD') If you want to see values that can be used, enable Following example is to check if current date time is between start_date and end_date defined on Ticket. Let's assume format for the date string returned and TimeZone as GMT. Check if now is between start_date and end_date defined on ticket import java.util.Date; import java.util.TimeZone; import flexagon.ff.common.core.utils.FlexDateTimeUtils; if(TICKET.approval == 'approved' && TICKET.start_date != null && TICKET.end_date != null) { Date start = FlexDateTimeUtils.stringToDate(TICKET.start_date, "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT")); Date end = FlexDateTimeUtils.stringToDate(TICKET.end_date, "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT")); Date now = new Date(); if(now.after(start) && now.before(end)) { return true; } } return false; |
Rejected Check Script | String | A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
If the Rejected Check Script is left blank, the default implementation is to return true if the "approval" field of the ticket is set to "rejected". Simple Example which is used by default TICKET.approval == 'rejected' Example that checks myfield value specific to target environment (TICKET.myfield == 'UATRejected' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.myfield == 'PRODRejected' && FD_ENVIRONMENT_CODE='PROD') |
Additional Info Script | String | @since 5.5.0.2 A Groovy expression which determines additional information to add to an external approval when it is approved or rejected. The expression must return a Map<String, String> and have an entry with the key of "notes" for the value to get added to external approval as a task note. Script has access to the following variables:
Example where ServiceNow Approver(s) and time of approval are added to task notes import flexagon.ff.common.core.rest.FlexRESTClient; import flexagon.ff.common.core.rest.FlexRESTClientResponse; import flexagon.ff.common.core.utils.FlexJsonUtils; import flexagon.fd.model.integration.util.ApiException; import org.json.JSONObject; import org.json.JSONArray; import java.util.HashMap; import java.util.Map; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Form; import javax.ws.rs.core.MediaType; def returnMap = [:] def snowUrl = '{SN_URL}' def user = '{SN_USER_NAME}' def password = '{SN_PASSWORD}' def resourcePath = '/api/now/table/sysapproval_approver?sysparm_display_value=all&sysparm_query=state%3Dapproved%5Edocument_id%3D' + TICKET.sys_id try { FlexRESTClient restService = new FlexRESTClient(); FlexRESTClientResponse response = restService.url(snowUrl).path(resourcePath).basicauth(user, password).mediatype(MediaType.APPLICATION_JSON).setValidateResponse(true).get(); JSONObject jsonResponse = null; jsonResponse = FlexJsonUtils.getJSON(response.getResponseString()); def listOfApprovers = jsonResponse.getJSONArray('result'); for (int i = 0; i < listOfApprovers.length(); i++) { def approver = listOfApprovers.get(i); def linkRequestUrl = approver.getJSONObject('approver').getString('link') restService = new FlexRESTClient(); response = restService.url(linkRequestUrl).basicauth(user, password).mediatype(MediaType.APPLICATION_JSON).setValidateResponse(true).get(); jsonResponse = FlexJsonUtils.getJSON(response.getResponseString()); jsonResponse = jsonResponse.getJSONObject('result') if (returnMap.isEmpty()) { returnMap['notes'] = 'Approvers: ' + System.getProperty("line.separator") } else { returnMap['notes'] = returnMap['notes'] + System.getProperty("line.separator") } returnMap['notes'] = returnMap['notes'] + jsonResponse.getString('name') + ' (' + approver.getJSONObject('sys_updated_on').getString('display_value') + ')' } } catch(Exception ex) { returnMap['notes'] = ex.getMessage() } return returnMap |
Don't Poll | Boolean | Returns whether FlexDeploy should poll ServiceNow to check the change tickets for Approval/Rejection. The default value is false, which means polling will occur. Only check this box if you are using the FlexDeploy REST API to communicate ticket approval/rejection. |
ServiceNow Modules
Most common usage for ServiceNow is using the change request module, but other objects like service catalog request can be used by modifying the default GET, POST, and Nav URLs. If you plan to use a different module, for POST operation, use the tickets tab in the CMS configuration screen to add any additional fields required to create the object.
BMC Remedyforce Properties
Property | Type | Description |
---|---|---|
BMC Helix Remedyforce URL | String | BMC Helix Remedyforce Instance URL (https://<instance_name>.salesforce.com) |
BMC Helix Remedyforce User Name | String | BMC Helix User Name |
BMC Helix Remedyforce Password | String | BMC Helix Remedyforce Password Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately. |
Client Id | String | Connected App Client Id |
Client Secret | String | BMC Helix Remedyforce Client Secret |
Approved Check Script | String | A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
|
Rejected Check Script | String | A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
|
Additional Info Script | String | @since 5.5.0.2 A Groovy expression which determines additional information to add to an external approval when it is approved or rejected. The expression must return a Map<String, String> and have an entry with the key of "notes" for the value to get added to external approval as a task note. Script has access to the following variables:
|
Don't poll | Boolean | Disable automatic polling (every minute) of BMC Helix tickets for status changes. Check if using REST API to communicate status changes to FlexDeploy. |
Specified Object URL | String | Object Name URL (/services/data/vXX.X/sobjects/{OBJECT_NAME}) |
Category Id | String | Category FK Id (e.g a216g0000005NvDAAU) |
Freshworks Freshservice Properties
Property | Type | Description |
---|---|---|
Freshservice URL | String | Freshservice URL (https://<your_helpdesk_domain_name>.freshservice.com) |
Freshservice API Key | String | API key for Freshservice Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately. |
Approved Check Script | String | A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
|
Rejected Check Script | String | A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
|
Additional Info Script | String | @since 5.5.0.2 A Groovy expression which determines additional information to add to an external approval when it is approved or rejected. The expression must return a Map<String, String> and have an entry with the key of "notes" for the value to get added to external approval as a task note. Script has access to the following variables:
|
Don't poll | Boolean | Disable automatic polling (every minute) of Freshservice tickets for status changes. Check if using REST API to communicate status changes to FlexDeploy. |
Freshservice Requester Id | String | Freshservice agent id for API access(should be a number) |
Jira ITSM Properties
Property | Type | Description |
---|---|---|
Jira URL | String | Jira URL (http://myjira.atlassian.net) |
Jira User | String | Jira User Name |
Jira API Token | String | API token for Jira Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately. |
Jira Ticket URL Pattern | String | The URL to open Jira ITSM and navigate to the change ticket associated to the project workflow execution
|
Jira GET Rest API Pattern | String | Jira Rest API URL Pattern for a GET request
|
Jira POST Rest API Pattern | String | Jira Rest API URL pattern for creating a change ticket
|
Approved Check Script | String | A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
If the Approved Check Script is left blank, the default implementation checks the status of the ticket to determine if it's approved. Statuses of awaiting implementation, implementing, and completed are considered approved and return true. Default Check TICKET.fields.status.name == 'Awaiting implementation' || TICKET.fields.status.name == 'Implementing' || TICKET.fields.status.name == 'Completed' Example that checks custom field value specific to target environment (TICKET.fields.customfield_10107.status == 'UATApproved' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.fields.customfield_10107.status == 'PRODApproved' && FD_ENVIRONMENT_CODE='PROD') If you want to see values that can be used, enable |
Rejected Check Script | String | A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
If the Rejected Check Script is left blank, the default implementation checks the status of the ticket to determine if it's rejected. Statuses of declined, canceled, and failed are considered rejected and return true. |
Additional Info Script | String | @since 5.5.0.2 A Groovy expression which determines additional information to add to an external approval when it is approved or rejected. The expression must return a Map<String, String> and have an entry with the key of "notes" for the value to get added to external approval as a task note. Script has access to the following variables:
|
Don't poll | Boolean | Disable automatic polling (every minute) of Jira tickets for status changes. The default value is false, which means polling will occur. Only check this box if you are using the FlexDeploy REST API to communicate ticket approval/rejection. |
- style