The Zurich release has arrived! Interested in new features and functionalities? Click here for more

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

Dear reader, I strongly recommend reading the below publication alongside this article:

Application Service and Service Instance: What is new in Yokohama and CSDM v.5
Please, make yourself aware of the new Service Instance entity!

 

Introduction

If you do not have prior knowledge about Application Service data structure, I firstly recommend spending some time on the Application Service specifics. Especially, it is important to acknowledge the flat data structure called CI associations [svc_ci_assoc]. For example, my colleague @davidskowronek  has written a very good article - Application Services: How to use them? - talking about these CI Associations as well as other aspects of Application Services. I also recommend reviewing Application Services on product docs with thought. And explore directly in the platform!

 

In this article, I'll:

  • provide an overview of the ITSM Impacted Services execution focusing on incident management
  • describe ITSM Impacted Services execution logic consuming CI Association data
  • illustrate how CSDM-aligned data can be consumed by the Impacted Services feature
  • showcase a workaround to populate the Service Offerings related list using CI relationships (yes - this is not the case out-of-box unfortunately)

 

Though I am focusing on incident management, the described logic and options are similar for change management. The primary difference between incident and change management is dedicated system properties to control the logic. These properties are "process internal". In other words, the incident specific Impacted Services system properties do not affect change management and vice versa. Therefore, if you are not careful, you may end up having different Impacted Services output per process while the underlying data would be the same.

 

This article is written against the Utah release.

 

Incident Management & Impacted Services settings

The system properties are officially documented on product docs: Refresh impacted services and CIs for incident. For my illustrative sample scenario, I have the following system property values:

 

Property Value Notes
com.snc.incident.refresh_impacted.include_affected_cis true

Impacted Services/CIs  [task_cmdb_ci_service] related list is populated based on Affected CIs [task_ci] related list data.

Affected CIs are used to query associated Application Services from the
 CI association [svc_ci_assoc] table. Any found Application Services are then populated into the Impacted Services/CIs list.

com.snc.incident.refresh_impacted.event true

Impacted Services data is populated asynchronously for better user experience.

com.snc.incident.populate_business_application true Upstream business applications are populated on a dedicated related list [task_cmdb_ci_business_app].
com.snc.incident.populate_service_offering true Upstream service offerings are populated on a dedicated related list [task_service_offering].

 

Impacted Services - sample data & execution

My sample CMDB data involves:

  • Application Services and their downstream CIs
  • Upstream business applications and service offerings

Though the data is purely illustrative, it can be deemed CSDM aligned.

VenniMakarainen_0-1685015658002.png

 

The involved Application Services are Calculated Application Services [cmdb_ci_service_calculated]. For these Application Services, the platform automatically syncs CI relationship changes into the CI association table discussed earlier. Firstly, this ensures data availability for the Impacted Services logic with the described system property values. Secondly, this reduces manual efforts around Application Service data when ITOM Service Mapping is not involved.

 

From the viewpoint of MSSQLSERVER@xyz,  my CI Association data is as follows:

 

VenniMakarainen_0-1685449344731.png

 

  • AS - prod (Calculated) is the only Application Service associated with the configuration item MSSQLSERVER@xyz

     

So, let's create an incident where the highlighted MSSQLSERVER@xyz  is selected as the Configuration itemWe will end up with the following data in our related lists:

 

List Data
Affected CIs MSSQLSERVER@xyz
Impacted Services/CIs AS - prod (Calculated)
Service Offerings <empty, not populated as many would expect>
Business Applications SAP CRM API

 

Incident Impacted Services - technical process flow

As we saw from the above sample output, the Impacted Services logic did not consume CSDM-aligned relationships to populate the Service Offerings related list. The below diagram describes the high-level execution sequence that took place when Impacted Services logic was initiated against my sample incident:

 

As seen from the above illustration, the Service Offerings list is populated by executing a query against the [service_offering] table itself. Out-of-box, this query expects Impacted Services/CIs list to have service data - business or technical service data - which is parent to one or more service offerings.

 

So, the question is: How to consume CI relationships for Service Offerings list population? I'll provide a sample workaround in the next section of this article.

 

Impacted Services - altering the Service Offerings list population

In order to have the Service Offerings related list population to consume CI relationships, you need to override the baseline behavior by updating the TaskOffering script include:

 

 

 

var TaskOffering = Class.create();
TaskOffering.prototype = Object.extendsObject(TaskOfferingSNC, {

    initialize: function() {
        TaskOfferingSNC.prototype.initialize.call(this);
    },

	/**
 	* Creates an array of Service Offering sys_id's based on an array of CI sys_id's using CI relationships.
	*
 	* @param {array} configurationItems - an array of CI sys_id's ("cmdb_ci_service" field values from the [task_cmdb_ci_service] table)
	*
 	* @return {array} - an array of found Service Offering sys_id's
 	*/
    getOfferings: function(configurationItems) {
        var serviceOfferings = [];
		
        if (configurationItems) {
            /*
            Add your desired query against [cmdb_rel_ci] here. For example, query records where
            the parent CI class is service_offering and child CI is one of the sys_id's in the 'configurationItems' parameter.
            Then, push the queried service_offering sys_id's into the 'serviceOfferings' array.
            Ci Relationship table often contains a lot of records. Consider limiting your query to retrieve only a reasonable amount of records.
            */

        }
        return serviceOfferings;
    },

    type: 'TaskOffering'
});

 

 

 

The script include is empty out-of-box and is meant for customers to override baseline functionality as needed. Configuring the getOfferings method as described above will override the baseline method in the script include TaskOfferingSNC. Additionally, this config change will apply to both incident and change management Impacted Services execution. The primary script components are shared though process-specific system properties are available as I noted earlier.

 

Key takeaways & call to action

  • Platform data (models) and config should be planned & designed in conjunction to avoid discrepancies
  • Leveraging ServiceNow product-specific expertise helps ensure your implementation aligns with your specific data models
  • ServiceNow CMDB is more than the individual CIs and their relationships expanding to Application Service related data structures
  • Trial your CMDB data-driven use cases prior to production use
  • We always aim to be better here at Servicenow - please join me in voting this idea to enhance the ITSM Impacted Services feature!

 

@barrykant - big thanks for the many inspirational CSDM discussions that may sometimes result in a community article!
@davidskowronek - a very warm thank you for always sharing your insights & expertise!

Comments
Stig Brandt
Tera Guru

Hi Venni 

 

for me you seem to complicate things, or I just don’t understand, why the impacted services released list just contain services and offering instead of only the application service.

 

where is the business value here, will the data be populated on offerings in DPM?

and why are we not looking at populating the service/service offering attributes on the incident, that should drive the SLAs, based on the ci?

 

br

Stig

Barry Kant
ServiceNow Employee
ServiceNow Employee

Hi Stig, 

the output of the Impact Analysis can be multiple Application Services, Offerings, Services. Where the task attributes can only contain 1 (the one how the task is raised). So the output is written in 1:n tables and seen as related lists. And correct that SLM does only work based on task attributes and not on related lists. For availability of offerings that should change in my opinion. Simply because it can cause impact to multiple offerings. 
In the example it should also list the AS - ServiceNow - Prod as Affected Services and the ServiceNow as Impacted Business Application (based on the relations). If so then the BSO - Onboarding is an Impacted Service Offering when the override logic is in place. 

The Impact logic output is based on associations in this case and it should be seen as suggested output. It doesn't take eg redundancy into account. My view would be that this is input for an agent that can acknowledge if that it true or not. If marked as true then I would like to see SLM on those impacted Offerings as well. 
Beside that it can be used for matching other open tasks with similar Offerings for eg grouping. 

Enough opportunities for improvements

Stig Brandt
Tera Guru

Hi Barry

 

Thanks for your reply, I think I have a pretty good understanding of the data model 😉

 

My question is just about the solution

- What is the business outcome

- Who benefit from the solution

- What value does it provide

 

And what I understand from the solution and your answer is

  • We add one more related list on the ticket form, which is not a goal, imo
    • we already have 6-10 related list on the forms - poor agent
    • we already have impacted service related list - why not populate that list we all services impacted
  • You put more work into the Agent, that can do XYZ to check - I assume we all can agree we try to reduce work for agents by automizing, or use AI?
Barry Kant
ServiceNow Employee
ServiceNow Employee

Hi Stig, 

I have no doubt at all in your understanding of the data model. But this forum/article might be read by others as well. 🙂
What I dislike about the ootb Impacted Services is that it can be a big list of impacted services which is hard to consume for agents. (What is Application Services , Offerings (technical and business), Services (technical and business)). I think they also have a different purpose. 

  • Technical Offerings for Tech Approvals, Communication
  • Business Offerings for Bus Approvals, Communication, creating outages

I would add contextual actions to the records so it makes sense for an agent. 
For the number of related list, I do agree as well. Add what makes sense. (that might be different per Persona)
If there are related lists that do not make sense then indeed poor agent, but if it adds value then maybe lucky agent?

Matching is a good feature imo. To group similar tickets based on impacted offerings. This can be done when the ticket is created, but potentially also on a portal side (end user) , so incident deflection. 
This could also be done via outages (does an outage already exist for one of the impacted offerings?)

Last bullet:
Agent or automation (AI). This might maybe also a scalability discussion.
I think automation can be done with Impacted Services output to make suggestions. (not done anything like that so far). 
For enterprises I think AI is a yes, ticket volume wise and budget wise. 

Overal my opinion it that there can be done more with the output then done today:
showing/visualizing or automation 
good food for thought.

 

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

Great conversation guys! @Stig Brandt, I'll also briefly comment on some of the points you've raised.

 

for me you seem to complicate things, or I just don’t understand, why the impacted services released list just contain services and offering instead of only the application service.

 

- this is a decision that the customer must ultimately make with their chosen trusted advisors - the desired output supporting the expected outcomes whatever they may be

 

where is the business value here, will the data be populated on offerings in DPM?

- I cannot say on the spot which data is exposed within DPM by default today but surely the data can be exposed there as well

- I am describing functional behavior and related options, not imagining perceived business value nor describing a solution (the configurable solution already exists); so rather "here are options & considerations to help get to your desired state in tracking & understanding (service) impact " not "doing this ensures desired business value for your organisation"

- The example intended value of the article itself is to

  • raise awareness of the options out there for informed decisions around platform config and how data can be consumed by ITSM Impacted Services logic besides the traditional CI relationships
  • highlight the Service Offerings population shortcoming & how an example to workaround it
  • help avoid/understand discrepancies around CMDB data consumption

 

and why are we not looking at populating the service/service offering attributes on the incident, that should drive the SLAs, based on the ci?

 

The scope of the article is fully ITSM Impacted services and a sample execution - I cannot see the relevancy of SLA calculation considering the described content of this article

- SLA calculation - either commitment or condition based - has really nothing to do with the Impacted Services functional behavior though is very important as you suggest

- I find this question/comment to contradict quite much with the first statement about complicating things - I'd say mixing SLA discussion into this article will definitely not simplify

- I kindly ask and suggest you to take action and write an article about SLA measurement! 🙂

Mathew Hillyard
Mega Sage

I’ve been digging through this area of the platform recently.

irs worth noting that if you populate service offering and service on the change/incident form the OOTB Business rules populate these into the Impacted Services and Service Offerings related lists (Service Offerings, and Impacted Business Applications need to be added). If you then turn on the property to populate the Service Offerings related lists and Refresh Impacted Services, it will populate it with all Offerings whose Parent is one of the Impacted Services. This doesn’t make sense to me because in the example of a Business Service with lots of Offerings, they’re clearly not all “Impacted”. 

This raises a few questions:

1) What was the thinking behind doing it this way for Offerings (top down via the Business/Technical Service) rather than bottom up (ie by CI Relationships from impacted Application Services - like Impacted Services and Impacted Business Applications?

2) Why is the related list not called “Impacted Offerings” or similar? All other service-type related lists include either “affected” or “impacted”. Its meaning is currently ambiguous.

3) Is there any reason why this functionality is not present in the Problem application? One would have thought that an understanding of impact, whilst not the main purpose of Problem Management, would be very useful. In APM one of the indicators runs on the Problem table (and I understand a future improvement will want to leverage an Impacted Business Application linked to a Problem). It would be very straightforward to expand the existing functionality as it’s already on two other tables extended from Task.

4) Without your insightful and helpful post, how would customers know about this issue with Offerings? I can’t recall seeing it documented but may have missed the relevant page.

 

There’s a small typo on the bottom right box of your main technical flow image. It should read “Insert new task Business Applications” instead of “…Offerings”.

 

Barry Kant
ServiceNow Employee
ServiceNow Employee

Hi Mathew,

on the first and fourth question I made a case, Article and Idea to get this fixed.
The case was rejected (it is not considered a bug, or it is as designed). That means that it is not clear what the expected outcome was when designed (my assumption at least). 
The article describes how it can be fixed (basically in line with the Impacted Business Applications which is correct). 
The Idea portal is to raise the topic to get improved. 

 

Regarding the second question:
I agree. Everyone likes consistency in delivery and here it is not. It would be better to align the naming on the related list. 

Regarding the third question:

I have no idea, what I can think of it that an idea in related to multiple Incidents and/or a change and that you can get it from those related records. But to be fair I don't know why it is not in problem management. 

Mathew Hillyard
Mega Sage

I found out how Service Offerings are populated in the same way as your article and my first thought was that it was a defect, until I found the script include function and saw it was by design apparently!

Re: problem management, I get where you’re coming from and perhaps some automation to roll up “impacted” records from related incidents might make it more complicated and hence less desirable to implement.

This is very helpful (as always), so thank you.

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

@Mathew Hillyard thanks - I fixed the typo in the tech flow image. Good catch!


And yes - there are a few business rules in the mix which can be accessed leveraging the following URL:

- /sys_script_list.do?sysparm_query=scriptLIKEtask_cmdb_ci_service%5EORscriptLIKEtask_service_offering&sysparm_view=

 

The business rules currently execute independently beside the UI Action based tech process as you note above.

Jakub Pobiecky
Tera Expert

Thanks for the explanation @VenniMakarainen , but as shown in the picture, step 1 will always find only application services, right? It is searching "svc_ci_assoc" table and only application services are stored.
It later steps it will try to identify offerings via "Parent" field and application services have no offerings, so nothing is able to identified. So how this should work out of the box? 

@Barry Kant You say, that impact analysis can return "Application Services, Offerings, Services". Could you please tell me how to configure it as it is not working out of the box? For me, it always identify only application services and nothing more

Barry Kant
ServiceNow Employee
ServiceNow Employee

hi Jakub, 

you need these properties set to true:

com.snc.incident.populate_business_application true Upstream business applications are populated on a dedicated related list [task_cmdb_ci_business_app].
com.snc.incident.populate_service_offering true Upstream service offerings are populated on a dedicated related list [task_service_offering].

 

Depending on the input this will go good or wrong, anyway an improved logic is described in this link .

this looks up parent offerings of the initial impacted application services. It will separate them in their own related lists (for service offerings as well as for business applications).

the improvement is raised as idea (for improvement) and that is stated in backlog.

Hope this helps. 

Jakub Pobiecky
Tera Expert

Hi @Barry Kant 

Thanks a lot for the reply. I set up those properties, but unfortunately it is not enough. Yes I can create my own code(as you did in the post), because OOB is not working at all (it will never find offerings for application services), but it is as it is. 

 

And also ServiceNow says, that for microservices, you can nest application services via parent field/relationship. So you can have structure

"Top App Service 1" - top parent

"Microservice app service 2" - child of the first service

"Windows server 3" - app service 2 is running on the 

 

When I will create a change request for windows server 3, I will see onlu service 1 in the impacted services and not the second one. Because code is checking only 1 level of "svc_ci_assoc". 

Biggest issue I have is, that this was working few versions back, it was identifying all top level services regardless if it is application/technical/business. 

 

Do you you please know, if it is possible to use parent/child applications services or if this support is considered in the future? 

Barry Kant
ServiceNow Employee
ServiceNow Employee

Hi Jakub, 

also here I added a custom iterative logic for checking nested app services. 
it happens indeed for svc_ci_assoc table. I know this is under review, however I do not know when an improvement is expected. 
It has to be improved in the future otherwise the logic does not support the data model (that is my view on the world). 

Best regards,
Barry

Jakub Pobiecky
Tera Expert

Hi Barry,

Thanks a lot. I ended up modifying script include "ChangeUtils" and extending function _addAdditionalServices with 

for(var i=0, l = services.length; i<l; i++){
			var serviceId = services[i];
			var resultSecondLevelServices = ciu.servicesAffectedByCI(serviceId);
			services = services ? arrUtil.union(services, resultSecondLevelServices) : resultSecondLevelServices;
		}

It just brought back the old behavior. It's a pity that logic is not reflecting the new data model, but maybe it will improve.

 

Best Regards,

Jakub

Jan60
Tera Contributor

Hi guys,

 

I have a similar issue in Change Management in regards to filling the "Service Offerings" related list based on "Impacted Services/CIs", when the property "com.snc.change_request.populate_service_offering" is enabled.

 

My expectation was: Cool, with all relevant Application Services listed in "Impacted Services/CIs" the "Service Offerings" list will be populated with the offerings given in the Application Services.

 

But ... it does not work like this. Instead it looks for offerings only, where one if the items in "Impacted Services/CIs" is the parent.

The results may not make a lot of sense depending on your Service/CI structure.


Example:

I do have a business service "ITSM Tooling", which serves as parent for 4 different offerings "Incident Mgmt", "Problem Mgmt", "Change Mgmt" and "Configuration Mgmt". There is an Application Service representing the Mid Servers for production environment and this refers to the offering "Configuration Management".

 

In a change I refer to

  • Business service = "ITSM Tooling"
  • Offering = "Configuration Management"
  • Configuration Item = "One of the Mid Servers"


Result after saving:

  • The parent business service "ITSM Tooling" is added to the "Impacted Services/CIs" automatically
  • The Mid Server is shown in "Affected CIs"

 

When I now run "Refresh Impactes Services" we end up with

  1. The Mid Server Application Service is added to "Impacted Services / CIs"
  2. All offerings are added to "Service Offerings" tab, where "ITSM Tooling" is parent


So although my change just relates to Mid-Servers and Configuration Management, the "Service offerings" tab includes Incident, Problem and Change offerings as well.

 

My personal solution proposal:

  1. always switch off the property "com.snc.change_request.populate_service_offering"
  2. add a business rule, which reacts on application services added to "Impacted Services/CIs" and do your own magic to fill the "Service Offerings" list.

 

Mathew Hillyard
Mega Sage

@Jan60 this is referenced in the article above and applies for both Change and Incident. Please take a look at the link in the final sentence of the original post (and upvote the improved solution!)

 

It basically proposes rewriting the getOfferings() function inside TaskOfferingSNC() to populate Service Offerings based on CSDM relationships.

 

Linked here for clarity: https://support.servicenow.com/ideas?id=view_idea&sysparm_idea_id=6f182e77dbfe5950847d5ac2ca961953&s...

Mathew Hillyard
Mega Sage

The OOTB Business Rule "Sync Service Offering" on the Task table copies the Service Offering on the Task form to the Service Offering [task_service_offering] related list. However the improved outcome in the linked idea above (which I can no longer add a comment to) will return a list of Service Offerings to be inserted into task_service_offering which includes the Service Offering on the Task form.


The result in a fully-working environment with CSDM in place is loads of log messages referencing "duplicate key violation, attempt to insert into task_service_offering".


I would recommend adding a small amount of additional code to remove the Service Offering on the Task form from the array of Service Offerings to be inserted into task_service_offering in function TaskOfferingSNC().addServiceOffering, or to deactivate the "Sync Service Offering" Business Rule when using Refresh Impacted Services functionality.

 

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

Hi @Jakub Pobiecky ! Seems I've missed out on your comments and questions awhile back.

but as shown in the picture, step 1 will always find only application services, right? It is searching "svc_ci_assoc" table and only application services are stored.
It later steps it will try to identify offerings via "Parent" field and application services have no offerings, so nothing is able to identified. So how this should work out of the box? 

 


I see Barry has provided further thoughts already. Is there still something on your mind around your above comments? Thanks anyways in taking the time to collab!

Jakub Pobiecky
Tera Expert

Hi @VenniMakarainen ,

 

Thanks for the reply. Yes, Barry answered most of the questions. But for me, it is really strange, why OOB impact analysis is not working. Because as it is, it will never find any offerings, becase Application Services have no service offerings by default.
Do you have information, if this will eventualy get fixed? Or if there are any improvements to the impact analysis planned?

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

Hi @Jakub Pobiecky ! I would not say the OOB impact analysis is not working, rather it can have this shortcomings in terms of the Service Offering related list population (if that is what you are referring to). I've tried to explain in the article how to tech work around that if that is an issue for a given scenario/customer.

In the CSMD context, app services are intended to have CI relationships to an offering. This can be set e.g. using the app service wizard. Unfortunately, I cannot comment on behalf our engineering & product teams on the future of "impact analysis". Please, upvote the ideas referenced in the article 🙂

Jakub Pobiecky
Tera Expert

Hi @VenniMakarainen 

OOB analysis is trying to find service offering, where its parent is an Application Service. This can never happen, right? Or how OOB impact analysis can identify offerings? (I mean without tweaking scripts, this is what OOB means for me)

I fully understand, that according CSDM application services underpin service offerings. We set up system like that, so it is strange to me, why these offerings are not identified in the impact analysis, because it is part of CSDM methodology.

I am not blaming you for that, no problem. I just wanted to get at least some insight, if you have any information. Yes, I will upload those ides. I just hope it will improve in the future 

VenniMakarainen
ServiceNow Employee
ServiceNow Employee

Hi @Jakub Pobiecky, thanks for the additional comments - got it! I am aligned with you on what is "OOB". I've noted the OOB behavior in the article:


As seen from the above illustration, the Service Offerings list is populated by executing a query against the [service_offering] table itself. Out-of-box, this query expects Impacted Services/CIs list to have service data - business or technical service data - which is parent to one or more service offerings.

Application service would never be a parent to an offering. OOB service_offering.parent reference qualifier is this: "sys_class_name=cmdb_ci_service^ORsys_class_name=cmdb_ci_service_business^ORsys_class_name=cmdb_ci_service_technical" --> application service is and should not be a parent of an offering.

If the impact analysis fully relies on CI relationships, the service offering list is populated populated given the relationships are setup correctly. My example does not do so due to the selected property settings (com.snc.incident.refresh_impacted.include_affected_cis).

Jakub Pobiecky
Tera Expert

Hi @VenniMakarainen 

Thanks for the information. Actually you are right. Impacted Services could be added manually(Business or Technical) and then offerings are identified. But again it is manual work and agents and mostly used to fill Affected CIs and Affected application services.

 

Thanks for the clarification

Best Regards,

Jakub

Mathew Hillyard
Mega Sage

@Jakub Pobiecky the other possibility is that the Task Business Rule "Sync BS with Impacted Services" copies the Business or Technical Service from the Service field on the Task record to the Impacted Services - assuming you are populating this field in a Task, of course. When OOTB Refresh Impacted Services runs, it ends up returning all of the Service Offerings that have that Business/Technical Service (in Impacted Services) as a parent and puts them into the (should be "Impacted") Service Offerings related list.

This obviously does not align with CSDM - it should return all of the Service Offerings that are related to the Impacted (Application) Services - this is a suggested improvement in consideration: https://support.servicenow.com/now?id=view_idea&sysparm_idea_id=6f182e77dbfe5950847d5ac2ca961953&sys... 

Version history
Last update:
‎03-21-2025 05:07 AM
Updated by:
Contributors