From f9ccfa52a996da8e58e219fe08768161556c68de Mon Sep 17 00:00:00 2001
From: Nilesh Wahule <77268537+Its-Nmk@users.noreply.github.com>
Date: Tue, 21 Oct 2025 20:22:03 +0530
Subject: [PATCH 1/5] Create README for User Impersonation Activity Logger
Added README for User Impersonation Activity Logger, detailing its functionality, usage instructions, prerequisites, and dependencies.
---
.../README.md | 75 +++++++++++++++++++
1 file changed, 75 insertions(+)
create mode 100644 Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
diff --git a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
new file mode 100644
index 0000000000..0daad12360
--- /dev/null
+++ b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
@@ -0,0 +1,75 @@
+# User Impersonation Activity Logger
+
+A ServiceNow server-side utility that automatically creates a log when an action is performed under impersonation, helping distinguish between admin-added and user-added notes.
+
+# Challenge
+
+The challenge lies in distinguishing between actions performed by administrators impersonating users and those performed by the users themselves. Without a reliable way to track impersonation activity, it becomes difficult to ensure transparency and accountability in ticket histories. This lack of clarity can lead to confusion during audits, misinterpretation of updates, and potential compliance risks. Addressing this issue is critical to maintaining trust and operational efficiency.
+
+## Description
+
+This script identifies if the current user session is under impersonation (e.g., an admin impersonating another user).
+If true, it automatically appends a message in the **Logs** indicating that the note was added during impersonation.
+This improves auditability and clarity when reviewing ticket histories.
+
+## Functionality
+
+The User Impersonation Activity Logger provides the following capabilities:
+- Detects if the current user is impersonating another user
+- Automatically appends a log message stating the impersonation context
+- Works in **Business Rule** and Global Scoped Tables
+- Logs both actual user and impersonated user details
+- Provides clear distinction for audit and tracking
+
+## Usage Instructions
+
+### Add as Business Rule
+
+```javascript
+// When: before update
+// Table: incident
+// Script:
+(function executeRule(current, previous /*null when async*/) {
+ if (new GlideImpersonate().isImpersonating()) { // Check if the user is impersonating
+ if (current.comments.changes() || current.work_notes.changes()) { // Check if comments or work notes have changed
+ let actualUserName = gs.getImpersonatingUserDisplayName();
+ let impersonatedUserName = gs.getUserDisplayName();
+ let logMessage = `User Impersonation Activity Detected:
+ Timestamp : ${ new GlideDateTime()}
+ Actual User: ${actualUserName}
+ Impersonated User: ${impersonatedUserName}
+ Comments added: ${current.comments || 'NA'}
+ Work Notes added: ${current.work_notes || 'NA'}`;
+ gs.info(logMessage);
+ }
+ }
+})(current, previous);
+```
+
+
+## Prerequisites
+
+- Need admin access to check the impersonation logs later
+
+
+## Dependencies
+
+- GlideSystem API
+- GlideImpersonate API
+- gs.getSession()
+
+
+## Category
+
+Server-Side Components / Business Rules / User Impersonation Activity Logger
+
+## Hacktoberfest 2025
+
+Created as first Contribution for ServiceNow Hacktoberfest 2025 🎃
+
+## License
+
+MIT License
+
+## Screenshots
+
From fb4756e3212f14af9051f703d8adaadfc8eacfb2 Mon Sep 17 00:00:00 2001
From: Nilesh Wahule <77268537+Its-Nmk@users.noreply.github.com>
Date: Tue, 21 Oct 2025 20:26:11 +0530
Subject: [PATCH 2/5] Add user impersonation activity logging
---
.../UserImpersonationActiityLogger.js | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 Server-Side Components/Business Rules/User Impersonation Activity Logger/UserImpersonationActiityLogger.js
diff --git a/Server-Side Components/Business Rules/User Impersonation Activity Logger/UserImpersonationActiityLogger.js b/Server-Side Components/Business Rules/User Impersonation Activity Logger/UserImpersonationActiityLogger.js
new file mode 100644
index 0000000000..40f1877076
--- /dev/null
+++ b/Server-Side Components/Business Rules/User Impersonation Activity Logger/UserImpersonationActiityLogger.js
@@ -0,0 +1,17 @@
+(function executeRule(current, previous /*null when async*/) {
+ if (new GlideImpersonate().isImpersonating()) {
+ // Check if the user is impersonating
+ if (current.comments.changes() || current.work_notes.changes()) {
+ // Check if comments or work notes have changed
+ let actualUserName = gs.getImpersonatingUserDisplayName();
+ let impersonatedUserName = gs.getUserDisplayName();
+ let logMessage = `User Impersonation Activity Detected:
+ Timestamp : ${new GlideDateTime()}
+ Actual User: ${actualUserName}
+ Impersonated User: ${impersonatedUserName}
+ Comments added: ${current.comments || "NA"}
+ Work Notes added: ${current.work_notes || "NA"}`;
+ gs.info(logMessage);
+ }
+ }
+})(current, previous);
From e85e26fd22188da2889ace78019c8162b153eee6 Mon Sep 17 00:00:00 2001
From: Nilesh Wahule <77268537+Its-Nmk@users.noreply.github.com>
Date: Wed, 22 Oct 2025 16:59:46 +0530
Subject: [PATCH 3/5] Add screenshot to README for User Impersonation Logger
---
.../Business Rules/User Impersonation Activity Logger/README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
index 0daad12360..afef598378 100644
--- a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
+++ b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
@@ -72,4 +72,6 @@ Created as first Contribution for ServiceNow Hacktoberfest 2025 🎃
MIT License
## Screenshots
+
+
From cd2c541e75900647a26040a9a21d3829cf4dd31b Mon Sep 17 00:00:00 2001
From: Nilesh Wahule <77268537+Its-Nmk@users.noreply.github.com>
Date: Wed, 22 Oct 2025 17:12:51 +0530
Subject: [PATCH 4/5] Update README by removing unnecessary sections
Removed Hacktoberfest 2025 section and License information from README.
---
.../User Impersonation Activity Logger/README.md | 7 -------
1 file changed, 7 deletions(-)
diff --git a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
index afef598378..e1c8995965 100644
--- a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
+++ b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
@@ -63,13 +63,6 @@ The User Impersonation Activity Logger provides the following capabilities:
Server-Side Components / Business Rules / User Impersonation Activity Logger
-## Hacktoberfest 2025
-
-Created as first Contribution for ServiceNow Hacktoberfest 2025 🎃
-
-## License
-
-MIT License
## Screenshots
From 6ec903ffcec2dd8784ca4f28f7933e04c64e212c Mon Sep 17 00:00:00 2001
From: Nilesh Wahule <77268537+Its-Nmk@users.noreply.github.com>
Date: Wed, 22 Oct 2025 19:52:10 +0530
Subject: [PATCH 5/5] Remove user impersonation activity logging
Removed user impersonation logging logic from the script.
---
.../User Impersonation Activity Logger/README.md | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
diff --git a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
index e1c8995965..bf3113340e 100644
--- a/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
+++ b/Server-Side Components/Business Rules/User Impersonation Activity Logger/README.md
@@ -30,19 +30,9 @@ The User Impersonation Activity Logger provides the following capabilities:
// Table: incident
// Script:
(function executeRule(current, previous /*null when async*/) {
- if (new GlideImpersonate().isImpersonating()) { // Check if the user is impersonating
- if (current.comments.changes() || current.work_notes.changes()) { // Check if comments or work notes have changed
- let actualUserName = gs.getImpersonatingUserDisplayName();
- let impersonatedUserName = gs.getUserDisplayName();
- let logMessage = `User Impersonation Activity Detected:
- Timestamp : ${ new GlideDateTime()}
- Actual User: ${actualUserName}
- Impersonated User: ${impersonatedUserName}
- Comments added: ${current.comments || 'NA'}
- Work Notes added: ${current.work_notes || 'NA'}`;
- gs.info(logMessage);
- }
- }
+
+//Add the logic here
+
})(current, previous);
```