From fe4223edcd1992b86827774b1a3d98fb913f04fd Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Sat, 18 Oct 2025 16:32:11 +0530 Subject: [PATCH 1/7] Create Group Membership API --- Integration/Scripted REST Api/Group Membership API | 1 + 1 file changed, 1 insertion(+) create mode 100644 Integration/Scripted REST Api/Group Membership API diff --git a/Integration/Scripted REST Api/Group Membership API b/Integration/Scripted REST Api/Group Membership API new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/Integration/Scripted REST Api/Group Membership API @@ -0,0 +1 @@ + From 852246d529474814af154eda81195147590924fa Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Sat, 18 Oct 2025 16:32:47 +0530 Subject: [PATCH 2/7] Delete Integration/Scripted REST Api/Group Membership API --- Integration/Scripted REST Api/Group Membership API | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Integration/Scripted REST Api/Group Membership API diff --git a/Integration/Scripted REST Api/Group Membership API b/Integration/Scripted REST Api/Group Membership API deleted file mode 100644 index 8b13789179..0000000000 --- a/Integration/Scripted REST Api/Group Membership API +++ /dev/null @@ -1 +0,0 @@ - From 91069df26fea56d2062ac7a13f91b8e3740a5110 Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Sat, 18 Oct 2025 16:53:29 +0530 Subject: [PATCH 3/7] Create README.md --- .../Group Membership API/README.md | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Integration/Scripted REST Api/Group Membership API/README.md diff --git a/Integration/Scripted REST Api/Group Membership API/README.md b/Integration/Scripted REST Api/Group Membership API/README.md new file mode 100644 index 0000000000..e0591b695c --- /dev/null +++ b/Integration/Scripted REST Api/Group Membership API/README.md @@ -0,0 +1,72 @@ +# Group Membership API- Scripted REST API +## Overview +This API provides a simple, secure way to reterive all members of a specified user group in ServiceNow. It allows integrations, Service Portal widgets, or external systems to query group membership without giving direct access to user tables + +### API Details +- **API Name**: Group Membership API +- **API ID**: group_membership_api +- **ResourceName**: Members +- **Relative Path**: /members +- **HTTP Method**: GET +- **Query Parameter**: groupName (required) + +## Request Format + +### Example Request +GET https://.service-now.com/api/1819147/group_membership_api/members?groupName=Hardware + +### Example Response +```json +{ + { + "result": { + "groupName": "Hardware", + "totalMembers": 7, + "member": [ + { + "userName": "beth.anglin", + "displayName": "Beth Anglin", + "email": "beth.anglin@example.com", + "active": "true" + }, + { + "userName": "itil", + "displayName": "ITIL User", + "email": "itil@example.com", + "active": "true" + }, + { + "userName": "bow.ruggeri", + "displayName": "Bow Ruggeri", + "email": "bow.ruggeri@example.com", + "active": "true" + }, + { + "userName": "david.dan", + "displayName": "David Dan", + "email": "david.dan@example.com", + "active": "true" + }, + { + "userName": "david.loo", + "displayName": "David Loo", + "email": "david.loo@example.com", + "active": "true" + }, + { + "userName": "don.goodliffe", + "displayName": "Don Goodliffe", + "email": "don.goodliffe@example.com", + "active": "true" + }, + { + "userName": "fred.luddy", + "displayName": "Fred Luddy", + "email": "fred.luddy@example.com", + "active": "true" + } + ] + } +} + +} From 8cbd5574ea8df64639214b2058876948f9484e68 Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Sat, 18 Oct 2025 16:56:35 +0530 Subject: [PATCH 4/7] Create group_membership.js --- .../Group Membership API/group_membership.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Integration/Scripted REST Api/Group Membership API/group_membership.js diff --git a/Integration/Scripted REST Api/Group Membership API/group_membership.js b/Integration/Scripted REST Api/Group Membership API/group_membership.js new file mode 100644 index 0000000000..322e95caf7 --- /dev/null +++ b/Integration/Scripted REST Api/Group Membership API/group_membership.js @@ -0,0 +1,38 @@ +(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { + var groupName = request.queryParams.groupName; + var members = []; + if (!groupName) { + response.setStatus(400); + return { + error: "groupName query parameter is required" + }; + } + var grGrp = new GlideRecord('sys_user_group'); + grGrp.addQuery('name', groupName); + grGrp.query(); + if (!grGrp.next()) { + response.setStatus(400); + return { + error: "Group name doesn't found" + }; + } + var grGrpMem = new GlideRecord('sys_user_grmember'); + grGrpMem.addQuery("group.name", groupName); + grGrpMem.query(); + while (grGrpMem.next()) { + members.push({ + userName: grGrpMem.user.user_name.toString(), + displayName: grGrpMem.user.name.toString(), + email: grGrpMem.user.email.toString(), + active: grGrpMem.user.active.toString() + }); + } + return { + groupName: groupName.toString(), + totalMembers: members.length, + member: members + }; + + + +})(request, response); From 1ef7c1f67235b6bdd315e9f8c8160770f2797e92 Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Wed, 22 Oct 2025 15:29:33 +0530 Subject: [PATCH 5/7] Create README.md --- Integration/Scripted REST Api/Dynamic Record Finder/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Integration/Scripted REST Api/Dynamic Record Finder/README.md diff --git a/Integration/Scripted REST Api/Dynamic Record Finder/README.md b/Integration/Scripted REST Api/Dynamic Record Finder/README.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/Integration/Scripted REST Api/Dynamic Record Finder/README.md @@ -0,0 +1 @@ + From c3ec4169755e51779e323d200b4727da2ee75926 Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Wed, 22 Oct 2025 15:57:04 +0530 Subject: [PATCH 6/7] Update README.md --- .../Dynamic Record Finder/README.md | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/Integration/Scripted REST Api/Dynamic Record Finder/README.md b/Integration/Scripted REST Api/Dynamic Record Finder/README.md index 8b13789179..672a196753 100644 --- a/Integration/Scripted REST Api/Dynamic Record Finder/README.md +++ b/Integration/Scripted REST Api/Dynamic Record Finder/README.md @@ -1 +1,88 @@ +# Dynamic Record Finder - Scripted REST API +## Overview +The **Dynamic Record Finder** is a developer utility in ServiceNow that allows you to fetch records from any table dynamically using query parameters based on: +- Table name +- Selected fields +- Filters (encoded query) +All returned data is in JSON format. + +### API Details +- **API Name**: Dynamic Record Finder +- **API ID**: dynamic_record_finder +- **ResourceName**: find +- **Relative Path**: /find +- **HTTP Method**: GET +- **Query Parameter**: table,fields,query,limit + +## Request Format + +### Example Request +GET https:// instance.service-now.com/api/1819147/dynamic_record_finder/find?table=incident&fields=number%2Cshort_description&limit=20&query=category%3Dsoftware +### Example Response +```json +{ + "result": { + "table": [ + "incident" + ], + "fields": [ + "number", + "short_description" + ], + "status": [ + { + "number": "INC0000012", + "short_description": "Customer didn't receive eFax" + }, + { + "number": "INC0000034", + "short_description": "Does not look like a backup occurred last night" + }, + { + "number": "INC0000038", + "short_description": "my PDF docs are all locked from editing" + }, + { + "number": "INC0000006", + "short_description": "Hangs when trying to print VISIO document" + }, + { + "number": "INC0009004", + "short_description": "Defect tracking tool is down." + }, + { + "number": "INC0000015", + "short_description": "I can't launch my VPN client since the last software update" + }, + { + "number": "INC0000019", + "short_description": "Can't launch 64-bit Windows 7 virtual machine" + }, + { + "number": "INC0000027", + "short_description": "Please remove the latest hotfix from my PC" + }, + { + "number": "INC0000046", + "short_description": "Can't access SFA software" + }, + { + "number": "INC0000051", + "short_description": "Manager can't access SAP Controlling application" + }, + { + "number": "INC0000052", + "short_description": "SAP Financial Accounting application appears to be down" + }, + { + "number": "INC0000054", + "short_description": "SAP Materials Management is slow or there is an outage" + }, + { + "number": "INC0009005", + "short_description": "Email server is down." + } + ] + } +} From 60ee0f46775bcf7f7eae78d7ceaa90136a2dbb93 Mon Sep 17 00:00:00 2001 From: NayeemKaka Date: Wed, 22 Oct 2025 15:58:41 +0530 Subject: [PATCH 7/7] Create dynamic_record_finder.js --- .../dynamic_record_finder.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Integration/Scripted REST Api/Dynamic Record Finder/dynamic_record_finder.js diff --git a/Integration/Scripted REST Api/Dynamic Record Finder/dynamic_record_finder.js b/Integration/Scripted REST Api/Dynamic Record Finder/dynamic_record_finder.js new file mode 100644 index 0000000000..fc48df2ff3 --- /dev/null +++ b/Integration/Scripted REST Api/Dynamic Record Finder/dynamic_record_finder.js @@ -0,0 +1,35 @@ +(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { + +var table = request.queryParams.table || 'incident'; +var fieldsParam = request.queryParams.fields || 'number,short_description,priority'; +fieldsParam = fieldsParam.toString(); +var query = request.queryParams.query || ''; +var limit = parseInt(request.queryParams.limit || 50); +var fields = fieldsParam.split(','); +var gr = new GlideRecord(table); +if(query) + gr.addEncodedQuery(query); + var data =[]; + gr.setLimit(limit); + gr.query(); + while(gr.next() ){ + var record={}; + fields.forEach(function(f){ + if(gr.isValidField(f.trim())){ + record[f.trim()] = gr.getValue(f.trim()); + } + + }); + data.push(record); +} +response.setStatus(200); +response.setHeader('Content-Type', 'application/json'); + +var responseBody ={ + table: table, + fields: fields, + status: data +}; +response.setBody((responseBody)); + +})(request, response);