Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Uncle Rob
Kilo Patron

After 20some years in tech, I am officially & unexpectedly a "real dev".  Here are some concepts I either learned or learned more thoroughly in my first 90 days.

 

✍️ GET A CLUE (Comment Like Users Exist) ✍️

- Learn JSDoc. Yes "real devs" argue about this. Yes I'll catchπŸ”₯for suggesting it... but its πŸ’―% better than what 90% of us were taught.

This video is a great introduction to JSDoc

/* AN EXAMPLE OF JSDOC USAGE FOR A FUNCTION WITHIN A SCRIPT INCLUDE */

/**
* Constrcuts an anchor tagged URL
* @param {GlideRecord} recordGR - GlideRecord of the record we want to link to.  Use this to get the table name and sys_id.
* @param {string} text - anchor text for URL
* @returns - a clickable hyperlink with URL embedded in the text parameter.
*/
_buildLink: function(recordGR, text) {
   var table = recordGR.getTableName();
   var baseURL = gs.getProperty('glide.servlet.uri') + table + ".do?sys_id=" + recordGR.sys_id;
   var textEmbeddedURL = '<a href="' + baseURL + '" target="blank">' + text + '</a>';
   return textEmbeddedURL;
}

πŸ˜• THINK FAB (Front And Back) πŸ˜•

Team: "What if someone changes that to something unexpected?"

Me: "They can't, the client won't let them."

Team:  "But what if it changes from the server side?"

- Learn how to harden things from both client and server side. If a human can do it, so can a script. If a human can't do it, a script still can. Assume it can happen.

 

πŸ‘‚MESSAGES SHOULDN'T BE HARD (Hardcoded And Really Dumb) πŸ‘‚

- You either work on a multi-language instance or WILL at some point.

- Even if you don't leverage multi-language, making a separate sys_ui_message record de-risks future development.  Now if you need to change the message, you aren't changing the code that fires it!

- sys_ui_message / gs.getMessage() allow message translation into other languages. sys_ui_message stores the language versions. getMessage figures out which one to use.

- Learn to parameterize your messages: "{0} was closed by {1}" can be called with gs.getMessage("messageKey", [inc.number, inc.closed_by]);

/*  TRY IT YOURSELF!
- Create a sys_ui_message called "myFirstMessage".  Use whatever language is local to you.
- Make hte message body "{0} is priority {1}"
- Run the following code in Background scripts
- How many parameters can you have?   I tried one with 20, so PLENTY!
*/

var incGR = new GlideRecord('incident');
incGR.setLimit(1);
incGR.query();
while (incGR.next()){
   gs.info(gs.getMessage("myFirstMessage", [incGR.number, incGR.priority]));
}

 

πŸ’© CRAP! - CATASTROPHIC RESULTS *ALWAYS* POSSIBLE πŸ’©

Them: "But what happens if this doesn't return anything?"
Me:  "It should return something."
Them:  "But what if it doesn't?"

- Learn how to use try/catch to either keep processing gracefully, OR send important messages to troubleshooters.
- A truly excellent article article demonstrating this by @Trey Carroll 

 

🧠 DON'T BE LAME (Logic And Methods Everywhere)

- 2x true for those maximizing Flow Designer / Playbooks. Sometimes you NEED code. Think about *where* best to execute it.

- Learn to use Script Includes and treat them like function libraries. "My flow needs code to generate a complex work_note" -> Put that logic in a Script Include function and call it from flow.

- Every function you desire, imagine how it might be re-used.

 

WANT MORE HELP BUILDING ON SERVICENOW?

▢️ Robert "The Duke" Fedoruk on YouTube
πŸŽ™οΈ CJ & The Duke podcast

2 Comments