This is the example script as provided by TaskTop which can be found HERE



    

/////////////////////////////////////////////////////////////////////////////////////////////////////
//
//  This is the Tempate JavaScript Workflow Provided by TaskTop 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////


// The HP ALM connector provides the following properties:

    //  “USER_ID” - the user id of the logged in user
    //  “DISPLAY_NAME” - the display name of the logged in user
    //  “USER_GROUPS” - an array of Strings containing the groups that the user is a member of (also known as the user’s roles)
    //  “DOMAIN” - the QC or ALM Domain to which the task belongs
    //  “PROJECT” - the QC or ALM Project to which the task belongs


// import the Arrays class from Java (optional)
importClass(java.util.Arrays);

// Declare the standard message type constants
var MSG_INFO = 0;
var MSG_WARNING = 1;
var MSG_ERROR = 2;

// Declare constants for the properties exposed by the QC and ALM connector
var PROP_USER_ID = "USER_ID";
var PROP_DISPLAY_NAME = "DISPLAY_NAME";
var PROP_GROUPS = "USER_GROUPS";
var PROP_DOMAIN = "DOMAIN";
var PROP_PROJECT = "PROJECT";

// Declare constants for the ids of fields you are interested in
var BG_ACTUAL_FIX_TIME = "BG_ACTUAL_FIX_TIME";
var BG_ESTIMATED_FIX_TIME = "BG_ESTIMATED_FIX_TIME";
var BG_REPRODUCIBLE = "BG_REPRODUCIBLE";
var BG_PRIORITY = "BG_PRIORITY";

// Declare any other constants
var QA_MANAGER = "QA Manager";

function handleEditorOpened(dom) {
    // this is how you can get metadata from the task
    var taskId = dom.getTask().getTaskId();
    var displayName = dom.getTask().getProperty(PROP_DISPLAY_NAME);
    var domain = dom.getTask().getProperty(PROP_DOMAIN);
    var project = dom.getTask().getProperty(PROP_PROJECT);
    
        var groupMessageSet = false;
        for(var i in groups) {
            if(groups[i] == QA_MANAGER) {
                dom.getTaskUi().setMessage(
                    "You are a member of the QA Manager group", MSG_INFO);
                groupMessageSet = true;
            }
        }
        if(!groupMessageSet) {
            var groupsAsString = Arrays.toString(groups);
            dom.getTaskUi().setMessage(
                "Click to see your group membership",
                "You are a member of the following groups: " + groupsAsString,
                MSG_INFO);
        }
    }

    // get the IField objects containing the current values of the fields
    // the getField method returns null if the field is not present for that task
    var actualFixTime = dom.getTask().getField(BG_ACTUAL_FIX_TIME);
    var estimatedFixTime = dom.getTask().getField(BG_ESTIMATED_FIX_TIME);
    var reproducible = dom.getTask().getField(BG_REPRODUCIBLE);
    var priority = dom.getTask().getField(BG_PRIORITY);

    // change field visibility, values, etc. as desired
    if(actualFixTime != null) {
        actualFixTime.setVisible(false);
    }
    
    if(estimatedFixTime != null) {
        estimatedFixTime.setInt(1);
        estimatedFixTime.setRequired(true);
    }

    if(reproducible != null) {
        reproducible.setReadOnly(true);
    }
}


function handleSingleValueChanged(dom, fieldId, oldValue, newValue) {
    // change field visibility, values, etc. as desired
    if(fieldId.equals(BG_PRIORITY)) {
        if(newValue != null && newValue.equals("P1")) {
            // set a warning message in the task editor
            dom.getTaskUi().setMessage(
                "Priority P1 should only be used for critical tasks", MSG_WARNING);
        }
    }
}


function handleFieldChanged(dom, fieldId, oldValues, newValues) {
    if(!fieldId.equals(BG_PRIORITY)) {
        // set an information message in the task editor
        dom.getTaskUi().setMessage("You edited the field \"" +
            dom.getTask().getField(fieldId).getLabel() + "\"", MSG_INFO);
    }
}
        
function handleSubmit(dom, changedFieldIds) {
    // return false to prevent the user from submitting their changes
    return true;
}

function dispose() {
    // if necessary, do any needed cleanup here
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////
//This sample script prevents a user from changing the status of a defect to “Closed” unless they are part
//of the “QA Manager” group:

// Declare the standard message type constants
var MSG_INFO = 0;
var MSG_WARNING = 1;
var MSG_ERROR = 2;

// Declare constants for the properties exposed by the QC and ALM connector
var PROP_USER_ID = "USER_ID";
var PROP_DISPLAY_NAME = "DISPLAY_NAME";
var PROP_GROUPS = "USER_GROUPS";
var PROP_DOMAIN = "DOMAIN"; 
var PROP_PROJECT = "PROJECT";
var BG_STATUS = "BG_STATUS"; 
var CLOSED = "Closed";
var DEFECT = "Defect";
var QA_MANAGER = "QA Manager";

function handleSingleValueChanged(dom, fieldId, oldValue, newValue) {
    // warn the user when they try to make an illegal change
    var task = dom.getTask();
    if(task.getTaskType() == DEFECT && fieldId == BG_STATUS && newValue.getString() == CLOSED) {
        if(!isUserQAManager(dom)) {
        dom.getTaskUi().setMessage("Only a QA Manager can close a defect.", MSG_ERROR); return;
        }
    }
    dom.getTaskUi().clearMessage();
}

function handleSubmit(dom, changedFieldIds) {
    // prevent the user from submitting an illegal change
    var task = dom.getTask();
    var statusField = task.getField(BG_STATUS);
    if(task.getTaskType() == DEFECT && statusField.getString() == CLOSED) {
        for(var i in changedFieldIds) {
            var changedFieldId = changedFieldIds[i];
            if(changedFieldId == BG_STATUS) {                                           // the status field has been changed
                if(!isUserQAManager(dom)) {
                    dom.getTaskUi().setMessage(
                        "Submit disallowed: only a QA Manager can close a defect.", MSG_ERROR);
                    return false;   // block the submission
                }
            }
        }
    }
    return true;// allow the submission
}

function isUserQAManager(dom) {
    var groups = dom.getTask().getProperty(PROP_GROUPS);
    for(var i in groups) {
        if(groups[i] == QA_MANAGER) {
            return true;
        }
    }
    return false;
}