From bbe7e86db52e979d9731401e55c20bdfc8ae838f Mon Sep 17 00:00:00 2001 From: lauri457 <55710064+lauri457@users.noreply.github.com> Date: Tue, 14 Oct 2025 16:46:14 +1100 Subject: [PATCH 1/3] Create Survey or form filler widget.js --- .../Survey or form filler widget.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Modern Development/Service Portal Widgets/Fill survey or item from url/Survey or form filler widget.js diff --git a/Modern Development/Service Portal Widgets/Fill survey or item from url/Survey or form filler widget.js b/Modern Development/Service Portal Widgets/Fill survey or item from url/Survey or form filler widget.js new file mode 100644 index 0000000000..326d0b0ef3 --- /dev/null +++ b/Modern Development/Service Portal Widgets/Fill survey or item from url/Survey or form filler widget.js @@ -0,0 +1,41 @@ +//Server script: +(function () { + //get the data parameter with base64encoded json with field names for keys and matching values + data.encodedData = $sp.getParameter("data"); + try { + //turn the data back into a js object + data.decodedData = JSON.parse(GlideStringUtil.base64Decode(data.encodedData)); + } catch (e) { + //bad json; do nothing + return; + } +})(); + + +//Client controller: +api.controller = function ($scope, $rootScope) { + + var c = this, + g_form = $scope.page.g_form, + answerMap = c.data.decodedData; + // return if the answermap is not a valid object + if (!answerMap instanceof Object) + return; + // if we have g_form set values from the data parameter to form + if (g_form) { + fillAnswers(); + } + //loops through the object with field name keys and corresponding values and sets values + function fillAnswers() { + for (key in answerMap) { + if (!answerMap.hasOwnProperty(key) && !g_form.hasField(key)) + continue; + g_form.setValue(key, answerMap[key]); + } + } + //get gform from the spmodel + $rootScope.$on('spModel.gForm.initialized', function (e, gFormInstance) { + g_form = gFormInstance; + fillAnswers(); + }); +}; From 73a1a5da687b2c407ed1a4375bc2fba5de171f58 Mon Sep 17 00:00:00 2001 From: lauri457 <55710064+lauri457@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:00:50 +1100 Subject: [PATCH 2/3] Create README.md --- .../Fill survey or item from url/README.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Modern Development/Service Portal Widgets/Fill survey or item from url/README.md diff --git a/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md b/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md new file mode 100644 index 0000000000..2acd63c401 --- /dev/null +++ b/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md @@ -0,0 +1,44 @@ +# Auto-fill form from base64encoded data + +This widget automatically populates a form on service portal using base64-encoded JSON passed via a URL parameter. Use the variable name as key or for surveys use the sys_id of the [asmt_assessment_instance_question] + +## How to + +1. Create a new widget and add the server script and client controller from the *Survey or form filler widget.js* file +2. Add the widget for example as a catalog item variable or add it anywhere on your survey taking page such as *take_survey* +3. Encode json of form fields and values key-value pairs and add it as a parameter called data into your url +4. Navigate to page and form autofills + +## To note +For catalog items the variable name is the key, for surveys the key to use is the sys_id of the [asmt_assessment_instance_question] + + +## Example usage + +```javascript +var obj = { + is_this_a_replacement_for_a_lost_or_broken_iphone: "yes", + what_was_the_original_phone_number: "1234567980", + monthly_data_allowance: "Unlimited", + color: "red", + storage: "256", +} + +gs.info(GlideStringUtil.base64Encode(JSON.stringify(obj))) + +*** Script: eyJpc190aGlzX2FfcmVwbGFjZW1lbnRfZm9yX2FfbG9zdF9vcl9icm9rZW5faXBob25lIjoieWVzIiwid2hhdF93YXNfdGhlX29yaWdpbmFsX3Bob25lX251bWJlciI6IjEyMzQ1Njc5ODAiLCJtb250aGx5X2RhdGFfYWxsb3dhbmNlIjoiVW5saW1pdGVkIiwiY29sb3IiOiJyZWQiLCJzdG9yYWdlIjoiMjU2In0= +--> +https://{instancename}.service-now.com/esc?id=sc_cat_item&sys_id=ec80c13297968d1021983d1e6253af32&data=eyJpc190aGlzX2FfcmVwbGFjZW1lbnRfZm9yX2FfbG9zdF9vcl9icm9rZW5faXBob25lIjoieWVzIiwid2hhdF93YXNfdGhlX29yaWdpbmFsX3Bob25lX251bWJlciI6IjEyMzQ1Njc5ODAiLCJtb250aGx5X2RhdGFfYWxsb3dhbmNlIjoiVW5saW1pdGVkIiwiY29sb3IiOiJyZWQiLCJzdG9yYWdlIjoiMjU2In0%3D +var arr = { + "b3bf8ec283683210557ff0d6feaad327": 1, + "bbbf8ec283683210557ff0d6feaad326": 2, + "b7bf8ec283683210557ff0d6feaad327": 3, + "bfbf8ec283683210557ff0d6feaad326": 4, + "fbbf8ec283683210557ff0d6feaad325": "it is good" +} +gs.print(GlideStringUtil.base64Encode(JSON.stringify(arr))) + +*** Script: eyJiM2JmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNyI6MSwiYmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjYiOjIsImI3YmY4ZWMyODM2ODMyMTA1NTdmZjBkNmZlYWFkMzI3IjozLCJiZmJmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNiI6NCwiZmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjUiOiJpdCBpcyBnb29kIn0= +--> +https://{instancename}.service-now.com/esc?id=take_survey&type_id=cf6e97d35d371200964f58e4abb23f18&data=eyJiM2JmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNyI6MSwiYmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjYiOjIsImI3YmY4ZWMyODM2ODMyMTA1NTdmZjBkNmZlYWFkMzI3IjozLCJiZmJmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNiI6NCwiZmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjUiOiJpdCBpcyBnb29kIn0%3D +``` From 86be790e787b5cbc31944feded6493476509910b Mon Sep 17 00:00:00 2001 From: lauri457 <55710064+lauri457@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:01:28 +1100 Subject: [PATCH 3/3] Update README.md --- .../Fill survey or item from url/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md b/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md index 2acd63c401..f31b19f53d 100644 --- a/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md +++ b/Modern Development/Service Portal Widgets/Fill survey or item from url/README.md @@ -25,10 +25,11 @@ var obj = { } gs.info(GlideStringUtil.base64Encode(JSON.stringify(obj))) - +/* *** Script: eyJpc190aGlzX2FfcmVwbGFjZW1lbnRfZm9yX2FfbG9zdF9vcl9icm9rZW5faXBob25lIjoieWVzIiwid2hhdF93YXNfdGhlX29yaWdpbmFsX3Bob25lX251bWJlciI6IjEyMzQ1Njc5ODAiLCJtb250aGx5X2RhdGFfYWxsb3dhbmNlIjoiVW5saW1pdGVkIiwiY29sb3IiOiJyZWQiLCJzdG9yYWdlIjoiMjU2In0= --> https://{instancename}.service-now.com/esc?id=sc_cat_item&sys_id=ec80c13297968d1021983d1e6253af32&data=eyJpc190aGlzX2FfcmVwbGFjZW1lbnRfZm9yX2FfbG9zdF9vcl9icm9rZW5faXBob25lIjoieWVzIiwid2hhdF93YXNfdGhlX29yaWdpbmFsX3Bob25lX251bWJlciI6IjEyMzQ1Njc5ODAiLCJtb250aGx5X2RhdGFfYWxsb3dhbmNlIjoiVW5saW1pdGVkIiwiY29sb3IiOiJyZWQiLCJzdG9yYWdlIjoiMjU2In0%3D +*/ var arr = { "b3bf8ec283683210557ff0d6feaad327": 1, "bbbf8ec283683210557ff0d6feaad326": 2, @@ -37,8 +38,9 @@ var arr = { "fbbf8ec283683210557ff0d6feaad325": "it is good" } gs.print(GlideStringUtil.base64Encode(JSON.stringify(arr))) - +/* *** Script: eyJiM2JmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNyI6MSwiYmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjYiOjIsImI3YmY4ZWMyODM2ODMyMTA1NTdmZjBkNmZlYWFkMzI3IjozLCJiZmJmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNiI6NCwiZmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjUiOiJpdCBpcyBnb29kIn0= --> https://{instancename}.service-now.com/esc?id=take_survey&type_id=cf6e97d35d371200964f58e4abb23f18&data=eyJiM2JmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNyI6MSwiYmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjYiOjIsImI3YmY4ZWMyODM2ODMyMTA1NTdmZjBkNmZlYWFkMzI3IjozLCJiZmJmOGVjMjgzNjgzMjEwNTU3ZmYwZDZmZWFhZDMyNiI6NCwiZmJiZjhlYzI4MzY4MzIxMDU1N2ZmMGQ2ZmVhYWQzMjUiOiJpdCBpcyBnb29kIn0%3D +*/ ```