- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-12-2016 07:50 AM
Given a sys_id, how do we find to which record the sys_id belongs to?
Solved! Go to Solution.
- Labels:
-
Upgrades and Patches

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-12-2016 08:04 AM
You COULD write a script that goes through sys_db_object and checks each table to see if it can find the record. With over 2,000 tables in a default Helsinki instance, this could take a while. The *untested* script might look something like this:
var mySysId = 'xxxxxxxxxxxxxxxxxxxxx'; // put in your sys_id here
var table = new GlideRecord('sys_db_object');
table.query();
while (table.next()) {
var gr = new GlideRecord(table.getValue('name'));
if (gr.get(mySysId)) {
gs.log('it looks like it came from ' + gr.getValue('label'));
break;
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-11-2020 11:31 AM
Not sure if I have done right but I always received below error whenever I ran it using “Scripts – Background” trying to find a record given its sys_id
*** Script: it looks like it came from null
var mySysId = '61aa0e5567012300b270c3105685ef19'; // put in your sys_id here
var table = new GlideRecord('sys_db_object');
table.query();
while (table.next()) {
var gr = new GlideRecord(table.getValue('name'));
if (gr.get(mySysId)) {
gs.log('it looks like it came from ' + gr.getValue('label'));
break;
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-10-2022 06:45 AM
From time to time the solution needs a face-lift.
New tables appear in the platform and additional exceptions should be added.
The DevTools app contains powerful tools and a code library for ServiceNow developers.
One of them is the GetTableFromSysId() function. Check it out here:
It excludes a number of tables from the search and searches a number of tables first, where I believe the likelihood of a match is higher - which makes it faster in many cases than many other proposed solutions.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-13-2023 05:04 AM - edited 07-13-2023 05:06 AM
var mySysId = 'zzzzzz'; // put in your sys_id here
var table = new GlideRecord('sys_db_object');
table.query();
while (table.next()) {
if (table.getValue('name')) {
gs.debug("Table:" + table.getValue('name'));
var label = table.getValue('label');
if ((label != "label") && (!label.startsWith("Text index")) && (table.getValue('name'))) {
var target = new GlideRecord(table.getValue('name'));
try {
target.addQuery("sys_id", mySysId);
target.query();
while (target.next()) {
gs.debug('It looks like it came from table: ' + target.getValue('name'));
}
} catch (e) {}
}
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-13-2023 05:15 AM
I really recommend to look into THIS solution here:
1. It is faster
2. It ignores irrelevant tables
3. It looks into a set of tables first because it is more likely that a user searches for a sys_id from these tables (based on experience with a huge developer community and their feedback) - like "task" or "sys_metadata"
4. It ignores all tables that are extended from another table
5. It works across scope boundaries
😉
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-14-2023 01:41 AM - edited 07-14-2023 01:44 AM
When I tried it as a Fix Script, it threw an exception, below.
Evaluator: com.glide.script.RhinoEcmaError: "IsValidSysId" is not defined.
script : Line(12) column(0)
9: if (strSysId == 'global') {
10: return 'sys_dictionary';
11: }
==> 12: if (IsValidSysId(strSysId) == false) {
Commenting out the part led to another exception,
FastLock Swapped DBI since we were opening a second lock (RollbackContextState:457c6c191bc47114309bfb25464bcb72) on same connection
Completed: Service Mapping Recomputation 1.3dfce1201b132110309bfb25464bcb51 in 0:00:00.004, next occurrence is 14-07-2023 09:43:14, sys_created_on: 2023-06-04 22:42:28, trigger_type: 1 (Repeat), priority: 150, run_time: , repeat: 1970-01-01 00:00:05, previous next_action time: 2023-07-14 08:43:09.000 UTC, current next_action time: 2023-07-14 08:43:14.000 UTC, max_drift: null, queued on: 2023-07-14 08:43:09.062 UTC, execution time millis: 4, actual start time: 2023-07-14 08:43:09.102 UTC, actual end time: 2023-07-14 08:43:09.106 UTC
Evaluator: com.glide.script.RhinoEcmaError: "GetRecord" is not defined.
script : Line(32) column(0)
29: ];
30:
31: for (var nTable = 0; nTable < aPriorityTables.length; nTable++) {
==> 32: var grRecord = GetRecord(aPriorityTables[nTable], strSysId, true);
33: if (grRecord != false) {
34: return GetStringValue(grRecord.getRecordClassName());
35: }
[0:00:00.027] Total Time