Duplicate CI Detection#2261
Closed
vijaykumar7177 wants to merge 3 commits intoServiceNowDevProgram:mainfrom
Closed
Duplicate CI Detection#2261vijaykumar7177 wants to merge 3 commits intoServiceNowDevProgram:mainfrom
vijaykumar7177 wants to merge 3 commits intoServiceNowDevProgram:mainfrom
Conversation
Duplicate CIs (Configuration Items) in the CMDB cause data redundancy, reporting errors, and incorrect impact analysis. This project automatically detects potential duplicate CIs during record creation or update, using partial string matching and fuzzy comparison on fields like Name, Serial Number, or Asset Tag. It can warn the user, flag duplicates, or even prevent save depending on configuration. 🚀 Features Detects duplicate Configuration Items on insert or update Matches based on configurable fields (e.g., name, serial_number, asset_tag) Uses partial/fuzzy matching (e.g., "Laptop123" ≈ "Laptop-123") Optionally prevents saving duplicate entries Works on both platform UI and Service Portal Extendable for custom CI classes (cmdb_ci_computer, cmdb_ci_server, etc.)
var DuplicateCIDetector = Class.create();
DuplicateCIDetector.prototype = {
initialize: function() {},
findDuplicates: function(ciName, serialNumber, assetTag, sysId) {
var duplicates = [];
var gr = new GlideRecord('cmdb_ci');
gr.addQuery('active', true);
// Basic name match (case-insensitive)
if (ciName) {
gr.addQuery('name', 'LIKE', ciName);
}
// Optional matching by serial or asset tag
if (serialNumber) {
gr.addOrCondition('serial_number', serialNumber);
}
if (assetTag) {
gr.addOrCondition('asset_tag', assetTag);
}
if (sysId)
gr.addQuery('sys_id', '!=', sysId); // ignore current record
gr.query();
while (gr.next()) {
duplicates.push({
name: gr.getValue('name'),
serial_number: gr.getValue('serial_number'),
asset_tag: gr.getValue('asset_tag'),
sys_id: gr.getUniqueValue()
});
}
return duplicates;
},
type: 'DuplicateCIDetector'
};
(function executeRule(current, previous /*null when async*/) {
var detector = new DuplicateCIDetector();
var duplicates = detector.findDuplicates(
current.name,
current.serial_number,
current.asset_tag,
current.sys_id
);
if (duplicates.length > 0) {
var message = '⚠️ Potential duplicate CIs detected:\n';
for (var i = 0; i < duplicates.length; i++) {
message += '- ' + duplicates[i].name + ' (Serial: ' + duplicates[i].serial_number + ')\n';
}
gs.addErrorMessage(message);
current.setAbortAction(true); // stop record save
}
})(current, previous);
Contributor
|
Thank You for your contribution. We have OOTB CMDB DeDuplication feature to handle cmdb duplicates. For Hacktoberfest, we’re aiming for high-quality contributions. Once you make additional changes, feel free to re-open this Pull Request or create a new one. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Description:
📘 Overview
Duplicate CIs (Configuration Items) in the CMDB cause data redundancy, reporting errors, and incorrect impact analysis.
This project automatically detects potential duplicate CIs during record creation or update, using partial string matching and fuzzy comparison on fields like Name, Serial Number, or Asset Tag.
It can warn the user, flag duplicates, or even prevent save depending on configuration.
🚀 Features
Detects duplicate Configuration Items on insert or update
Matches based on configurable fields (e.g., name, serial_number, asset_tag)
Uses partial/fuzzy matching (e.g., "Laptop123" ≈ "Laptop-123")
Optionally prevents saving duplicate entries
Works on both platform UI and Service Portal
Extendable for custom CI classes (cmdb_ci_computer, cmdb_ci_server, etc.)
Pull Request Checklist
Overview
Code Quality
Repository Structure Compliance
Core ServiceNow APIs/Server-Side Components/Client-Side Components/Modern Development/Integration/Specialized Areas/Documentation
Restrictions