You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+28-2
Original file line number
Diff line number
Diff line change
@@ -100,7 +100,7 @@ Variables should be used in Catalog Item or a Variable Set. Variables not in us
100
100
### Delete Orphaned Catalog Client Scripts
101
101
Catalog Client Script should be used in either a Catalog Item or a Variable Set. Catalog Client Scripts not in use should be deleted.
102
102
103
-
### Update set description should not be empty
103
+
### Delete Orphaned Catalog UI Policies
104
104
Catalog UI policy should be used in either a Catalog Item or a Variable Set. Catalog UI Policies not in use should be deleted.
105
105
106
106
### Client Script Business rule or Script Include should not have an empty description or be without comments in the script section
@@ -146,6 +146,8 @@ During the time it can be a situation that person is no longer active in the sys
146
146
### Unsupported API GlideLDAP
147
147
GlideLDAP API usage is unsupported by ServiceNow and hence should be avoided, rather use LDAP Server Data Sources to pull data from LDAP via MID Server or directly through an internet facing LDAP.
148
148
149
+
### Check for Orphaned Tickets
150
+
Tickets from tables such as Incident, Change Request, Problem, and other task-related tables should always have an Assignment Group specified. These tickets represent issues or requests that require attention and action. Leaving the Assignment Group field empty can result in unresolved issues or delays in implementing fixes, as no team will be accountable for the resolution. Since the Assignment Group is meant to designate the responsible team for managing these tickets, it should never be left blank.
149
151
150
152
## Category: Upgradability
151
153
@@ -161,6 +163,9 @@ Check if the Choice [sys_choice] table has been extended. This is not supported
161
163
### User table should not be extended
162
164
Check if the User [sys_user] table has been extended. This is not recommended and can cause problems when a user needs to be in more than one user table.
163
165
166
+
### Do not reference sys_choice table
167
+
The Choice table should not be used as the reference table for a Reference type field. Reference fields store the sys_id of the corresponding record in the reference table and show the specified display value. For example: the caller_id field stores the sys_id of a record from the user table and displays the corresponding name value. This presents a problem when using the sys_choice table, because existing records are deleted and replaced when choices are modified. This causes a new sys_id to be generated for each record in the choice list. So the sys_id stored in the Reference field is no longer a valid value and the reference is broken.
168
+
164
169
## Category: Performance
165
170
166
171
### getMessage() called in Client Script
@@ -229,9 +234,21 @@ Restrict the number of row counts ma x to 10,20,50 instead of higher limits such
229
234
Navigate to the user preference <sys_user_preference> table and search by 'rowcount'. Set the value to 50 max.
230
235
Also, can set the property 'glide.ui.per_page' sys property value to 10, 20, 50 only
231
236
232
-
### Instance scan check to identify slow jobs in transaction logs.
237
+
### Instance scan check to identify slow jobs in transaction logs.
233
238
The Instance Scan Check is a table check scan that allows administrators to investigate transaction logs in ServiceNow to diagnose performance issues reported by users. This check specifically identifies transactions with a **Response Time** greater than **120 seconds**, helping to uncover performance bottlenecks, understand user behavior, and track down issues within a specific time frame.
234
239
240
+
### Check System Property with 'Ignore cache' = False
241
+
Ignore Cache is a Glide Properties (records in the sys_properties table) field that impacts system performance.When it’s not handled carefully it can cause a system-wide cache flush leading to potentially severe performance degradation for anywhere from 5 to 30 minutes.
242
+
243
+
[Ignore cache = False: This will trigger a full cache flush, which might result in performance issues, slowness, and in some cases outage of 5 to 30 mins.]
244
+
245
+
Select the check box to ignore flushing some server-side caches, thus flushing only the cache for the sys_properties table and preserving the prior property value in all other caches. This option avoids the performance cost of flushing all caches and retrieving new property values. Unless you have some very good reason that the entire system cache needs to be flushed when a Property is changed.
246
+
247
+
[ Ignore cache = True: An update or insert of a system property will rebuild ONLY for that particular sys_property cache (yes, it is not a full ignore) ]
248
+
249
+
### Avoid using gs.sleep() in any server-side script
250
+
Avoid using gs.sleep() in any script because it does not release session and will cause delays, and add logs to the script whenever gs.sleep() has to be used.
251
+
235
252
## Category: Security
236
253
##Check Mandatory fields on incident
237
254
This check is used to find mandatory fields on incident
@@ -291,6 +308,12 @@ Use GlideRecordSecure API to ensure the security checks are performed and unauth
291
308
### For loop iterators "i" should be declared
292
309
In general, variables in JavaScript should be properly declared (e.g. using “var”). The declaration defines the scope of the variable, ensuring it's accessible only within the intended block. This prevents unintended variable pollution and conflicts. Especially in for loops, often an iterator “i” is used and not properly declared. For example “for (i=0; i<10; i++)” instead of “for (var i=0; i<10; i++)”. As a result, this could unintentionally alter the value of other 'i' iterators in different for loops.
293
310
311
+
### Don't show unpublished knowledge articles
312
+
Unpublished knowledge articles may contain sensitive information that should not be visible to anyone with read access. By preventing access to unpublished articles, reviewers are given the opportunity to verify the content before it is made accessible. This ensures that only properly reviewed and approved information is available to users with read access.
313
+
314
+
### Scripts in ACLs should be cleared when Advanced is not checked
315
+
Scripts in ACLs ARE executed regardless of whether or not the Advanced checked box is checked off. As such, unnecessary scripts should be cleared from the field OR the Advanced checkbox should be checked in cases where scripts are required to provide better visibility to admins for troubleshooting purposes.
316
+
294
317
## Category: User Experience
295
318
296
319
### Added a Number Prefix which already exists
@@ -310,6 +333,9 @@ It is recommended to use an OOB library for modals in order to improve the user
310
333
### Use "last run datetime" for JDBC data loads
311
334
In your JDBC data load configuration, ensure that the 'last run datetime' option is set to true and configure the target database field to serve as a timestamp, as this best practice enables incremental data loading and improves performance in data integration processes using JDBC.
312
335
336
+
### Use of setWorkflow(false) in business rules will cause unexpected issues
337
+
As setWorkflow(false) method will stop the execution of business rules on that particular GlideRecord object, this will result in unexpected behaviour where the execution of business rules skipped. Maintain caution while using this method and perform regression testing to avoid possible risk. It can have noticeable impact on Audit, Journal fields, notifications, SLA engine, workflow, flow engine etc.,
338
+
313
339
# Additional resources
314
340
315
341
Please check these additional links for more information and details:
<description>Unpublished knowledge articles may contain sensitive information that should not be visible to anyone with read access. By preventing access to unpublished articles, reviewers are given the opportunity to verify the content before it is made accessible. This ensures that only properly reviewed and approved information is available to users with read access.</description>
<description>As setWorkflow(false) method will stop the execution of business rules on that particular GlideRecord object, this will result in unexpected behaviour where the execution of business rules skipped. Maintain caution while using this method and perform regression testing to avoid possible risk. It can have noticeable impact on Audit, Journal fields, notifications, SLA engine, workflow, flow engine etc.,</description>
<name>Limit use of setWorkflow(false) in business rules</name>
13
+
<priority>2</priority>
14
+
<resolution_details>Based on the scenario or use case, think of alternative approach instead of using setWorkflow(false) especially in business rules. Reaserch about the system property trigger_engine.ignore.set_workflow</resolution_details>
15
+
<run_condition/>
16
+
<score_max>100</score_max>
17
+
<score_min>0</score_min>
18
+
<score_scale>1</score_scale>
19
+
<script><![CDATA[(function (engine) {
20
+
21
+
// Add your code here
22
+
23
+
})(engine);]]></script>
24
+
<short_description>Use of setWorkflow(false) in business rules will cause unexpected issues</short_description>
<description>Ignore Cache is a Glide Properties (records in the sys_properties table) field that impacts system performance.When it’s not handled carefully it can cause a system-wide cache flush leading to potentially severe performance degradation for anywhere from 5 to 30 minutes. In some very rare cases, the cache flush can even bring nodes down hard enough that the load balancer takes them offline, thus resulting in temporary session imbalance and causing hours of impact.
10
+
11
+
[Ignore cache = False: This will trigger a full cache flush, which might result in performance issues, slowness, and in some cases outage of 5 to 30 mins.]</description>
12
+
<documentation_url/>
13
+
<finding_type>scan_finding</finding_type>
14
+
<name>Ignore Cache - System Property</name>
15
+
<priority>2</priority>
16
+
<resolution_details>Select the check box to ignore flushing some server-side caches, thus flushing only the cache for the sys_properties table and preserving the prior property value in all other caches. This option avoids the performance cost of flushing all caches and retrieving new property values. Unless you have some very good reason that the entire system cache needs to be flushed when a Property is changed
17
+
18
+
Typically, you should only select the check box and enable ignoring the cache when you have a system property that changes more frequently than once a month.
19
+
20
+
[ Ignore cache = True: An update or insert of a system property will rebuild ONLY for that particular sys_property cache (yes, it is not a full ignore) ]</resolution_details>
21
+
<run_condition/>
22
+
<score_max>100</score_max>
23
+
<score_min>0</score_min>
24
+
<score_scale>1</score_scale>
25
+
<script><![CDATA[(function (engine) {
26
+
27
+
// Add your code here
28
+
29
+
})(engine);]]></script>
30
+
<short_description>Check System Properties as 'Ignroecache' = False </short_description>
0 commit comments