Excited to share that I’ve officially joined Impact as an Influencer! Being part of a tech community that champions authentic voices, meaningful partnerships, and real impact is something I truly value.
As someone who believes in the power of storytelling and connection, I’m looking forward to collaborating with brands that align with my values—and helping others do the same.
Let’s use our platforms to inspire, inform, and influence for good. #ImpactInfluencer #CreatorCommunity #PartnershipsWithPurpose
There is an issue with the Smart Assessments on the Compliance Case Management when you try to use smart assessments in the Action Tasks – it’s returning an error: “Incorrect setup”. The assessment gets generated so it’s working as expected. When I try to initiate them, it returns me an error.
Official docs: https://www.servicenow.com/docs/bundle/yokohama-governance-risk-compliance/page/product/grc-compliance-case-mgmt/task/perform-smart-assessment-on-action-task.html
1. Go to the Assessment Workspace and configure/create a new assessment template called “My Questionnaire”. Assessment categories = Compliance Case Assessment Assessment targets = Compliance Case Assessment reader = sn_comp_case.compliance_case_business_user 2. Go to All > Case type 3. Open “Compliance Case” or any active case type record. 4. In the assessment configuration, use the “My Questionnaire”. 5. Go to the Compliance Case Workspace and open any record where type is “Compliance Case” 6. Create an Action Task and use smart assessment. 7. When you move the task to Assigned state, it will trigger the assessment. 8. Click in View Assessment and the issue will get displayed when you try to take the assessment.
How to solve it?
Create the smart assessment under the right scope (CCM) 🙂
Today, Creator Studio: Creating applications without writing code provide a fast and convenient way to develop an application. Whether you’re building a small tool-based application or a big portal, these tools can be very serviceable.
I built a simple Recipe App app using Creator Studio called Gourmet – designed to inspire and guide both novice cooks and seasoned chefs alike. With an extensive library of recipes from around the world, Gourmet simplifies meal planning, shopping, and cooking with easy-to-follow instructions, personalized recommendations, and helpful cooking tips.
Key features include:
Recipe Discovery: Explore thousands of recipes by cuisine, dietary preferences, ingredients, or meal type.
Step-by-Step Instructions: Detailed cooking instructions with photos and videos to guide you through each step.
The request form captures all the relevant details such as ingredients, quantity, direction and any special instructions. Once submitted the request is automatically routed to an approval group composed by chefs around the world. This ensures all recipes are reviewed and validated quickly. Upon approval, the system creates a task for the chefs to replicate , ensuring the recipe is valid and can be used by anyone.
Requirements
Create a PDI on developer.service-now.com.
The plugin ‘Creator Studio’ is automatically entitled on all ServiceNow instances and all ServiceNow developer portal instances. Check if its installed in your instance.
Lets start
This should be your homepage.
Click in the button “Open Creator Studio” or in the filter navigator find App Engine Studio > Creator Studio. It should look like this:
Click in “Create app” and type the following:
Name: Gourmet
Description: Gourmet is your ultimate kitchen companion, designed to inspire and guide both novice cooks and seasoned chefs alike. With an extensive library of recipes from around the world, Gourmet simplifies meal planning, shopping, and cooking with easy-to-follow instructions, personalized recommendations, and helpful cooking tips.
The next menu will help you to choose a template to start: Creator Studio Default Template. (documentation here Creator Studio apps and tables).
Lets skip it for now, we need to create a new catalog and new categories after we finish the form.
Time to design the form
We want to create a Catalog Item where the user can request a recipe. You can preview the form or submit for review.
In the form submission tab, you have a view of your table.
Now mark the form as “Ready”. Now its time to confirm if your recent form is publish and available.
Go to the Employee Center.
Try to search for the Recipe Submission Request and you will find your recent form.
Fill up all the fields and press submit. This will create a Gourmet Record where you can confirm using the Creator Studio.
And in less than 10min you just created your first record producer. Thank you and drop any comment 🙂
Last year we showed everyone how easy it is to build an application on the #ServiceNow platform using App Engine Studio (AES).
This year the focus will be on the capabilities of #ServiceNowCreatorStudio – this tool is designed with non-developers in mind, offering a guided, intuitive environment for building request-based applications. It breaks down the traditional barriers to app development, making it accessible for business process experts to bring their automation ideas to life. This tool is not intended to replace existing development tools like App Engine Studio, but to complement them by providing a new entry point for app creation.
Transform your ideas into real-world solutions with #BuildWithCreatorStudio. Whether you’re new to ServiceNow, a low-code developer, a business analyst, or a full-stack engineer, anyone is allowed to participate. Ready to get creative and have some fun together? 😁
Join me this year for this exciting challenge. Rise to the #BuildWithCreatorStudio Challenge and earn exclusive swag!
In this snippet you will create a custom spider web using a custom page and populating data using Highcharts native library
Step 1: Create a new Widget
Go to Service Portal > Widget > Click New
Name: Custom productionProcess
Id: custom-gojs-productionProcess
Click on submit
Body HTML template
Copy and paste below HTML Code in Widget’s HTML Template section
<div>
<!-- chart -->
<div id="container"></div>
<p class="highcharts-description">
A spiderweb chart or radar chart is a variant of the polar chart.
Spiderweb charts are commonly used to compare multivariate data sets,
like this demo using six variables of comparison.
</p>
</div>
CSS/SCSS
Copy and paste below CSS in Widget’s CSS/SCSS Section
/* to be completed */
Client Side Scripts
Copy and Paste below Script in Widget’s Client Side Section
api.controller=function($rootScope, $scope, $window, $interval, spUtil) {
/* widget controller */
var c = this;
/** Chart source: https://www.highcharts.com/demo/polar-spider*/
var options = {
credits: {
enabled: false
},
chart: {
renderTo: 'container', // change chart_id if needed
polar: true,
type: 'line'
},
accessibility: {
description: 'A spiderweb chart compares the allocated budget against actual spending within an organization. The spider chart has six spokes. Each spoke represents one of the 6 departments within the organization: sales, marketing, development, customer support, information technology and administration. The chart is interactive, and each data point is displayed upon hovering. The chart clearly shows that 4 of the 6 departments have overspent their budget with Marketing responsible for the greatest overspend of $20,000. The allocated budget and actual spending data points for each department are as follows: Sales. Budget equals $43,000; spending equals $50,000. Marketing. Budget equals $19,000; spending equals $39,000. Development. Budget equals $60,000; spending equals $42,000. Customer support. Budget equals $35,000; spending equals $31,000. Information technology. Budget equals $17,000; spending equals $26,000. Administration. Budget equals $10,000; spending equals $14,000.'
},
title: {
text: 'Budget vs spending',
x: -80
},
pane: {
size: '80%'
},
xAxis: {
categories: ['Sales', 'Marketing', 'Development', 'Customer Support',
'Information Technology', 'Administration'],
tickmarkPlacement: 'on',
lineWidth: 0
},
yAxis: {
gridLineInterpolation: 'polygon',
lineWidth: 0,
min: 0
},
tooltip: {
shared: true,
pointFormat: '<span style="color:{series.color}">{series.name}: <b>${point.y:,.0f}</b><br/>'
},
legend: {
align: 'right',
verticalAlign: 'middle',
layout: 'vertical'
},
series: [{
name: 'Allocated Budget',
data: [43000, 19000, 60000, 35000, 17000, 10000],
pointPlacement: 'on'
}, {
name: 'Actual Spending',
data: [50000, 39000, 42000, 31000, 26000, 14000],
pointPlacement: 'on'
}],
responsive: {
rules: [{
condition: {
maxWidth: 500
},
chartOptions: {
legend: {
align: 'center',
verticalAlign: 'bottom',
layout: 'horizontal'
},
pane: {
size: '70%'
}
}
}]
}
};
/*Generate chart*/
var chart = new Highcharts.Chart(options);
/* improvements: next step would be to have a ng-selector in HTML and use record watcher to keep data up do date */
};
Step 2: Add native Highcharts library to your widget as widget dependencies
***Go to Service Portal > Widget ***
Search for your previous widget created “Custom Spider Web” (custom-spider-web) and open the record.
On the related tab Dependencies, click on Edit button.
Search for PA Widget (4fbe3df5673322002c658aaad485ef29) and add to your list.
Click on Save button to save the change.
Step 3: Create a new Page
Go to Service Portal > Page > Click New
Name: spiderweb – Test Page
ID: spiderweb
Click on Submit button.
Once submitted, Click on Open in Page Designer related link
In Page designer, Place custom-spider-web widget inside a container > row > Column at top location.
View paget from following link http://instance-name.service-now.com/sp?id=spiderweb.
Sources
Any of following links are not under my surveilance or maintenance
Governance, Risk, and Compliance, entities can be people, processes, departments, applications, or objects, whose exposure must be managed. These entities have controls that are defined to view the status.
To understand entities, consider the following example. Assume you are a new GRC user and you want to implement a change management process to all your critical financial systems. All the systems can be considered as individual entities. Map all the systems to an entity class called Financial. Have an entity type filter for critical financial systems to determine the systems that are identified as critical.
The primary benefit of creating entities is that you can maintain accountability because each entity has an owner. To understand this benefit, assume that you want to configure all the servers in a new way. After you finish the configuration, you perform an audit and then discover that only one server failed to comply with the new configuration. If you had not defined all the entities, then the entire audit result would have been deemed as failed. But because you have the entities defined, then only the non-compliant server entity and its identified owner are held accountable instead of all the servers.
Having defined entities ensures that the entity owners can be identified and that appropriate controls can be applied to those entities. It also helps in tracking the entities that are non-compliant. Any entity that has child entities can be said to have downstream entities. Any entity that has parent entities can be said to have upstream entities.
Take the following entity class model as example:
We have a Company that contains Departments that contains Business Services, Business Applications and Business Process. In GRC this are called “downstream entities”. This model is called “Dependency Model” and can be achieved by setting up the “Entity Class hierarchy”. You can visualise the model by accessing the “GRC Workbench”.
For this exercise, we will create 3 entities to match the above model and generate their respective risks.
Entity
Class
Wrangu
Company
Information Security
Department
Enterprise Risk Management
Business Process
List of entities
Risk
Entity
Statement
Disruption to the business due to critical infrastructure unavailability
Wrangu
Business Continuity and Disruption
Inability to retain key employees may result in the departments inability to achieve objectives.
Information Security
Loss of Key Personnel
Unauthorized actions have been detected
Enterprise Risk
Unauthorized actions
List of risks
Steps
Create a client callable script include called “GRCReporting” – make sure its you’ve checked the ‘Client callable’.
Copy the following code into it.
var GRCReporting = Class.create();
GRCReporting.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getDownstreamProfileIDs: function(profileID) {
return new sn_grc.GRCProfileLists().getDownstreamProfileIDs(profileID);
},
type: 'GRCReporting'
});
Create your reports
Create a report against the Risk table (sn_risk_risk)
In the filter condition type the following “Entity > Sys Id” contains “javascript:new sn_grc.sn_grc.GRCReporting().getDownstreamProfileIDs(<Entity SysId>);”. In this example, I’ve used the entity Wrangu.
During Live Coding Happy Hour (LCHH) last week session about Decision APIs I got intrigued when Earl Duque used gr.getValue(‘sys_id’) instead of gr.getUniqueValue(), and in the comments was mentioned getUniqueValue() does not always return the sys id, so lets confirm that.
Lets take a look at the API Documentation says (here).
It says “get the primary key of the record which is usually sys_id unless otherwise specific”. Interesting, what they mean by primary key of a record? There’s a field called “Primary” that is only true for the Sys ID.
Made “PK” field as primary, did a quick GlideRecord query() and it always returned the sys id. I couldn’t prove their hypothesis – getUniqueValue is returning always the sysId. What did I miss?
It seems you can have multiple fields with primary = true (?).
var grTest = new GlideRecord('x_299742_nowjedi_example');
grTest.query();
while (grTest.next()) {
gs.info(grTest.getUniqueValue());
}
If you know the answer to this please drop in the comments.
Since I joined Wrangu I decided to become more involved in the ServiceNow community and since 2019 I have been in Top 5 GRC community leaderboard. Today this effort paid off in a big way by been honoured and selected as ServiceNow Community Rising Star ⭐ for the class of 2023.
Congrats to the group! I look forward to working with you to support and grow our amazing community over the next years!
Don’t forget to follow my blog, big news coming soon.
How many times did you write the code to find the previous value on a specific field? Long time ago I found a library called “HistoryWalker” and since then its been on my must-have snippets on my utils. This library sn_hw is not “public” available but you can see lot of scripts using it. Quite useful 🙂
getHistoryWalker: function(grObject,field) {
var answer = [];
var previousValue;
var hw = new sn_hw.HistoryWalker(grObject.getRecordClassName(), grObject.getUniqueValue());
hw.walkTo(grObject.sys_mod_count);
do {
var wr = hw.getWalkedRecordCopy();
var currentValue = wr.getValue(field);
if (currentValue != previousValue) {
previousValue = currentValue;
answer.push(wr.getValue(field) + '');
}
} while (hw.walkBackward());
return answer;
},
"Being a Jedi is not just about power, or lightsabers, or even skill with the Force. It is about connection. Being part of something bigger. I am stronger as part of the Jedi Order than I could ever be alone."