Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Access to request.requested_for from catalog task

Joel_Miller
Mega Contributor

I am trying to access the value for requested_for on the request associated to a catalog task.

I have a catalog task and need to find the value for the requested_for field at the request level. I am doing this so that if there is a requested_for value then I can use that value to filter the list of available computers to only the computers that are assigned to the user specified in the requested_for field. I am doing this using a function I created for the reference qualified on cmdb_ci.

However, no matter what way I try to reference the request, I cannot get to that value (a value always exists).

I have tried things like the following:

current.requested_item.request.requested_for

parent.request.requested_for

current.request.requested_for

and several others....

 

Does anyone know of a way this is possible? Your help is greatly appreciated!

Thanks!

7 REPLIES 7

mitchell_stutle
Mega Expert

Hey Joel,



Can you please post your entire script include in here? current.request.requested_for should be pulling the correct value.



Thanks,


Mitch Stutler


My apologies about the wait. I wanted to make sure I clean up the script and put in comments:



Code

function getCMDBCIsForIncident() {


  var answer = "sys_class_name=*";


  var thisCategory = "";


  var targetEmployee = "";


  var thisSubcategory = "";



  //Find targetEmployee for use in filtering for the requestor


  if (current.caller_id){ //for use on incidents


  targetEmployee = current.caller_id;


  }


  else if (current.requested_for) { //for use in requested items


  targetEmployee = current.requested_for;


  }


  else if (current.request.requested_for) { //for use in catalog tasks


  targetEmployee = current.request.requested_for;


  }



  //Find the appropriate category field


  if (current.category) { //used from Incident Form


  thisCategory = current.category.toString();


  }


  else if (current.variables.category) { //used from incident record producer


  thisCategory = current.variables.category.toString();


  }



  //set answser for reference qualifier based on category


  switch (thisCategory) {


  case "software":


  answer="sys_class_name=cmdb_ci_service"; //business services


  break;


  case "hardware":


  answer="sys_class_nameINSTANCEOFcmdb_ci_server"; //servers


  break;


  case "network" :


  answer="sys_class_nameINSTANCEOFcmdb_ci_netgear"; //network gear


  break;


  default:


  answer = "sys_class_name=*"; //if not specified - return all CIs


  }



  //Find the appropriate subcategory field


  if (current.subcategory) { //incident form subcategory


  thisSubcategory = current.subcategory.toString();


  }


  else if (current.variables.subcategory) { //incident record producer subcategory


  thisSubcategory = current.variables.subcategory.toString();


  }


  else if (current.variables.u_subcategory) { //request item form subcategory


  thisSubcategory = current.variables.u_subcategory.toString();


  }


  else if (current.u_subcategory) { // requested_item form subcategory


  thisSubcategory = current.u_subcategory.toString();


  }


  else if (current.requested_item.u_subcategory) { //catalog item subcategory


  thisSubcategory = current.requested_item.u_subcategory.toString();


  }



  //If the subcategory is set to computer, return only the computers that are assigned to the requestor


  switch (thisSubcategory) {


  case "Computer": answer="sys_class_name=cmdb_ci_computer^assigned_to=" + targetEmployee;


  break;


  }


  return answer;


}



This is also applied to an incident on the cmdb_ci as a reference qualifier. This works perfectly there. If the subcategory is 'computer', allowed cmdb_ci's are set to only the computers that are assigned to the caller_id.



When I use this on the requested item or catalog task, it returns no result. I believe this is because it is not finding a requested_for value.



Any help is greatly appreciated.



FYI - I have a category/subcategory set of fields added to requested item. They are u_category and u_subcategory respectfully. They are dependent variables just like in the incident form. For the catalog task form, I have added the category/subcategory from the requested item to the catalog task form.


else if (current.requested_for) { //for use in requested items


  targetEmployee = current.requested_for;


  }


  else if (current.request.requested_for) { //for use in catalog tasks


  targetEmployee = current.request.requested_for;


  }




The first line is not correct , for the requested item it should say, "current.request.requsted_for", as the requested_for field is not on the requested_item table, it is coming from the request table, and thus we can get the value of requested_for only by referring to the request table.



The code is fine for the catalog task.



But if it does not work, just try to fetch the requested_for using a glide record on the request table.



var req=new GliedRecord('request')


req.addQuery('sys_id',current.request);


req.query();


if(req.next())


{


var requestedfor=req.requested_for;


}



requestedfor will contain the desired value.



Regards


Pratul Agarwal


Hi Joel,



In the requestd item (sc_req_item) table , the requested for dot walking is current.request.requested_for.



In catalog task (sc_task) table, the requested for is current.request_item.request.requested_for