Copy UI Action
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-25-2016 03:13 AM
Hi,
I am trying to create a copy UI action on Project form. With the use of the UI action, the user should be able to create a copy of a project and its task.
UI Action:
Name: Project Support Services
Table: Project (pm_project)
Action name: copy_project
Onclick: createCopy()
Condition: gs.getUser().isMemberOf( Â"Project Support Services") && current.isValidRecord()
Script
function createCopy()
{
var a1 = g_form.getUniqueValue();
gr = new GlideRecord('pm_project');
gr.get(a1);
var sysid = gr.sys_id;
var ga = new GlideAjax('cloneproject');
ga.addParam('sysparm_name','Copyproject');
ga.addParam('sysparm_projtask',sysid);
ga.getXMLWait();
var prj_sysid = ga.getAnswer();
window.location= "/pm_project.do?sys_id="+prj_sysid;
}
Script Include:
var cloneproject = Class.create();
cloneproject.prototype = Object.extendsObject(AbstractAjaxProcessor, {
Copyproject: function() {
var proj_sysid = this.getParameter('sysparm_projtask');
var gr = new GlideRecord('pm_project');
gr.get(proj_sysid);
var task1 = new GlideRecord('pm_project');
//task1.initialize();
task1.u_financially_closed = 'false';
task1.description = "Copy from: " + gr.number + ' - ' + current.description;
task1.phase = 'planning';
//gr.work_start = current.work_start;
task1.state = '-5';
task1.work_cost = '';
task1.percent_complete = '0';
task1.effort = '0';
task1.insert();
if (gr.hasAttachments()) {
GlideSysAttachment.copy('pm_project', gr.sys_id, 'pm_project', task1.sys_id);
// task1.update();
}
gs.addInfoMessage('New Project ' +"'"+ task1.number +"'"+ ' has been created');
// Copy Project task
var ptask = new GlideRecord('pm_project_task');
ptask.addQuery('parent',gr.sys_id);
ptask.query();
while(ptask.next())
{
var fields = ptask.getFields();
var nptask = new GlideRecord('pm_project_task');
//Copy all fields except
nptask.initialize();
for (var j = 0; j < fields.size(); j++)
{
var ele = fields.get(j);
if (ele.hasValue() && ele.getName() != 'number' && ele.getName() != 'opened_by' && ele.getName() != 'assigned_to' && ele.getName() != 'assignment_group' && ele.getName() != 'opened_at' && ele.getName() != 'sys_updated_by' && ele.getName() != 'time_constraint' && ele.getName() != 'start_date' && ele.getName() != 'end_date' && ele.getName() != 'u_task_capitalization_tag' && ele.getName() != 'comments')
{
var itm = ele.getName();
nptask[itm] = ele;
}
}
nptask.setValue('parent',gr.sys_id);
nptask.setValue('state',-5);
nptask.setValue('duration', 0);
nptask.setValue('effort', 0);
nptask.setValue('percent_complete', 0);
nptask.setValue('work_cost', 0);
nptask.setValue('work_effort', 0);
nptask.insert();
gs.addInfoMessage('New Project task ' +"'"+ nptask.number +"'"+ ' has been created');
}
},
type: 'createCopy'
});
With the script include and UI action, I am unable to implement the functionality?
Any leads will be appreciated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-25-2016 03:23 AM
Have a look at one post about cloning change requests, as it might help you:
Re: Re: Can you clone/copy a change request?
Regards,
Sergiu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-25-2016 06:00 AM
Hi Sergie,
Thanks for the link. But I am still unable to implement this copy functionality. Below is my code:
copyProject();
function copyProject()
{
//Get the current sys_id value for querying
var prjID = current.sys_id.toString();
//Initialize new change for insertion
var newProj = current;
//newProj.number = getNextObjNumberPadded(); //Gethttps://kwiktripdev.service-now.com/images/icons/full_screen.gifx next change number
newProj.u_financially_closed = 'false';
newProj.description = "Copy from: " + gr.number + ' - ' + current.description;
newProj.phase = 'planning';
newProj.state = '-5';
newProj.work_cost = '';
newProj.percent_complete = '0';
newProj.effort = '0';
current.insert();
//Copy attachments for this change
if (typeof GlideSysAttachment != 'undefined')
GlideSysAttachment.copy('pm_project', prjID, 'pm_project', newProj.sys_id);
else
Packages.com.glide.ui.SysAttachment.copy('pm_project', prjID, 'pm_project', newProj.sys_id);
//Copy associated tasks and CIs
copyTask(prjID);
copyCI(prjID);
gs.addInfoMessage('Project ticket ' + newProj.number + ' created.');
action.setRedirectURL(newProj);
}
function copyTask(prjID)
{
//Find the current change tasks and copy them
var tasks = new GlideRecord('pm_project_task');
tasks.addQuery('parent', prjID);
tasks.query();
while(tasks.next()){
var taskID = tasks.sys_id.toString();
var newTask = tasks;
if (typeof GlideNumberManager != 'undefined')
newTask.number = GlideNumberManager.getNumber('pm_project_task');
else
newTask.number = Packages.com.glide.db.NumberManager.getNumber('pm_project_task'); //Get next change task number
newTask.parent = current.sys_id;
//newTask.setValue('parent',gr.sys_id);
newTask.setValue('state',-5);
newTask.setValue('duration', 0);
newTask.setValue('effort', 0);
newTask.setValue('percent_complete', 0);
newTask.setValue('work_cost', 0);
newTask.setValue('work_effort', 0);
tasks.insert();
//Copy attachments for this task
if (typeof GlideSysAttachment != 'undefined')
GlideSysAttachment.copy('pm_project_task', taskID, 'pm_project_task', tasks.sys_id);
else
Packages.com.glide.ui.SysAttachment.copy('pm_project_task', taskID, 'pm_project_task', tasks.sys_id);
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-25-2016 08:48 AM
Hi Kunal Kumar,
Please try with the below Changes,
Line 16: var newProj_sys_id = newProj.insert(); //Insert new project record
Line 38: tasks.addQuery('parent', newProj_sys_id ); //Assign new project task to new project record
Line 42: var newTask = new GlideRecord('pm_project_task'); //Initialize new task gliderecord
Line 47: newTask.parent = newProj_sys_id; //Assign parent of new project task record as new project record
Line 55: var newTask_sys_id = newTask.insert(); //Insert new project task record
Line 60: GlideSysAttachment.copy('pm_project_task', taskID, 'pm_project_task', newTask_sys_id);
Line 62: Packages.com.glide.ui.SysAttachment.copy('pm_project_task', taskID, 'pm_project_task', newTask_sys_id);
The records have not been inserted with correct variable in your code snippet.
I changed that and should probably let you create records successfully.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-27-2016 11:39 PM
Hi Maheshwar,
Thanks for the update on script but I am still unable to create new records.