Change risk assessment is the process of identifying, assessing, and documenting the inherent risks involved in a change request so that the effects of the risk can be downsized appropriately.
ServiceDesk Plus Cloud facilitates this by letting you assess and manage risks related to change requests by implementing a change risk questionnaire. This involves setting up the following configurations:
Go to Setup > Developer Space > Custom Module and click New. Fill out the fields in the New Custom Module form as specified below:
|
Field |
Values to be added |
|
Display Name |
Change Risk Questionnaire |
|
Display Name Plural |
Change Risk Questionnaire |
|
Description |
Add a description summarizing the custom module usage |
|
API Name |
cm_change_risk_question |
|
Display Type |
Custom Configurations |
|
Enable Features |
Ensure Data Import is enabled. |
You can add an icon for the custom module, if needed. Use the following screenshot for reference.

Save the custom module details.
In the Fields tab, edit the mandatory default field name as Question. Create 2 single-line type fields from the drag & drop section on the right. Name the fields as Answer and Score.

Go to Setup > Data Administration > Import Data. In the Import Wizard, select the field values as specified below:
|
Field |
Values to be added |
|
Select Module |
Select Custom Module from the drop-down. |
|
How do you want to import? |
Select Add record and update if already exists from the drop-down. |
|
File Format |
Choose XLS as the field format. |
|
Sheet No |
The sheet number will be auto-populated as 1. |
|
Locate File |
Locate the downloaded Change Risk Questionnaire XLS file on your workstation and upload it. |
|
Character Encoding |
Select UTF-8 as the character encoding. |
Use the following screenshot for reference.

After specifying the field values, click Next.
Under the Details section, choose the custom module as Change Risk Questionnaire and map the custom module fields with the XLS field columns as shown below:

Click Next. After the data is imported successfully, you can verify the imported data in the created custom module under Setup > Customization > Custom Configuration.

Go to Setup > Customization > Additional Fields. Navigate to Change Additional Fields and create the following fields.
Use the single-valued field types such as Pick List or Radio Button fields to create the additional fields.
|
Field Name |
Field Options (Values) |
|
Number of teams involved |
|
|
Level of prior experience/change success |
|
|
Level of testing |
|
|
Expected service outage |
|
|
Reversal time |
|
Add the created additional fields into the relevant change templates. This will help ServiceDesk Plus Cloud obtain the user's input for calculating the risk of the respective change request.
Go to Setup > Templates & Forms > Change Template. Add the created additional fields in a new template or to any existing templates. You can add the additional fields under a separate section called Risk Assessment for easy understanding.

Set up a change trigger to operate as the change risk calculator using the custom function mentioned below. Based on the user's answers to the change risk questionnaire, the change risk will be auto-calculated and updated into the change request.
Go to Setup > Automation > Triggers. Navigate to Triggers for Change and click New Trigger.
Fill out the custom trigger fields as mentioned below:
Trigger Definition:
Conditions:
|
Column |
Operator |
Value |
|
Template |
is |
Choose the templates for which you want to calculate the change risk score. |
|
Stage |
is |
Submission |
Actions:
modifiedfields = context.get("modifiedFields");
oldBean = context.get("initialObj");
if(oldBean == null || modifiedfields != null && (modifiedfields.contains("udf_char1") || modifiedfields.contains("udf_char2") || modifiedfields.contains("udf_char3") || modifiedfields.contains("udf_char4") || modifiedfields.contains("udf_char5")))
{
listInfo = {"list_info":{"row_count":100,"start_index":1}};
riskCalcutorScoreObj = zoho.sdp.invokeurl
[
url :"/app/" + context.get("instance") + "/api/v3/cm_change_risk_question"
type :GET
parameters:{"input_data":listInfo}
];
riskCalcutorScore = riskCalcutorScoreObj.get("cm_change_risk_question");
// converting riskdata to hashMap data for enhancing search through values
question_map = Map();
for each riskCalcData in riskCalcutorScore
{
question = riskCalcData.getJSON("cm_attributes").get("txt_name");
if(question_map.containKey(question))
{
temp_map = question_map.get(question);
temp_map.put(riskCalcData.getJSON("cm_attributes").get("txt_answer"),riskCalcData.getJSON("cm_attributes").get("txt_score"));
}
else
{
temp = Map();
temp.put(riskCalcData.getJSON("cm_attributes").get("txt_answer"),riskCalcData.getJSON("cm_attributes").get("txt_score"));
question_map.put(question,temp);
}
}
//field vs question_mapping
questionVsUdfFieldMapping = Map();
questionVsUdfFieldMapping.put("Number of teams involved","udf_char1");
questionVsUdfFieldMapping.put("Level of prior experience/change success","udf_char2");
questionVsUdfFieldMapping.put("Level of testing","udf_char3");
questionVsUdfFieldMapping.put("Expected service outage","udf_char4");
questionVsUdfFieldMapping.put("Reversal time","udf_char5");
udf_fields = changeObj.get("udf_fields");
score = 0;
for each questionField in questionVsUdfFieldMapping.keys()
{
score_map = question_map.get(questionField);
score_map = score_map.toMap();
tempScore = score_map.get(udf_fields.get(questionVsUdfFieldMapping.get(questionField)).toString());
if(tempScore != null)
{
score = score + tempScore.toNumber();
}
}
info "Score : " + score;
// risk assesment based on total score
risk = "None/Minimal";
if(score >= 8 && score < 16)
{
risk = "Low";
}
else if(score >= 16 && score < 24)
{
risk = "Medium";
}
else if(score >= 24 && score < 31)
{
risk = "High";
}
else if(score >= 31)
{
risk = "Critical";
}
info risk;
// update change with risk only if there is a difference
changeRisk = changeObj.get("risk");
if(changeRisk == null || changeRisk.get("name") != null && changeRisk.get("name") != risk)
{
update_param = {"change":{"risk":{"name":risk}}};
update_response = zoho.sdp.invokeurl
[
url :"/app/" + context.get("instance") + "/api/v3/changes/" + changeObj.get("id")
type :PUT
parameters:{"input_data":update_param}
];
info "====================";
info update_response;
}
}
Save the custom function and the trigger. Use the screenshot for reference to configure the change trigger:

After a user creates a change request with the templates selected in the change trigger and answers the change risk questionnaire, Servicedesk Plus Cloud will calculate the risk score of the change request. Based on the calculated score, the Change Risk field will be updated on the change details page as given below.
|
Score |
Change Risk |
|
less than 16 |
Low |
|
between 16 to 24 |
Medium |
|
between 24 to 31 |
High |
|
greater than 31 |
Critical |

Screen video illustrating change risk assessment