Service Portal - Issue with the selectboxes and the ng-repeat is not working

Revathi Kotha
Tera Contributor

 

Hello All,
When one select box value is selected, the other select box values in the table are changed. Is there anything wrong with the code?

 

HTML
 
 
<td><select id="manager_action" ng-model="c.data.manager_action" class="form-control" ng-change="c.changeAction({{x.employee_number}})" ng-options="y.name for y in data.actions" ng-required="true"> </select> </td>
 
Server Script: data.actions=[{ name:'Keep', value:'1' }, { name:'Remove', value:'2' }]

 

1 ACCEPTED SOLUTION

I'm assuming you want to prevent submission functionality if the required fields are not filled?

 

You need to add a name attribute to the form

<form name="formName">

 

Then check if the form is valid (all required fields are met) when the submit button is clicked

 <button class="test" class="btn btn-primary btn-block" ng-click="c.uiAction('remove')" ng-disabled="formName.$invalid">Keep All</button>

 

View solution in original post

23 REPLIES 23

Revathi Kotha
Tera Contributor
Here is the data structure:

Can you please guide me in the right direction? Sorry for asking too many questions.

I am familiar with the other input options but struggled with Selectbox. I would appreciate any suggestions.

HTML

   <tr ng-repeat="x in c.data.arr">
      
      <td>{{x.employee_number}}</td>
      <td>{{x.u_name}}</td>
      <td>{{x.departmentname}}</td>
      <td>{{x.division}}</td> 
      <td>{{x.enddate}}</td>
      <td><select id="manager_action" ng-model="x.manager_action" 
                  class="form-control" ng-change="c.changeAction({{x.employee_number}},x.manager_action)" 
             ng-options="y.name for y in c.data.actions"> 
        
        </select>  
      </td> 
      
    </tr>  
    

  </table>
 <button class="test" class="btn btn-primary btn-block" ng-click="c.selectAll()">Keep All</button>

Client script:


var c = this;
	
//alert(c.data.manager_action);

	c.data.actions=[{
   
		name:'Keep',
		value:'1'

	},
	{
		name:'Remove',
		value:'2'
		
	}]
	

	c.selectAll=function(rec)
	{
		
	}
	

please share your server script

Revathi Kotha
Tera Contributor
Here it is.

(function() {
	/* populate the 'data' object */
	/* e.g., data.table = $sp.getValue('table'); */
	//data.manager=$sp.getParameter('manager');
	
	
	if(input &&input.action)
		{
					
			data.empnum=input.number;
			data.act=input.action;
			
			console.log('Employeenumber: '+data.empnum+'  '+'Action:'+data.act);
			
			if(data.act=='1')
				{
					var cw=new GlideRecord('u_non_employee');
					cw.addQuery('u_number',data.empnum);
					cw.query();
					if(cw.next())
						{
							cw.u_cw_audit_action='Keep';
							cw.u_cw_audit=cw.u_cw_audit+'\n'+'Reason: Keep'+' Audit Date: '+gs.nowDateTime();
							
							cw.update();
						}
				}
		}
	
	
	
else
		{
			data.manager='5a1d6d069750f950d8adb9e3a253af34';
	
								
	var arr=[];
			
	var gr=new GlideRecord('u_non_employee');
	gr.addEncodedQuery('u_manager='+data.manager+'^u_in_active=N');
	gr.query();
	while(gr.next())
	{
		var obj={};


		obj.manager=gr.u_manager.toString();
		obj.managername=gr.u_manager.getDisplayValue();
		obj.employee_number=gr.u_number.toString();
		obj.u_requestor=gr.u_requestor.toString();
		obj.requestorname=gr.u_requestor.getDisplayValue();
		obj.department=gr.u_department.toString();
		obj.departmentname=gr.u_department.getDisplayValue();
		obj.division=gr.u_division.toString();
		obj.u_name=gr.u_name.toString();
		obj.enddate=gr.u_enddate_system_format.toString();		


		arr.push(obj);

	}

	data.arr=arr;
		}


})();

TFischer
Tera Expert

currently your click event on the button is calling this controller function, which I didn't see listed in your client script.

 

 ng-click="c.uiAction('remove')"

 

you need to add a function that is called, similar to c.changeAction. It looks like your removal is being handled through a removal with an embedded modal. I'm not sure what that embedded widget does. I would assume that logic takes a single employee number as a parameter. You'd just want to use that same logic in a loop or query containing all the ids.

Revathi Kotha
Tera Contributor

I updated the script. I have created a script called selectAll() in the client script and am trying to update each select box value to the 'Keep' option. Here, I need help to get the select box value.

HTML:

<form name="formName">
 

<div>

 <br/>
  
  
  
  <table border="1px solid black">
     
    <tr>
     
      <th>Employee Number</th>
      <th>Employee Name</th>
      <th>Department</th>
      <th>Division</th>
      <th>End Date</th>
      <th>Action</th>
      
    </tr>
    <tr ng-repeat="x in c.data.arr">
      
      <td>{{x.employee_number}}</td>
      <td>{{x.u_name}}</td>
      <td>{{x.departmentname}}</td>
      <td>{{x.division}}</td> 
      <td>{{x.enddate}}</td>
      <td><select id="manager_action" ng-model="x.manager_action" 
                  class="form-control" ng-change="c.changeAction({{x.employee_number}},x.manager_action)" 
             ng-options="y.name for y in c.data.actions"> 
        
        </select>  
      </td> 
      
    </tr>  
    

  </table>
 <button class="test" class="btn btn-primary btn-block" ng-click="c.selectAll('Keep')">Keep All</button>
       
  <br/>
  <br/>



Client script :

api.controller=function($scope,spModal) {
	/* widget controller */
	var c = this;
	
//alert(c.data.manager_action);

	c.data.actions=[{
   
		name:'Keep',
		value:'1'

	},
	{
		name:'Remove',
		value:'2'
		
	}]
	
	
	var selectedrecords=[];
	selectedrecords=c.data.arr;

	var employeenumbers=[];
	for(var j=0;j<selectedrecords.length;j++)
	{
		employeenumbers.push((selectedrecords[j].employee_number));
	}
	
	

	c.selectAll=function(action_keep)
	{
		alert()
		c.data.manager_action='keep';
		
	}
	
	
	

	c.changeAction=function(number,actiontaken)
	{

	//	alert(actiontaken);
		c.data.number=number;	
		c.data.action=actiontaken.value;
		$scope.page.g_form.setValue('audited_records',employeenumbers);

		if(number!='')
		{		

			if(actiontaken.value=='2')
			{

				spModal.open({
					title: 'Reason for deactivating CW',
					buttons:[],
					widget: 'cwdeactivation',
					widgetInput: {sys_id:number,action:'Remove'}

				}).then(function(response) {


				});

			}
			else if(actiontaken.value=='1')
			{

				c.server.update();
			}

		}


	}




};



Server script:

(function() {
	/* populate the 'data' object */
	/* e.g., data.table = $sp.getValue('table'); */
	//data.manager=$sp.getParameter('manager');
	
	
	if(input &&input.action)
		{
			//data.manageraction=input.manager_action
			
			data.empnum=input.number;
			data.act=input.action;
			
			console.log('Employeenumber: '+data.empnum+'  '+'Action:'+data.act);
			
			if(data.act=='1')
				{
					var cw=new GlideRecord('u_non_employee');
					cw.addQuery('u_number',data.empnum);
					cw.query();
					if(cw.next())
						{
							cw.u_cw_audit_action='Keep';
							cw.u_cw_audit=cw.u_cw_audit+'\n'+'Reason: Keep'+' Audit Date: '+gs.nowDateTime();
							
							cw.update();
						}
				}
		}
	
	
	
else
		{
			data.manager='5a1d6d069750f950d8adb9e3a253af34';
	
								
	var arr=[];
			
	var gr=new GlideRecord('u_non_employee');
	gr.addEncodedQuery('u_manager='+data.manager+'^u_in_active=N');
	gr.query();
	while(gr.next())
	{
		var obj={};


		obj.manager=gr.u_manager.toString();
		obj.managername=gr.u_manager.getDisplayValue();
		obj.employee_number=gr.u_number.toString();
		obj.u_requestor=gr.u_requestor.toString();
		obj.requestorname=gr.u_requestor.getDisplayValue();
		obj.department=gr.u_department.toString();
		obj.departmentname=gr.u_department.getDisplayValue();
		obj.division=gr.u_division.toString();
		obj.u_name=gr.u_name.toString();
		obj.enddate=gr.u_enddate_system_format.toString();		
    obj.manager_action = ""; 

		arr.push(obj);

	}

	data.arr=arr;
		}


})();