diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js new file mode 100644 index 0000000000..ba38447891 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js @@ -0,0 +1,16 @@ +var SentimentAnalyzer = Class.create(); +SentimentAnalyzer.prototype = Object.extendsObject(AbstractAjaxProcessor, { + getSentiment: function() { + var text = (this.getParameter('sysparm_text') || '').toLowerCase(); + var positive = ['thanks', 'great', 'resolved', 'appreciate']; + var negative = ['issue', 'error', 'not working', 'fail', 'problem']; + + var score = 0; + positive.forEach(function(word) { if (text.includes(word)) score++; }); + negative.forEach(function(word) { if (text.includes(word)) score--; }); + + if (score > 0) return 'Positive'; + if (score < 0) return 'Negative'; + return 'Neutral'; + } +}); diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js new file mode 100644 index 0000000000..214a08b28b --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js @@ -0,0 +1,11 @@ +function onChange(control, oldValue, newValue, isLoading) { + if (isLoading || !newValue) return; + + var ga = new GlideAjax('SentimentAnalyzer'); + ga.addParam('sysparm_name', 'getSentiment'); + ga.addParam('sysparm_text', newValue); + ga.getXMLAnswer(function(sentiment) { + g_form.addInfoMessage('Sentiment: ' + sentiment); + g_form.setValue('u_sentiment', sentiment); + }); +} diff --git a/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md new file mode 100644 index 0000000000..54dad22923 --- /dev/null +++ b/Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md @@ -0,0 +1,31 @@ +Incident Sentiment Detector (No AI, Pure JavaScript) + +A lightweight ServiceNow utility that detects sentiment (Positive / Negative / Neutral) of an Incident’s short description or comments using simple keyword matching — no AI APIs or external libraries required. + +Useful for support teams to auto-tag sentiment and analyze user frustration or satisfaction trends without expensive integrations. + +🚀 Features + +✅ Detects sentiment directly inside ServiceNow +✅ Works without external APIs or ML models +✅ Instant classification on form update +✅ Adds detected sentiment to a custom field (u_sentiment) +✅ Simple to extend — just add more positive/negative keywords + +🧩 Architecture Overview + +The solution consists of two main scripts: + +Component Type Purpose +SentimentAnalyzer Script Include Processes text and returns sentiment +Client Script (onChange) Client Script Calls SentimentAnalyzer via GlideAjax on short description change +🧱 Setup Instructions +1️⃣ Create Custom Field + +Create a new field on the Incident table: + +Name: u_sentiment + +Type: Choice + +Choices: Positive, Neutral, Negative diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/currenct_Converstion_to_USD.js b/Server-Side Components/Business Rules/Currency conversion to USD/currenct_Converstion_to_USD.js index 0504a6ab80..27fa909e3b 100644 --- a/Server-Side Components/Business Rules/Currency conversion to USD/currenct_Converstion_to_USD.js +++ b/Server-Side Components/Business Rules/Currency conversion to USD/currenct_Converstion_to_USD.js @@ -4,7 +4,7 @@ var currencyCode = current.budget_currency ? current.budget_currency.toString().substring(0, 3) : ''; // Convert the annual budget value to a float - var amount = parseFloat(current.annual_budget); + var amount = parseFloat(current.annual_budget);//annual_budget is filed where we can enter amount // Validate input: If currency code is missing or amount is not a valid number, clear the USD field and exit if (!currencyCode || isNaN(amount)) { diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/readme.md b/Server-Side Components/Business Rules/Currency conversion to USD/readme.md index ffbcd618bb..e090403f7a 100644 --- a/Server-Side Components/Business Rules/Currency conversion to USD/readme.md +++ b/Server-Side Components/Business Rules/Currency conversion to USD/readme.md @@ -6,7 +6,7 @@ Validation: Ensures both the currency code and amount are valid before proceedin Currency Check: If the currency is already USD, it bypasses conversion. Exchange Rate Lookup: Retrieves the most recent exchange rates for both the source currency and USD. Conversion Logic: Applies the formula -USD Amount=(Original AmountSource Rate)×USD Rate\text{USD Amount} = \left(\frac{\text{Original Amount}}{\text{Source Rate}}\right) \times \text{USD Rate}USD Amount=(Source RateOriginal Amount​)×USD Rate +USD Amount=(Original AmountSource Rate)×USD Rate\text{USD Amount} = \left(\frac{\text{Original Amount}}{\text{Source Rate}}\right) \times \text{USD Rate}USD Amount=(Source RateOriginal Amount​)×USD Rate. Error Handling: Clears the USD field if any required data is missing or invalid. This script ensures accurate and up-to-date currency conversion for budgeting purposes and is well-commented for maintainability and clarity.