Piotr Ba_amut1
Mega Contributor

The code below should create RITMs from the mrvs. It should also copy columns from mrvsa to variables if they have the same prefix. 

Business rule: after; on insert

Table: [sc_request]

 

 

(function executeRule(current, previous /*null when async*/) {

  
	var rowCount1 = '';
	var x = [];
	var y = [];
	var rowCount = '';
	var catItemId = '';
	
	var ritm = new GlideRecord('sc_req_item');
	ritm.addQuery('request',current.sys_id);
	ritm.query();
	while(ritm.next()) {
		catItemId = ritm.cat_item;
		//////////below code is checking whether is the variables set starting from "mrvsa_"  ////
		//gs.log("Test 1 " + ritm.number,'piotr');

	var gr1 = new GlideRecord('sc_item_option_mtom');
		gr1.addQuery('request_item', ritm.sys_id);
		gr1.addQuery('request_item.request', current.request);
		gr1.addQuery('sc_item_option.item_option_new.variable_set.internal_name','STARTSWITH','mrvsa_');
		gr1.query();
		//If we find a matching variable in another item update its value
		while(gr1.next()){
			rowCount1 = gr1.sc_item_option.item_option_new.variable_set.internal_name.toString();
			x.push(gr1.sc_item_option.item_option_new.name.substring(2).toString());			
		}		
		//////////////////below code pushes to array "y" all variables starting from "s_"///////
		var gr2 = new GlideRecord('sc_item_option_mtom');
		gr2.addQuery('request_item', ritm.sys_id);
		gr2.addQuery('request_item.request', current.request);
		gr2.addQuery('sc_item_option.item_option_new.name','STARTSWITH','s_');
		gr2.query();
		//If we find a matching variable in another item update its value
		while(gr2.next()){
			y.push(gr2.sc_item_option.item_option_new.name.substring(2).toString());
		}
	
		rowCount =  ritm.variables[rowCount1].getRowCount();
		if (rowCount1) {
			//gs.log("Obiekt " + ritm.variables.mvrs_affected_usr);
			var row1 = ritm.variables[rowCount1];
			
			for (var i = 1; i < rowCount; i++)  {
				var row = ritm.variables[rowCount1].getRow(i);
				var affectedUser = row.mvr_affected_user;
				var location = row.mvr_location;
				var requestId = current.sys_id;
				var helper = new GlideappCalculationHelper();
				helper.addItemToExistingRequest(requestId, catItemId, 1);
				var num = helper.rebalanceRequest(current.request);
			}

			var ritm1 = new GlideRecord('sc_req_item');
			ritm1.addQuery('request',current.sys_id);
			ritm1.query();
			var k = 0;
			while (ritm1.next()) {
				if (ritm1.sys_id != ritm.sys_id) {
					var rec = new GlideRecord('sc_item_option_mtom');
					rec.addQuery('request_item', ritm.sys_id);
					rec.query();
					while(rec.next()){
						//Query for the same variable associated with the parent Request's items
						//gs.log("DXC1 "+ ritm.number + " "+ "REC " +rec.sc_item_option.item_option_new.name);
						var itemVars = new GlideRecord('sc_item_option_mtom');
						itemVars.addQuery('request_item', ritm1.sys_id);
						itemVars.addQuery('request_item.request', current.request);
						itemVars.addQuery('sc_item_option.item_option_new.name', rec.sc_item_option.item_option_new.name.toString());
						itemVars.query();
						//If we find a matching variable in another item update its value
						while(itemVars.next()){
							//Get the variable value record
							var itemVar = new GlideRecord('sc_item_option');
							itemVar.get(itemVars.sc_item_option);
							itemVar.value = rec.sc_item_option.value.toString();
							itemVar.update();
						}
					}
				}
				///////////////////below code copies variables from mvrs to the newly created RITMs
				var uniqueArray1 = new ArrayUtil().unique(x); 
				var uniqueArray2 = new ArrayUtil().unique(y);
				var b = '';
				var c = '';
				var d = 'affected_user';
			
				for(var j = 0; j < uniqueArray2.length; j++) {
					if (uniqueArray1.indexOf(uniqueArray2[j]) != -1 ) {
					    b = "s_" + uniqueArray2[j];
						c = "m_" + uniqueArray2[j];
						//gs.log("Test For" + b + " "+ c, 'piotr');
						ritm1.variables[b] = ritm.variables[rowCount1][k][c];				
 						if (d == y[j]) {
 						ritm1.u_affected_user = row1[k][c];								
					   }
						ritm1.update();
				    }
				}	
// 				gs.log('Test AA '+ ritm.number + " " + ritm1.number + " " +ritm.cat_item.name,'piotr');
// 				//	There is a static copying approach below
// 					 							ritm1.variables.s_affected_user = row1[k].m_affected_user;
// 					// 							ritm1.u_affected_user = row1[k].m_affected_user;
// 					 							ritm1.variables.s_location = row1[k].m_location;
// 					 							ritm1.variables.s_manager = row1[k].m_manager;		
				k++;	//This k++ iterates across all RITMs to copy variables from mrvs
//			
				
			} 
		} 
	}
})(current, previous);
	
Comments
Surabhi5
Kilo Contributor

Hi Piotr,

 

Thanks for the above script, i am facing issues with copying variable set values to all child RITMs.

The variable set value only shows in the first RITM that gets created and not the following one's in the sequence.

Kindly suggest how to fix that.

Also is there a way to copy some of the values from multi row variable set into other variables in the child ritms to differentiate the RITMs on basis of different users?

 

Regards,

Surabhi

Aayush5
Tera Contributor

@Surabhi5  For the variable set I have already posted the code on below post: 

 

How to show Variable editor on dynamic request items 

Version history
Last update:
‎05-29-2019 01:41 AM
Updated by: