The Now Platform® Washington DC release is live. Watch now!

Help
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Hide widget on portal.

Kush Sharma
Mega Guru

Guys, We have one custom button (widget) in portal 

I want to hide this button when request is closed or active false. Below is the current script:

HTML :

<div>
<button type="button" ng-if="data.cat" ng-disabled="c.data.showCancel" class="btn btn-danger btn-lg btn-acceptRejectSolution" ng-click="c.uiAction('cancel')"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span>Cancel Request</button>
<div class="check-element animate-show-hide" ng-show="c.data.Visible"><b>Request cannot be cancelled if it’s already sent to SCCM for processing. Please uninstall the application if not required.</b></div>
<div class="check-element animate-show-hide" ng-show="c.data.Cancel"><b>Request is already cancelled.</b></div>

</div>

--------------------------------------------------

Server script:

(function() {

// Get table & sys_id
data.table = input.table || $sp.getParameter("table");
data.sys_id = input.sys_id || $sp.getParameter("sys_id");

// Valid GlideRecord
gr = new GlideRecord(data.table);
if (!gr.isValid())
return;

// Valid sys_id
if (!gr.get(data.sys_id))
return;
if (data.table != 'sc_req_item'){
return;
}else{
var res = new GlideRecord('u_add_device_collection_data');
res.addQuery('u_sccm_ritm_number',data.sys_id);
res.query();
if(res.next()){
data.res = res.u_response_code;
}else data.res = "1001";

// Button grayedout
var cat = new GlideRecord('sc_cat_item');
cat.addQuery('sys_id',gr.cat_item);
cat.addEncodedQuery("sc_catalogs=3f5528114f994f000e65c0f18110c7ef");
cat.query();
if(cat.next()){
data.item1 = true;
}else data.item1 = false;
data.cat = data.item1 ? true: false;
data.stage = gr.getValue('stage');

// data.showCancel = (data.item1 && data.stage == 'waiting_for_approval' || data.res == '100') ? false: true;
// data.item2 = (data.stage != 'Request Cancelled' && data.res != '400');
data.showCancel = (data.stage != 'Request Cancelled' && (data.res == '1001' || data.res == '100') ) ? false: true;

if (data.stage != 'Request Cancelled' && data.res != '100' && data.res != '1001') {
data.Visible = true;
}else if (data.stage == 'Request Cancelled'){
data.Cancel = true;
}
// else if (data.stage != 'Request Cancelled' && data.res == '1001'){
// data.Visible = false;
// }

if (input && input.action) {
var action = input.action;
// If request item table table
if (data.table == 'sc_req_item') {
var sys = data.sys_id;
if (action == 'cancel') {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('sys_id',sys.toString());
ritm.addQuery('active','true');
ritm.setLimit(1);
ritm.query();
if (ritm.next()){

//Cancel request and set active false
var req = new GlideRecord('sc_request');
req.get('sys_id',gr.request);

req.setValue('request_state', 'closed_cancelled');
req.setValue('stage', 'closed_incomplete');
req.setValue('approval', 'rejected');
req.setValue('active','false');
req.update();

var res1 = new GlideRecord('u_add_device_collection_data');
res1.addQuery('u_sccm_ritm_number',data.sys_id);
res1.query();
if(res1.next()){
res1.u_response_code='1700';
res1.update();
}


ritm.comments='Request is cancelled by '+gs.getUserDisplayName()+' for Application '+cat.name;

ritm.update();
}

}
}
}
}

})();

 

----------------------------------------------

Client :

function($scope, spUtil) {
var c = this;
spUtil.recordWatch($scope, $scope.data.table, "sys_id=" + $scope.data.sys_id);

c.uiAction = function(action) {
if(!confirm("Are you sure you want to cancel the request?")) {
return;
}
c.data.action = action;
c.server.update().then(function() {
c.data.action = undefined;
})
}
}

 

 

 

Please help

1 ACCEPTED SOLUTION

Mandeep Karan
Giga Guru

Hi Kush,

 

When I am trying the same code it is working for me. can you share some screenshots it will be easy to guide you

Here are some from my system:

active item:

in Portal:

 

Inactive Item:

in Portal:

 

The other line I updated is in HTML section

<div ng-if="data.cat" >
<button type="button" ng-disabled="c.data.showCancel" class="btn btn-danger btn-lg btn-acceptRejectSolution" ng-click="c.uiAction('cancel')"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span>Cancel Request</button>
<div class="check-element animate-show-hide" ng-show="c.data.Visible"><b>Request cannot be cancelled if it's already sent to SCCM for processing. Please uninstall the application if not required.</b></div>
<div class="check-element animate-show-hide" ng-show="c.data.Cancel"><b>Request is already cancelled.</b></div>

</div>

 

Here is Server Script again:

(function() {

// Get table & sys_id
data.table = input.table || $sp.getParameter("table");
data.sys_id = input.sys_id || $sp.getParameter("sys_id");

// Valid GlideRecord
gr = new GlideRecord(data.table);
if (!gr.isValid())
return;

// Valid sys_id
if (!gr.get(data.sys_id))
return;
if (data.table != 'sc_req_item'){
return;
}else{
var res = new GlideRecord('u_add_device_collection_data');
res.addQuery('u_sccm_ritm_number',data.sys_id);
res.query();
if(res.next()){
data.res = res.u_response_code;
}else data.res = "1001";

// Button grayedout
var cat = new GlideRecord('sc_cat_item');
cat.addQuery('sys_id',gr.cat_item);
cat.addEncodedQuery("sc_catalogs=3f5528114f994f000e65c0f18110c7ef");
cat.query();
if(cat.next()){
data.item1 = true;
}else data.item1 = false;

/** Added line of code here **/

if(gr.active){ //if request is active then proceed for next
data.cat = data.item1 ? true: false;

}else
data.cat = false;

/** Updated code ends here**/


data.stage = gr.getValue('stage');

// data.showCancel = (data.item1 && data.stage == 'waiting_for_approval' || data.res == '100') ? false: true;
// data.item2 = (data.stage != 'Request Cancelled' && data.res != '400');
data.showCancel = (data.stage != 'Request Cancelled' && (data.res == '1001' || data.res == '100') ) ? false: true;

if (data.stage != 'Request Cancelled' && data.res != '100' && data.res != '1001') {
data.Visible = true;
}else if (data.stage == 'Request Cancelled'){
data.Cancel = true;
}
// else if (data.stage != 'Request Cancelled' && data.res == '1001'){
// data.Visible = false;
// }

if (input && input.action) {
var action = input.action;
// If request item table table
if (data.table == 'sc_req_item') {
var sys = data.sys_id;
if (action == 'cancel') {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('sys_id',sys.toString());
ritm.addQuery('active','true');
ritm.setLimit(1);
ritm.query();
if (ritm.next()){

//Cancel request and set active false
var req = new GlideRecord('sc_request');
req.get('sys_id',gr.request);

req.setValue('request_state', 'closed_cancelled');
req.setValue('stage', 'closed_incomplete');
req.setValue('approval', 'rejected');
req.setValue('active',false);
req.update();

var res1 = new GlideRecord('u_add_device_collection_data');
res1.addQuery('u_sccm_ritm_number',data.sys_id);
res1.query();
if(res1.next()){
res1.u_response_code='1700';
res1.update();
}


ritm.comments='Request is cancelled by '+gs.getUserDisplayName()+' for Application '+cat.name;

ritm.update();
}

}
}
}
}

})();

 

Regards,

Mandeep

View solution in original post

7 REPLIES 7

Mandeep Karan
Giga Guru

Hi Kush,

 

When I am trying the same code it is working for me. can you share some screenshots it will be easy to guide you

Here are some from my system:

active item:

in Portal:

 

Inactive Item:

in Portal:

 

The other line I updated is in HTML section

<div ng-if="data.cat" >
<button type="button" ng-disabled="c.data.showCancel" class="btn btn-danger btn-lg btn-acceptRejectSolution" ng-click="c.uiAction('cancel')"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span>Cancel Request</button>
<div class="check-element animate-show-hide" ng-show="c.data.Visible"><b>Request cannot be cancelled if it's already sent to SCCM for processing. Please uninstall the application if not required.</b></div>
<div class="check-element animate-show-hide" ng-show="c.data.Cancel"><b>Request is already cancelled.</b></div>

</div>

 

Here is Server Script again:

(function() {

// Get table & sys_id
data.table = input.table || $sp.getParameter("table");
data.sys_id = input.sys_id || $sp.getParameter("sys_id");

// Valid GlideRecord
gr = new GlideRecord(data.table);
if (!gr.isValid())
return;

// Valid sys_id
if (!gr.get(data.sys_id))
return;
if (data.table != 'sc_req_item'){
return;
}else{
var res = new GlideRecord('u_add_device_collection_data');
res.addQuery('u_sccm_ritm_number',data.sys_id);
res.query();
if(res.next()){
data.res = res.u_response_code;
}else data.res = "1001";

// Button grayedout
var cat = new GlideRecord('sc_cat_item');
cat.addQuery('sys_id',gr.cat_item);
cat.addEncodedQuery("sc_catalogs=3f5528114f994f000e65c0f18110c7ef");
cat.query();
if(cat.next()){
data.item1 = true;
}else data.item1 = false;

/** Added line of code here **/

if(gr.active){ //if request is active then proceed for next
data.cat = data.item1 ? true: false;

}else
data.cat = false;

/** Updated code ends here**/


data.stage = gr.getValue('stage');

// data.showCancel = (data.item1 && data.stage == 'waiting_for_approval' || data.res == '100') ? false: true;
// data.item2 = (data.stage != 'Request Cancelled' && data.res != '400');
data.showCancel = (data.stage != 'Request Cancelled' && (data.res == '1001' || data.res == '100') ) ? false: true;

if (data.stage != 'Request Cancelled' && data.res != '100' && data.res != '1001') {
data.Visible = true;
}else if (data.stage == 'Request Cancelled'){
data.Cancel = true;
}
// else if (data.stage != 'Request Cancelled' && data.res == '1001'){
// data.Visible = false;
// }

if (input && input.action) {
var action = input.action;
// If request item table table
if (data.table == 'sc_req_item') {
var sys = data.sys_id;
if (action == 'cancel') {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('sys_id',sys.toString());
ritm.addQuery('active','true');
ritm.setLimit(1);
ritm.query();
if (ritm.next()){

//Cancel request and set active false
var req = new GlideRecord('sc_request');
req.get('sys_id',gr.request);

req.setValue('request_state', 'closed_cancelled');
req.setValue('stage', 'closed_incomplete');
req.setValue('approval', 'rejected');
req.setValue('active',false);
req.update();

var res1 = new GlideRecord('u_add_device_collection_data');
res1.addQuery('u_sccm_ritm_number',data.sys_id);
res1.query();
if(res1.next()){
res1.u_response_code='1700';
res1.update();
}


ritm.comments='Request is cancelled by '+gs.getUserDisplayName()+' for Application '+cat.name;

ritm.update();
}

}
}
}
}

})();

 

Regards,

Mandeep

 

 

I used the same code .. but still this is visible

This error is coming up on client controller

Hi Kush,

you can ignore the error in client controller section. 

Regarding this image:

 

This is something doubtful to me. i can see in filter section you typed "true" and RITMxxxxx active is false.

Can you double check if record is already inactive?

else, you use this update part of script based on state value

/** Added line of code here **/

if(gr.state != 3 && gr.state != 4 && gr.state != 7){ //if request is active then proceed for next
data.cat = data.item1 ? true: false;
}else
data.cat = false;

/** Updated code ends here**/

 

you can add all the states in && which is equivalent to closed or cancelled.

 

Regards,

Mandeep