Skip to content

Instantly share code, notes, and snippets.

@wave-inguane
Last active October 18, 2024 13:41
Show Gist options
  • Save wave-inguane/5c5515c687c27eaf32dcb488851ddb57 to your computer and use it in GitHub Desktop.
Save wave-inguane/5c5515c687c27eaf32dcb488851ddb57 to your computer and use it in GitHub Desktop.
SERVER
//============================================================================================================================
// UPDATE LIST TYPE FIELD
//============================================================================================================================
(function executeRule(current, previous /*null when async*/ ) {
var eq = "stateNOT IN4,5,6^assignment_group="+current.group;
var grPolicyTask = new GlideRecord("x_g_dh6_usbp_pat_policy_task");
grPolicyTask.addEncodedQuery(eq);
grPolicyTask.query();
while (grPolicyTask.next()) {
var grOneDriveFile = new GlideRecord("x_g_dh6_usbp_pat_onedrive_file");
grOneDriveFile.addEncodedQuery("file_type=Policy Word Doc");
grOneDriveFile.addQuery("policy", grPolicyTask.policy);
grOneDriveFile.query();
while (grOneDriveFile.next()) {
var listArray = [];
//Get current contributors
if (grOneDriveFile.contributors != "")
listArray = grOneDriveFile.contributors.toString().split(",");
//Get group members
var grGroupMember = new GlideRecord("sys_user_grmember");
grGroupMember.addQuery("group", current.group);
grGroupMember.query();
while (grGroupMember.next()) {
var nextUser = grGroupMember.user.toString();
if (listArray.indexOf(nextUser) == -1) //if user not in the array
listArray.push(nextUser);
}
grOneDriveFile.setValue("contributors", listArray.join(","));
grOneDriveFile.update();
}
}
})(current, previous);
//...........................................................................................................................
// Reference qualifier Script Include
//...........................................................................................................................
var noBlankFieldUsers = Class.create();
noBlankFieldUsers.prototype = {
initialize: function() {
},
// Usage - Reference qualifier
// javascript: new global.noBlankFieldUsers().getUsers();
getEpaUsers: function() {
var grUser = new GlideRecord('sys_user');
grUser.addEncodedQuery("active=true^emailISNOTEMPTY^user_nameISNOTEMPTY^first_nameISNOTEMPTY");
grUser.query();
var userList;
while(grUser.next()) {
userList += ","+grUser.sys_id;
}
return 'sys_idIN'+userList;
},
type: 'noBlankFieldUsers'
};
//...........................................................................................................................
// These are two simple examples using GlideRecordSecure.
//...........................................................................................................................
var att = new GlideRecordSecure ('sys_attachment');
att. get('$[sys_attachment.sys_id]');
var sm = GlideSecurityManager.get();
var checkMe = 'record/sys_attachment/delete';
var canDelete = sm.hasRightsTo(checkMe,att);
gs. log('canDelete: ' + canDelete);
canDelete;
//...........................................................................................................................
//
//...........................................................................................................................
var grs = new GlideRecordSecure('task_ci');
grs.addQuery();
grs.query();
var count = grs. getRowCount();
if (count > 0 ) {
var allocation = parseInt(10000/count) / 100;
while (grs.next()) {
grs.u_allocation = allocation;
grs.update();
}
}
//...........................................................................................................................
//
//...........................................................................................................................
Table: content_block_programmatic
Name: Custom google search
Category: General
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<script>
function u_search() {
var newwindow = window.open("http://www.google.com/cse?cx=e6960d264296ca6ec&amp;q="+document.getElementById('u_search_text').value,'name','width=800,height=600,left=100,top=100,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=yes,location=no');
if (window.focus) { newwindow.focus() }
}
</script>
<div style="text-align: center">
<input id='u_search_text' type="text" value="GlideRecord" style="width:400px;" />
<button onclick='u_search(); return false'>Search</button>
</div>
</j:jelly>
//...........................................................................................................................
// Email script
//...........................................................................................................................
Invoke:
${mail_script:ng_activity_mention_body}
//*****************************************************************************************************************************
// Business Rules
//*****************************************************************************************************************************
/*
Usage: SN Agile Development Module
Name: LinkToStory
Table: sys_update_set
When: before - insert
Naming convention :AVI-STRY0013430-short_desc.v1
Script
*/
(function executeRule(current, previous /*null when async*/) {
if( current.u_story == ""){
var name = current.name+"";
var end = 0;
var start = 0;
if(name.indexOf("STRY") > 0){
start = name.indexOf("STRY");
end = start+11;
}
var number = name.substring(start, end);
var grSTORY = new GlideRecord("rm_story");
if (grSTORY.get("number",number)) {
current.u_story = grSTORY.sys_id;
}
}
})(current, previous);
//*****************************************************************************************************************************
// Workflow
//*****************************************************************************************************************************
/*
Workflow Activity: Wait for condition
Stage: Fulfillment (1 Day )
Text: Wait for all catalog tasks to be closed
Then next stage is
Activity: X= Set Values
Stage: Completed
Text: Complete
Set these values:
Stage = Closed Complete
Stage = Complete
*/
// Set the variable 'answer' to true or false to indicate if the condition has been met or not.
chkTask();
function chkTask() {
var c = 0;
var chk = 0;
var ctk = new GlideRecord('sc_task');
ctk.addQuery('request_item', current.sys_id);
ctk.query();
c = ctk.getRowCount();
while (ctk.next()) {
if (ctk.state >= "3") // Here we are checking, whether the state of task is closed, so "3" is closed complete, 4 is closed incomplete and 7 is closed skipped.
{
chk = chk + 1;
}
}
if (chk == c) {
answer = true;
}
}
//*****************************************************************************************************************************
// UI Actions
//*****************************************************************************************************************************
Name: Cancel Request
Table: Request[sc_request]
Order: 100
Action name: state_model_move_to_canceled
Active: true
Show update: true
Client: true
Form button: true
Form: context menu: true
Hint: Progresses request to closed cancelled state
Onclick: loadConfirmDialog();
Condition: current.request_state == 'requested' || current.request_state == 'in_process'
Script:
var changeConfirmCancelDialog;
function loadConfirmDialog() {
var dialogClass = window.GlideModal ? GlideModal : GlideDialogWindow;
changeConfirmCancelDialog = new dialogClass("change_confirm_cancel", false, 648, 250);
changeConfirmCancelDialog.setTitle(new GwtMessage().getMessage("Cancel Request"));
changeConfirmCancelDialog.render();
}
function moveToCancel(notes) {
var ga = new GlideAjax('CatalogRequestClientUtil');
ga.addParam('sysparm_name', 'cancelRequestAndRITM');
ga.addParam('sysparm_req', g_form.getUniqueValue());
ga.addParam('sysparm_notes', notes);
ga.getXML(function(resp) {
var result = JSON.parse(resp.responseXML.documentElement.getAttribute("answer"));
if (result.error == 0) {
var currentURL = window.parent.location.href;
window.parent.location.href = currentURL;
} else {
g_form.addErrorMessage('Unable to update Request ' + g_form.getValue('number'));
}
});
}
if (typeof window == 'undefined')
setRedirect();
function setRedirect() {
current.update();
var grRITM = new GlideRecord("sc_req_item");
if (grRITM.get("request", current.sys_id)) {
var grTASK = new GlideRecord('sc_task');
grTASK.addQuery('request_item',grRITM.sys_id);
grTASK.query();
while(grTASK.next()){
if(grTASK.state != 3 || grTASK.state != 7){
grTASK.state = 4;//'closed_incomplete';
grTASK.update();
}
}
var workflow = new Workflow();
workflow.cancel(grRITM);
}
action.setRedirectURL(current);
}
--------------------------------------CatalogRequestClientUtil--------------------------------------------
Script Include:
Name: CatalogRequestClientUtil
API Name: global.CatalogRequestClientUtil
Client callable: true
Active: true
Script:
var CatalogRequestClientUtil = Class.create();
CatalogRequestClientUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
cancelRequestAndRITM: function() {
var returnValue = {
error: 0
};
var request = this.getParameter('sysparm_req');
var notes = this.getParameter('sysparm_notes');
var reqGr = new GlideRecord("sc_request");
if (reqGr.get(request)) {
var requestNumber = reqGr.getValue('number');
reqGr.setValue("request_state", 'closed_incomplete');
reqGr.setValue("stage", 'closed_incomplete');
reqGr.work_notes = notes;
if (reqGr.update()) {
var ritmGr = new GlideRecord('sc_req_item');
ritmGr.addQuery('request', request);
ritmGr.query();
if (ritmGr.next()) {
ritmGr.setValue('stage', 'closed_incomplete');
ritmGr.setValue('state', 4);
ritmGr.work_notes = ('Notes from ' + requestNumber + ': ' + notes);
if (!ritmGr.update()) {
returnValue.error = 1;
}
} else {
returnValue.error = 1;
}
}
else {
returnValue.error = 1;
}
}
else {
returnValue.error = 1;
}
return JSON.stringify(returnValue);
},
type: 'CatalogRequestClientUtil'
});
//*****************************************************************************************************************************
// Other Integrations
//*****************************************************************************************************************************
BY Email:
https://community.servicenow.com/community?id=community_blog&sys_id=908c26e1dbd0dbc01dcaf3231f9619c4
https://community.servicenow.com/community?id=community_blog&sys_id=908c26e1dbd0dbc01dcaf3231f9619c4
//============================================================================================================================
// WORKNOTES WORK NOTES
//============================================================================================================================
//...................................................Embed a Link to Worknotes ..............................................
var gr = new GlideRecord('incident');
gr.get('5459b659af9916508b18f269a02749b0');
var url = '[code]<a href="' + gs.getProperty('glide.servlet.uri') + '/'+gr.getTableName() + '.do?sys_id=' + gr.sys_id + '" target="_blank">' + 'My Record' + '</a>[/code]';
gr.work_notes= url;
gr.update();
//Copy and paste to worknotes field
[code]<a href=https://helpdesk-dev.arl.army.mil/incident.do?sys_id=5459b659af9916508b18f269a02749b0>My Record</a>[/code]
/* END WORKNOTES WORK NOTES */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment