Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Create Demand on Idea acceptance. BR is working fine except for one field not populating

Vaishnavi35
Tera Guru

Hi,

 

I have a BR in place that creates demand when Idea is being accepted. That code is not written by me but someone who was their earlier.

I have added two lines of code. That should populate Portfolio on Idea form to Portfolio on demand form.

demand.setValue("portfolio", current.u_global_process_shared_services_area); - This one does not work.
demand.setValue("portfolio", current.portfolio); - This one works just fine. 
 
u_global_process_shared_services_area and portfolio names both represent portfolios as I have two Record producers that create Idea.
Help?
 
Thanks,
Vaishnavi
5 REPLIES 5

SasankaV
Giga Guru

Hi @Vaishnavi35 ,

I have worked on some similar issues before in my experience at Work4flow. The following code is a sample code that could help resolve the issue. 

var demandTable = "dmn_demand";
if (GlidePluginManager.isActive('com.snc.project_management_v3')) {
    demandTable = SNC.PPMConfig.getDemandTable(current.getTableName());
}

// Create the Demand
var demand = new GlideRecord(demandTable);
demand.setValue("description", current.description);
demand.setValue("requested_by", current.u_required_completion_date_if_any);
demand.setValue("portfolio", current.portfolio); // This works fine

// Check and set the u_global_process_shared_services_area field
if (current.u_global_process_shared_services_area) {
    demand.setValue("portfolio", current.u_global_process_shared_services_area); // This should work if field is populated
}

demand.setValue("primary_program", current.u_program);
demand.setValue("priority", current.priority);
demand.setValue("short_description", current.short_description);
demand.setValue("type", "project");
demand.setValue("submitter", current.submitter);
demand.setValue("parent", current.sys_id);
demand.setValue("idea", current.sys_id);
var dmnId = demand.insert();
demand.get(dmnId);
current.demand = dmnId;
current.stage = 'demand';
GlideSysAttachment.copy('idea', current.sys_id, 'dmn_demand', demand.sys_id);
var link = ' <a href ="/' + demandTable + '.do?sysparm_query=number%3D' + demand.getValue('number') + '">' + demand.getValue('number') + '</a>';
var message = gs.getMessage("Demand {0} has been created");
message = message.replace("{0}", link);
gs.addInfoMessage(message);

Give it a try, and let me know if it doesn't work. I'd be happy to assist.

It does not work. 😞

Chris Everding
ServiceNow Employee
ServiceNow Employee

Hi @Vaishnavi35 ,

 

The field is a custom field (as it's name begins with u_), as such it's tricky for me to know exactly why it's not working as it may depend on the field type and how it's setup. A few options/suggestions - 

 

1. May not solve the issue, but it is recommended best practice to use getValue and setValue rather than dot walking -  current.getValue('u_global_process_shared_services_area');

2. Does the custom u_global_process_shared_services_area field type differ from the OOTB portfolio field? The value used to update it could be different if it's a reference or choice for example.

 

Hope this is helpful.

Chris

Hi,

1. How do I write in the script using getVlaue and setValue? if you can help?

2. Both are same. But u_global_process_shared_services_area is a custom field reference to portfolio only.

Stakeholders wanted a different name on the portfolio form. 

 

Thanks,

Vaishnavi