Adding New Change Type

Brian Lancaster
Kilo Patron

I followed this document to add a new change type.  However it does not go over how to update the ChangeRequest script include so you can create a change request of this new type thought a UI Action.  How do I go updating the script include?

17 REPLIES 17

that was the example I used was from our normal change. the point was to illustrate that we're using additional lines of code on the top that you don't have. not sure if they make a difference or not. 

 

You'd have to update the line highlighted in yellow for your specific type : 

(function(current, previous, gs, action) {
var target = {};
target.table = current.getTableName();
target.sysid = current.getUniqueValue();
target.field = 'rfc';
try {
target.isWorkspace = (typeof RP == 'undefined');
}
catch (err) {
target.isWorkspace = false;
}

gs.getSession().putProperty('change_link', target);

var changeRequest = ChangeRequest.newNormal();
changeRequest.setValue("short_description", current.short_description);
changeRequest.setValue("description", current.description);
changeRequest.setValue("cmdb_ci", current.cmdb_ci);
if (changeRequest.hasValidChoice('priority', current.priority))
changeRequest.setValue("priority", current.priority);
changeRequest.setValue("sys_domain", current.sys_domain);
changeRequest.setValue("company", current.company);
changeRequest.insert();

action.setReturnURL(current);
action.setRedirectURL(changeRequest.getGlideRecord());

})(current, previous, gs, action);

I did that after I realized it said new Normal.  As soon as I say newExpedite I'm back to where I was where I get an info message saying undefined.

also when I created a new change type I also had to create two new script includes for expedited so that it knew the states and transition. not sure how you'd do this since you are trying to use the normal workflow twice.

Don't know if this was the best way to do it but I told it to call the normal state snc.

var ChangeRequestStateModel_expedite = Class.create();
ChangeRequestStateModel_expedite.prototype = Object.extendsObject(ChangeRequestStateModelSNC_normal, {
    draft: {
        nextState: [ "assess" ],

        assess: {
            moving: function() {
                return this.toAssess_moving();
            },

            canMove: function() {
                return this.toAssess_canMove();
            }
        },

        canceled: {
            moving: function() {
                return this.toCanceled_moving();
            },

            canMove: function() {
                return this.toCanceled_canMove();
            }
        }
    },

    assess: {
        nextState: [ "authorize" ],

        draft: {
            moving: function() {
                return this.toDraft_moving();
            },

            canMove: function() {
                return this.toDraft_canMove();
            }
        },

        authorize: {
            moving: function() {
                return this.toAuthorize_moving();
            },

            canMove: function() {
                return this.toAuthorize_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();
            }
        }
    },

    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: {},

    type: "ChangeRequestStateModel_expedite"
});

Ok so I created a new Script Include called ChangeRequestStateModelSNC_expedite which has the same code as normal one and updated ChangeRequestStateModel_expedite to call that instead.  It works fine with creating the change manually but I still cannot do it via the UI Action.