- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-01-2018 10:08 PM
Hi all,
I created a new change type (minor) using this tutorial, and then used this tutorial to add my own states.
The States I have added for this test is:
- Develop and Implement in UAT (8)
- Test in UAT (12)
The issue I am having is that when I go to the change, When it is at New, the new state of 'Develop and Implement in UAT' is not available.
It is probably worth noting that the change request here was heavily modified by the implementer, and the OOB states (Draft, Assess etc) have been removed as part of the implementation before my time.
Below are the two script includes edited as per the tutorial. Any clues where I am going wrong?
Thanks in Advance!
ChangeRequestStateHandler
var ChangeRequestStateHandler = Class.create();
// All references to statehandler constants should be through this class ChangeRequestStateHandler
ChangeRequestStateHandler.DRAFT = ChangeRequestStateHandlerSNC.DRAFT;
ChangeRequestStateHandler.ASSESS = ChangeRequestStateHandlerSNC.ASSESS;
ChangeRequestStateHandler.AUTHORIZE = ChangeRequestStateHandlerSNC.AUTHORIZE;
ChangeRequestStateHandler.SCHEDULED = ChangeRequestStateHandlerSNC.SCHEDULED;
ChangeRequestStateHandler.IMPLEMENT = ChangeRequestStateHandlerSNC.IMPLEMENT;
ChangeRequestStateHandler.REVIEW = ChangeRequestStateHandlerSNC.REVIEW;
ChangeRequestStateHandler.CLOSED = ChangeRequestStateHandlerSNC.CLOSED;
ChangeRequestStateHandler.CANCELED = ChangeRequestStateHandlerSNC.CANCELED;
ChangeRequestStateHandler.DEVELOP_AND_IMPLEMENT_IN_UAT = "develop_and_implement_in_uat";
ChangeRequestStateHandler.TEST_IN_UAT = "test_in_uat";
ChangeRequestStateHandler.prototype = Object.extendsObject(ChangeRequestStateHandlerSNC, {
MINOR:"minorv2",
initialize: function(changeRequestGr) {
ChangeRequestStateHandlerSNC.prototype.initialize.call(this, changeRequestGr);
this.STATE_NAMES["8"] = ChangeRequestStateHandler.DEVELOP_AND_IMPLEMENT_IN_UAT;
this.STATE_NAMES["12"] = ChangeRequestStateHandler.TEST_IN_UAT;
},
_resetModel: function() {
this._model = null;
var type = this._gr.getValue('type') + "";
if (type == this.NORMAL || type == this.STANDARD || type == this.EMERGENCY)
ChangeRequestStateHandlerSNC.prototype._resetModel.call(this);
else if (type == this.MINOR)
this._model = new ChangeRequestStateModel_minor(this._gr);
},
type: "ChangeRequestStateHandler"
});
ChangeRequestStateModel_minor
var ChangeRequestStateModel_minor = Class.create();
ChangeRequestStateModel_normal.prototype = Object.extendsObject(ChangeRequestStateModelCust_minor, {
draft: {
nextState: [ "develop_and_implement_in_uat" ],
develop_and_implement_in_uat: {
moving: function() {
return this.toDevelopuat_moving();
},
canMove: function() {
return this.toDevelopuat_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
develop_and_implement_in_uat: {
nextState: [ "test_in_uat" ],
test_in_uat: {
moving: function() {
return this.toTestuat_moving();
},
canMove: function() {
return this.toTestuat_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
authorize: {
nextState: [ "scheduled" ],
draft: {
moving: function() {
return this.toDraft_moving();
},
canMove: function() {
return this.toDraft_canMove();
}
},
scheduled: {
moving: function() {
return this.toScheduled_moving();
},
canMove: function() {
return this.toScheduled_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
scheduled: {
nextState: [ "implement" ],
implement: {
moving: function() {
return this.toImplement_moving();
},
canMove: function() {
return this.toImplement_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
implement: {
nextState: [ "review" ],
review: {
moving: function() {
return this.toReview_moving();
},
canMove: function() {
return this.toReview_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
review: {
nextState: [ "closed" ],
closed: {
moving: function() {
return this.toClosed_moving();
},
canMove: function() {
return this.toClosed_canMove();
}
},
canceled: {
moving: function() {
return this.toCanceled_moving();
},
canMove: function() {
return this.toCanceled_canMove();
}
}
},
closed: {},
canceled: {},
toDevelopuat_moving: function() {
return true;
},
toDevelopuat_canMove: function() {
return true;
},
toTestuat_moving: function() {
return true;
},
toTestuat_canMove: function() {
return true;
},
type: "ChangeRequestStateModel_minor"
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-03-2018 12:07 AM
You can try to add new STATE_NAMES on ChangeRequestStateHandler
this.STATE_NAMES["1"] = ChangeRequestStateHandler.DRAFT;
Then try again.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2018 06:43 PM
var type = this._gr.getValue('type') + "";
After this statement can you add a log gs.log('++++++++type is+++++++'+type);
Please mark this response as correct or helpful if it assisted you with your question.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2018 07:16 PM
Hey,
I get this in the system logs:
++++++++type is+++++++minorv2

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2018 07:40 PM
In the BR Populate scratchpad with valid states
Can you add this log
(function executeRule(current, previous /*null when async*/) {
var stateValues = [];
var stateHandler = new ChangeRequestStateHandler(current);
var nextStates = stateHandler.getNextStates();
gs.addInfoMessage('====nextStates ========'+nextStates.toString());
if (nextStates) {
for (var i = 0; i < nextStates.length; i++)
stateValues.push(stateHandler.getStateValue(nextStates[i]));
}
g_scratchpad.validStates = stateValues;
})(current, previous);
Please mark this response as correct or helpful if it assisted you with your question.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2018 07:53 PM
Hey mate, added it but i do not get a message popping up after loading a change, nor is there anything in the system logs.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2018 08:04 PM
One more. Sorry for making you add so many logs. But difficult to identify whats wrong. Use the below in the BR to check if it is entering the BR. IF it does, then there is an issue in the script include.
Try to create a new Emergency or normal change as well and see what you get
(function executeRule(current, previous /*null when async*/) {
var stateValues = [];
gs.addInfoMessage('====Entering the business rule========');
var stateHandler = new ChangeRequestStateHandler(current);
var nextStates = stateHandler.getNextStates();
gs.addInfoMessage('====nextStates ========'+nextStates.toString());
if (nextStates) {
for (var i = 0; i < nextStates.length; i++)
stateValues.push(stateHandler.getStateValue(nextStates[i]));
}
g_scratchpad.validStates = stateValues;
})(current, previous);
Please mark this response as correct or helpful if it assisted you with your question.