Posts

Count Number of Days

SI Function:  daysToDueDate: function(incident) {          var totalDuration;           var now = new GlideDateTime().getLocalDate();       if (!incident.dueDate.nil()) {               var dueDate = new GlideDateTime(incident.duedate).getDate();               totalDuration = new GlideDateTime.subtract(now, dueDate);               var numberofDays = parseInt(totalDuration.getNumericValue() / 86400000);               }     return nubmerOfDays; },                                             

How to Get a list field values as comma seperated

SI Function:   inAListFied: function(incident) {     var userID = gs.getUserID();     var watchList = incident.getValue('watchlist');     if (watchList) {          var arrIncident = watchList.split(",");          var ListValues = (arrIncident.indexOf(userID) >= 0);       }     return ListValues; },

Core Concepts of Inbound REST API

Use the REST API Explorer to create and test inbound ServiceNow API requests. Path parameters are part of the endpoint URL.  Query parameters determine which records, which data, and the data format returned in the response body. The HTTP status code indicates the status of the transaction request and does not indicate any information about the returned data. The response body format is set in the headers. The REST API Explorer tests requests as the currently logged in user. The  Allow access to this table via web services  option cannot be tested in the REST API Explorer. Do not use the admin user in code integrations, create a web services only user instead. Disable web service access to tables with sensitive data unless web service access is required CORS rules add security to APIs CORS rules determine which cross-origin resources can access which methods.  CORS rules cannot be tested in the REST API Explorer.  Code samples provide script stubs for integratin...

Client Script - Why GlideAjax(with getXMLAnswer) ?

Image
The table is a good visualization of Simplicity versus Efficiency. API Simplicity Efficiency Description GlideRecord getReference 1st 5th - 1 line of code - Poor UX (blocks browser) - Returns entire record  GlideRecord 2nd 4rd - ~ 5 lines of code - Poor UX (blocks browser) - Returns entire record GlideRecord getReference (with callback) 3rd 3rd - 5-10 lines of code (with callback) - Best UX (does not block browser) - Returns entire record GlideRecord (with callback) 4th 2nd - ~ 10 lines of code (with callback) - Best UX (does not block browser) - Returns entire record GlideAjax 5th 1st - ~20 lines of code (Client Script + Script Include) - Best UX (does not block browser) - Returns only the data you need Note: Actually I would change "GlideAjax" into "GlideAjax (with getXMLAnswer)". GlideAjax with getXML still would return a whole document. While GlideAjax with getXMLAnswer would only return the exact answer you need. Read about this in one of my previous articles G...

LDAP Integration

  An LDAP integration allows your instance to use your existing LDAP server as the main source of user data. STEP1: Define LDAP Server Option1: LDAP Server with MID Server This is the most common method as it is the easiest to configure and doesn’t require much effort from a company AD admin. You’ll need to setup a  midserver  to use this method. Please note that you can’t authenticate (login) using this method and you can’t use a SSL connection. For authentication, an  SSO connection  is often configured. So you use the LDAP Integration to pull in users/groups and SSO to authenticate (login). Option2: LDAP Server with VPN For this method, you need to ask ServiceNow for a VPN Request though HI Support. This method isn’t that preferred is that you are relying on the ServiceNow VPN to work and other maintenance concerns. Option3: External IP Address For this method, you expose an external IP Address to ServiceNow. Option4: LDAPS with PKI Certificate Most companies...

BR- Send email to Removed users in watchList

 var watchListArray = []; var oldWatchList = previous.u_watchlist.split(','); var newWatchList = current.u_watchlist.split(','); for (var i = 0; i < oldWatchList.length; i++) {   if (newWatchList.join(',').indexOf(oldWatchList[i]<0)){     watchListArray.push(oldWatchList[i].toString());   } }   gs.eventQueue("event_name",current, watchListArray.toString()); }

WebServices Inbound Integration

Inbound means that other applications make calls to ServiceNow's REST API to get information from SN ,   basically when some other tool hits your instance(wsdl) with a payload and you process it and acknowledge it. EG, if an incident gets created in a third party tool then an incident gets created in a service now . Here we accept the request and process it. - Direct Web Services - Web Service Import Sets -Direct Web Service API : Servicenow by default creates a webservice api for every table in the system, if you create a custom table system will provide SOAP and REST api to perform CURD operations. - Web Service Import Sets Staging web-service/Web Service Import Sets: this staging allow third party to send data to import table and then we do transform map by qualifying the data to send into the Servicenow.

Types of Business Rules in SNOW

BEFORE : Use before insert/update business rule to do some validation and if validation fails stop form submission Use before insert/update business rule to set values for current record based on some other fields on the form such as calculated field AFTER : Use after insert/update business rule to insert/update data in related list table Use to update information on related objects that need to be displayed immediately, such as GlideRecord queries. ASYNC: Use to update information on related objects that do not need to be displayed immediately, such as calculating metrics and SLAs. Mostly used to call 3rd party SOAP or REST endpoints DISPLAY : Mostly used to send field value from server side to client side; for the fields which are not available on the form, this value can be used in onload, onchange, onsubmit client scripts

ACL Execution

1) incident.None --> if user satisfies this ACL, then he will have access to the table and all the fields provide there are no field level acls like incident.* or incident.<field_name> 2) incident.None & incident.caller --> User should satisfy both the ACLs in order to have access to caller field, but rest of the fields can be accessed if user satisfies incident.None acl. 3) incident.None & incident.*-->User should satisfy both the ACLs in order to have access to all the fields 4) incident.*--> this is a field level acl. So user still needs to satisfy the table level acl incident.none in order to access the table and fields. 5) incident.* & incident.caller --> User still needs to satisfy incident.none acl and incident.* acls to access all the fields except caller. For caller user needs to satisfy both the incident.none and incident.caller acl. 6) incident.None & incident.* and incident.caller --> User still needs to satisfy inciden...

Setup OAuth2 authentication for RESTMessageV2 integrations

Image
1. Configure OAuth provider on instance 1 (OAuth Application Registry -> Create an OAuth API endpoint for external clients) Create unique provider profile name. We need to generate client ID along with Client Secret. Both can be generated by system normally. Token lifespan are optional, generated by default system policy. 2. Configure OAuth consumer on instance 2 (OAuth Application Registry -> Connect to a third party OAuth Provider) Create unique consumer profile name. (very important, script will need pass in this consumer profile name as parameter) Client ID and Client secret are the values were generated from step 1. Grant type. Value can be either "password" or "refresh_token". Suggest to use password since you won't have refresh_token info initially. This refresh_token only will be generated during first time when access token is generated. Token URL will be provided by OAuth provider. In this example, it would be the  https://oauth_...