General guidelines for scripting
Summarize
Summary of General guidelines for scripting
This guide provides essential best practices for writing efficient, maintainable, and reliable scripts in the ServiceNow CPQ environment using a JavaScript-like language. Following these guidelines helps enhance code readability, performance, and maintainability, which are critical for effective CPQ customization and automation.
Show less
Key Guidelines
- Place declarations at the top: Declare all variables and functions at the beginning of scripts to improve readability and avoid hoisting issues.
- Comment thoughtfully: Use comments to clarify complex logic or assumptions but avoid redundant, obvious comments.
- Indent brackets properly: Maintain consistent indentation for better visual structure, especially in nested code blocks.
- Use descriptive and consistent variable names: Choose meaningful names that describe purpose and follow a consistent naming convention, preferably camelCase, which aligns with CPQ field names.
- Avoid the
newkeyword: Instead of usingnewfor objects, strings, numbers, booleans, arrays, or maps, use literal notation to prevent resource overuse and unexpected behavior. - Avoid loose equality (
==): Always use strict equality (===) to prevent unpredictable type coercion in comparisons. - Use
constandletappropriately: Declare variables that will not be reassigned withconst, and those that will change withlet. Avoid usingvar, as it is outdated. - Minimize table lookups: Reduce the number of table queries by retrieving necessary data once and storing it in variables to improve performance.
Practical Impact for ServiceNow Customers
By applying these scripting standards, customers can create CPQ scripts that are easier to read, debug, and maintain over time. Efficient use of variables and minimization of table lookups enhances script execution speed, improving overall CPQ system performance. Adhering to consistent naming and commenting practices simplifies collaboration and future development efforts within your teams.
Write efficient scripts using a JavaScript-like language. Follow these general guidelines for naming, variables, and table access.
This guide will walk you through the general guidelines for writing efficient and reliable scripts in CPQ using a JavaScript-like language. Following these guidelines will help you create maintainable, readable, and well-performing code.
Quick summary
- Place declarations at the top
- Comment thoughtfully
- Indent brackets
- Use descriptive variable names
- Name variables consistently
- Avoid "new"
- Avoid loose equality ("==")
- Use "const" before "let" and "let" over "var"
- Minimize table lookups
Place declarations at the top
Placing variable and function declarations at the top of your script improves readability and prevents unexpected variable hoisting issues.
1 // Declare and initiate at the beginning
2 let firstName = "";
3 let lastName = "";
4 let price = 0;
5 let discount = 0;
6 let fullPrice = 0,
7 const myArray = [];
8 const myMap= {};
Comment thoughtfully
Use comments to explain complex logic, assumptions, or any non-obvious behavior in your code. Avoid redundant comments that merely repeat the code.
Indent brackets
1 // Good
2 if (condition) {
3 // ...
4 if (nestedCondition) {
5 // ...
6 }
7 }
8
9 // Bad
10 if (condition) {
11 // ...
12 if (nestedCondition) {
13 // ...
14 }
15 }Use descriptive variable names
Choose names that are meaningful and describe the purpose of the variable or function. This makes your code self- documenting and easier for others to understand.
1 //Good
2 let quoteId = cfgRequest.partner.quote.id.value;
3 let lineID = cfgRequest.partner.quote.lineId.value;
4 let currencyISO = cfgRequest.partner.quote.currencyIsoCode.value;
5 let priceBookID = cfgRequest.partner.quote.pricebookId.value;
6
7 if (quoteId != null) {
8 cfgRequest.quoteIDTest.set("value", quoteId);
9 }
10
11 if (lineID != null) {
12 cfgRequest.lineIDTest.set("value", lineID);
13 }
14
15 if (currencyISO != null) {
16 cfgRequest.currencyISOCodeTest.set("value", currencyISO);
17 }
18
19 if (priceBookID != null) {
20 cfgRequest.pricebookIDTest.set("value", priceBookID);
21 }
22
23 //Bad
24 let x1= cfgRequest.partner.quote.id.value;
25 let x2= cfgRequest.partner.quote.lineId.value;
26 let x3= cfgRequest.partner.quote.currencyIsoCode.value;
27 let x4= cfgRequest.partner.quote.pricebookId.value;
28
29 if (x1 != null) {
30 cfgRequest.quoteIDTest.set("value", x1);
31 }
32
33 if (x2 != null) {
34 cfgRequest.lineIDTest.set("value", x2);
35 }
36
37 if (x3 != null) {
38 cfgRequest.currencyISOCodeTest.set("value", x3);
39 }
40
41 if (x4 != null) {
42 cfgRequest.pricebookIDTest.set("value", x4);
43 }
Name variables consistently
Consistent naming conventions enhance code readability and maintainability. Choose either camelCase or snake_case and stick to it. CPQ field variable names use camelCase, so most organizations stay with this convention for readability.
1 // camelCase
2 let firstName = "JohnDoe";
3
4 // snake_case
5 let last_name = "Smith";
Avoid the "new" keyword
Using the new keyword can use more resources, lead to memory leaks, and cause unintended behaviors. Instead, use the literal notation for object creation if possible.
- Use
" "instead ofnew String( ) - Use
( )instead ofnew Number( ) - Use
falseinstead ofnew Boolean( ) - Use
{ }instead ofnew Map( ) - Use
[ ]instead ofnew Array( )
Avoid loose equality ("==")
The loose equality operator can lead to unexpected type coercion. For accurate comparisons, use the strict equality operator (===).
1 // Good
2 if (count === 5) {
3 // ...
4 }
5
6 // Bad
7 if (count == "5") {
8 // ...
9 }
Use "const" before "let" and "let" over "var"
Choose variable declaration based on scope and mutability requirements. Use const for variables that won't be reassigned and let for variables that will change. var is also acceptable
but is a holdover from previous versions of JavaScript.
1 // Using const for unchanging values
2 const TAX_RATE = 0.15;
3
4 // Using let for mutable values
5 let itemCount = 5;
Minimize table lookups
Excessive table queries can impact performance. Minimize queries by fetching necessary data once and storing it in variables.
To learn about general guideliines for using the lookup function, see Minimizing table queries.