Hi Shloke,

 

As per your suggestion, I have modified my like below. But still not working

#note: I have observed in my addInfoMessage Input.ID is not coming sys_id while querying in server side.

 

ANY MODIFICATIONS NEEDED?

 

HTML CODE

<table class='table'>
  <thead class="thead-dark">
    <caption style="color:Brown;"><b>Member details of the selected team</b></caption>
    <tr class="tm-header">
    <th scope="col">Team</th>
    <th scope ="col">Team Members</th>
      <th scope ="col">Email</th>
     <th scope="col"><button class="btn btn-primary" ng-click="c.openModal()">${Add user}</button></th>
  </tr>
  </thead>
  <tbody>
    <tr style="background-color:white; color:blue;" ng-repeat="teamDetails in c.data.member">
      <td>{{c.data.teamName}}</td>
      <td>{{teamDetails.name}}</td>
      <td>{{teamDetails.email}}</td>
      <td><button ng-click="c.confirmDelete($index)">Remove</button></td>
    </tr>
  </tbody>
</table>
 
<script type="text/ng-template" id="modalTemplate">
 <div class="panel panel-default">
 <div class="panel-heading">
 <h4 class="panel-title">Modal Window</h4>
   </div>
 <div class="panel-body wrapper-xl">
 <b>Name: </b><sn-record-picker id="user" field="user" table="'sys_user'" display-field="'user'" value-field="'sys_id'" search-fields="'user_id'" page-size="100" ></sn-record-picker>
 <br>
 <b>Team: </b><sn-record-picker id="team" field="team" table="'x_80859_teamcool4u_team'" display-field="'team'" value-field="'sys_id'" search-fields="'name'" page-size="100" ></sn-record-picker>

   </div>
 <div class="panel-footer text-right">
 <button type="button" ng-click="c.closeModal()">Add User</button>
 </div>
 </div>
</script>

 

CLient

 

function($uibModal,$scope,$rootScope,spModal,spUtil){
	var c =this;
	var userData = [];
	var team = '';
	$rootScope.$on('selectTeam', function(event,data){
c.server.get({
action:'getTeam',
teamID:$rootScope.teamID
}).then(function(r) {
		c.data.member = r.data.teamMembers;
		c.data.teamName = r.data.teamName;
		team = r.data.teamName;
	});
});

c.openModal = function(){
	c.modalInstance = $uibModal.open({
	templateUrl: 'modalTemplate',
		scope: $scope	
		});	
}
	
c.closeModal= function() {
	debugger;
	var user = $('#user').select2('val');
	var teamName = $('#team').select2('val');
	c.server.get({
		action: 'createRecord',
		selectTeam: teamName,
		userName: user
	}).then(function(r){
		$rootScope.$emit('createRecord',r.data);
	});
	c.modalInstance.close();
}
	
	//Delete record
	
c.confirmDelete = function(idx){
    c.server.get({
			action:'confirmDelete',
			ID:idx		
	}).then(function(response) {
//Process your response
c.data.retrivedList = response.data.incList;
alert("Received data from server" + c.data.schedList.toString());
});
}
}

 

Server Side

 

(function() {
  /* populate the 'data' object */
  /* e.g., data.table = $sp.getValue('table'); */
 data.teamMembers = [];
	data.teamName = '';
	data.teamsysID = '';
	data.UserSysID='';
	if(input){
		if(input && input.teamID){
			if(input.action == 'getTeam'){
				var teamSysID = input.teamID;
				//gs.addInfoMessage('teamSysID----'+teamSysID);
				data.teamsysID = teamSysID;
				var grteamcool4 = new GlideRecord('x_80859_teamcool4u_team');
				grteamcool4.addQuery('sys_id',teamSysID);
				grteamcool4.query();
				if(grteamcool4.next()){
					
					data.teamName = grteamcool4.getValue('name');
					//gs.addInfoMessage('teamName----'+grteamcool4.getValue('name'));
				}
				
				var grTeamID = new GlideRecord('x_80859_teamcool4u_m2m_users_teams');
				grTeamID.addQuery('team', teamSysID);
				grTeamID.query();
				while(grTeamID.next()){
					 var userID = grTeamID.getValue('user');
					var grUserDetails = new GlideRecord('sys_user');
					grUserDetails.addQuery('sys_id', userID);
					grUserDetails.query();
					
					if(grUserDetails.next()){
						var teamMembersObj = {};
						$sp.getRecordDisplayValues(teamMembersObj, grUserDetails, 'name,email');
						data.teamMembers.push(teamMembersObj);
						data.UserSysID=grTeamID.getValue('user');
						
					}
				}
			
			}		
		}	
	
if(input.action=='createRecord'){
	gs.info('Create Action triggered');
	
	var m2mTableForUserCreation = new GlideRecord('x_80859_teamcool4u_m2m_users_teams');
	m2mTableForUserCreation.initialize();
	m2mTableForUserCreation.team = input.selectTeam;
	m2mTableForUserCreation.user = input.userName;
	
	if(m2mTableForUserCreation.insert()){
		
		gs.addInfoMessage('User Added Successfully');
	}
	else{
		
		gs.error('Insert Failed');
	}
}

    


 if (input.action == 'confirmDelete'){
var gr = new GlideRecord('x_80859_teamcool4u_m2m_users_teams');
gr.addQuery('sys_id',input.ID);
	 gs.addInfoMessage('input id is---'+input.ID);
gr.query();
if(gr.next()){
	gr.deleteRecord();
}



}
	 
 }


		
	
	
	/*function validateNewUSer(teamSysId, userSysId){
			return false;
			if(!teamSysId || !userSysId)
				return false;
			
			return true;
		}*/
	
	})();

okay not an issue. We can debug this and get you to a solution. Pleas modify your HTMl as below:

HTML:

<table class='table'>
  <thead class="thead-dark">
    <caption style="color:Brown;"><b>Member details of the selected team</b></caption>
    <tr class="tm-header">
    <th scope="col">Team</th>
    <th scope ="col">Team Members</th>
      <th scope ="col">Email</th>
     <th scope="col"><button class="btn btn-primary" ng-click="c.openModal()">${Add user}</button></th>
  </tr>
  </thead>
  <tbody>
    <tr style="background-color:white; color:blue;" ng-repeat="teamDetails in c.data.member">
      <td>{{c.data.teamName}}</td>
      <td>{{teamDetails.name}}</td>
      <td>{{teamDetails.email}}</td>
      <td><button id ={{r.data.teamsysID}} ng-click="confirmDelete(teamDetails.sys_id)">Remove</button></td>
    </tr>
  </tbody>
</table>
 
<script>
 <div class="panel panel-default">
 <div class="panel-heading">
 <h4 class="panel-title">Modal Window</h4>
   </div>
 <div class="panel-body wrapper-xl">
 <b>Name: </b><sn-record-picker id="user" field="user" table="'sys_user'" display-field="'user'" value-field="'sys_id'" search-fields="'user_id'" page-size="100" ></sn-record-picker>
 <br>
 <b>Team: </b><sn-record-picker id="team" field="team" table="'x_80859_teamcool4u_team'" display-field="'team'" value-field="'sys_id'" search-fields="'name'" page-size="100" ></sn-record-picker>

   </div>
 <div class="panel-footer text-right">
 <button type="button" ng-click="c.closeModal()">Add User</button>
 </div>
 </div>
</script>

 

Client Controller:

function($uibModal,$scope,$rootScope,spModal,spUtil){
	var c =this;
	var userData = [];
	var team = '';
	$rootScope.$on('selectTeam', function(event,data){
c.server.get({
action:'getTeam',
teamID:$rootScope.teamID
}).then(function(r) {
		c.data.member = r.data.teamMembers;
		c.data.teamName = r.data.teamName;
		team = r.data.teamName;
	});
});

c.openModal = function(){
	c.modalInstance = $uibModal.open({
	templateUrl: 'modalTemplate',
		scope: $scope	
		});	
}
	
c.closeModal= function() {
	debugger;
	var user = $('#user').select2('val');
	var teamName = $('#team').select2('val');
	c.server.get({
		action: 'createRecord',
		selectTeam: teamName,
		userName: user
	}).then(function(r){
		$rootScope.$emit('createRecord',r.data);
	});
	c.modalInstance.close();
}
	
	//Delete record
	
c.confirmDelete = function(id){
	alert('Value of ID is '+ id);
    c.server.get({
			action:'confirmDelete',
			ID:id		
	}).then(function(response) {
//Process your response
c.data.retrivedList = response.data.incList;
alert("Received data from server" + c.data.schedList.toString());
});
}
}

 

No change in Server is needed.

Also have put an alert in Client side as below:

Value of ID is

 

Check what is coming in this alert and let me know.

 

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

HI,

Kindly please find the below alert answer

find_real_file.png

HI Shloke,

 

Actually when ever we use teamDetails.sys_id as  aparameter. Below alert is coming

<td><button id ={{r.data.teamsysID}} ng-click="confirmDelete(teamDetails.sys_id)">Remove</button></td>

 

find_real_file.png

when ever we use $index as a parameter in our HTML then  below alert is coming

 

$index cannot be used here, reason being we need to know the id of the record here, so that when a user clicks on Remove button ServiceNow will know which record to query and then delete from the table you want.

Only thing pending here is to know the sys id of the record on which action is happening.

Only Change which you need to try is in Remove button by passing the correct record sys id.

Just Change the remove button line number 16 in your HTML as below:

<td><button id ={{data.teamsysID}} ng-click="confirmDelete(data.teamsysID)">Remove</button></td>

 No other change is needed in your widget and try now to see what is coming in alert messgae.

Also have modified to put one more alert in line number 13 , so please update your client controller as below and let me know what alert you are getting now after you click on Remove Button:

function($uibModal,$scope,$rootScope,spModal,spUtil){
	var c =this;
	var userData = [];
	var team = '';
	$rootScope.$on('selectTeam', function(event,data){
c.server.get({
action:'getTeam',
teamID:$rootScope.teamID
}).then(function(r) {
		c.data.member = r.data.teamMembers;
		c.data.teamName = r.data.teamName;
		team = r.data.teamName;
	alert('Value of CLient ID ' + r.data.teamsysID);
	});
});

c.openModal = function(){
	c.modalInstance = $uibModal.open({
	templateUrl: 'modalTemplate',
		scope: $scope	
		});	
}
	
c.closeModal= function() {
	debugger;
	var user = $('#user').select2('val');
	var teamName = $('#team').select2('val');
	c.server.get({
		action: 'createRecord',
		selectTeam: teamName,
		userName: user
	}).then(function(r){
		$rootScope.$emit('createRecord',r.data);
	});
	c.modalInstance.close();
}
	
	//Delete record
	
c.confirmDelete = function(idx){
    c.server.get({
			action:'confirmDelete',
			ID:idx		
	}).then(function(response) {
//Process your response
c.data.retrivedList = response.data.incList;
alert("Received data from server" + c.data.schedList.toString());
});
}
}

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke