The CreatorCon Call for Content is officially open! Get started here.

Transform Script Field Mapping

brostoff17
Tera Contributor

I am trying to map a field from a data source through a transform script, but I keep getting an error after I run the transform.   Any idea what could be wrong here?

I want to map the additional_field (datasource) to the "additional" variable.

When:onBefore

(function runTransformScript(source, map, log, target /*undefined onStart*/ ) {

var cart = new Cart();

//Catalog Item sys_id

var item = cart.addItem('10a2f5dfc6112276018db58138c7a1e0');

//set variables

var dataSource = source.additional_test;

cart.setVariable(item, 'additional', dataSource);

var rc = cart.placeOrder();

     

})(source, map, log, target);

Screenshot of test data source

Capture.PNG

1 ACCEPTED SOLUTION

Finally I figured it out after spending sometime on this.


Basically to create a cart for a specific user I.e set opened_by field you need to place this line above var cart = new Cart(); in your code.



var openedBy = new GlideRecord("sys_user");


openedBy.addQuery("email", source.u_opened_by_work_email);


openedBy.query();


if (openedBy.next()) {


var openedBy = openedBy.sys_id;


}



Now modify the line var cart = new Cart(); as var cart = new Cart(null, openedBy); //This will set the openedBy field on item table.



I think you can also GlideRecord the item table and set the field. I haven't tried that option as of now. Will keep you posted.



P.S : Community is currently down. Will modify your code and update on community once it is up and running.


View solution in original post

27 REPLIES 27

Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

Hello Josh,



I think line var dataSource = source.additional_test;   should be var dataSource = source.u_additional_test;


Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

Also please give more details on the error message you see.


Thanks pradeep, that worked!



Now in the second part of my script, I want to set the "requested for" variable also on the catalog item variable, and not just the requested item. I am tryingto do this in line 10, but its not working.   Any ideas?



// set the requested for


var gr = new GlideRecord("sys_user");


gr.addQuery("user_name", source.u_requested_for);


gr.query();


if (gr.next()) {


      var cartGR = cart.getCart();


      cartGR.requested_for = gr.sys_id;


      cartGR.requested_by = gr.sys_id;


      cartGR.manager = gr.manager;


      cartGR.setVariable('item', 'user_name', gr.sys_id);


      cartGR.update();


     



}




var rc = cart.placeOrder();


Thanks for the update.


To set the variable value on item your script will be


  1. var gr = new GlideRecord("sys_user");  
  2. gr.addQuery("user_name", source.u_requested_for);  
  3. gr.query();  
  4. if (gr.next()) {

          var cart = new Cart();


cart.setVariable('item', 'user_name', gr.sys_id);  


var rc = cart.placeOrder();  


}