---
original_url: "https://jace.pro/blog/custom-table-guide-what-is-this/"
format: markdown
ai_optimized: true
---

Custom Table Guide: What is this?!# Custom Table Guide: What is this?!

November 27, 2019 [servicenow ](/tags/servicenow/)[tables](/tags/tables/)

  Enable AI AnimationThe other day I was looking at the [licensing training](https://nowlearning.service-now.com/lxp?id=overview&sys_id=a2cad4fcdb9e7300760a71043996193e&type=course) and thinking about the [custom table guide](https://www.servicenow.com/content/dam/servicenow-assets/public/en-us/doc-type/legal/custom-table-guide.pdf).
To me it’s very bizarre why these are the tables selected so in this post I want to talk through each of them.
If you have any thoughts to the reasoning I’d love to have some back and forth on it. Here’s my thoughts so far.

TableLabelReasonExtensible OOTB`cmdb_*`Configuration ItemsDesign Choice - has a Class field and it’s in useMany No`cmn_location`LocationSee notes belowNo`cmn_schedule_condition` **new**Yes`dl_definition`Data Lookup DefinitionDesign Choice - has a Class field and it’s not usedYes`dl_matcher`Data Lookup Matcher RulesDesign Choice - has a Class field and it’s in useYes`kb_knowlege`KnowledgeNo`sc_cat_item_delivery_task`Exection Plan Task []Design Choice - has a Class field and it’s in useYes`scheduled_data_import` **new**Yes`sf_state_flow`State FlowDesign Choice - has a Class field and it’s not usedYes`sys_auth_profile`Authentication ProfileDesign Choice - has a Class field and it’s not usedYes`sys_choice`ChoiceI cannot find a reason this is includedNo`sys_dictionary`DictionaryDesign Choice - has a Class field and it’s in useYes`sys_filter`FilterDesign Choice - has a Class field and it’s in useYes`sys_hub_action_type_base`Action Type BaseDesign Choice - has a Class field and it’s in useYes`sys_import_set_row`Import Set RowDesign Choice - has a Class field and it’s in useYes`sys_portal_page`Portal PageDesign Choice - has a Class field and it’s not usedNo`sys_report_import_table_parent`Report Import TableWhat does this table even do?No`sys_transform_map`Transform MapI cannot find a reason this is includedNo`sys_transform_script`Transform Map ScriptI cannot find a reason this is includedNo`sys_user_preference`User PreferenceI cannot find a reason this is includedNo`sysauto`Scheduled JobDesign Choice - has a Class field and it’s in useYes`syslog`System LogI cannot find a reason this is includedYes## [My thoughts on extending tables](#my-thoughts-on-extending-tables)

I can categorize my opinions about when and why to extend a table into three reasons.

Edit: At the time I wrote this, there were two things I had not considered. One. Extending tables is really complicated.

ProsConsYou get all the fields from the parentYou get all the fields from the parentYou could add fields that may hit the limit of the technical length in SQLReporting on it can be difficultIf you need two records with the same unique value in the two tables, the system will not allow thisTo extend some of these tables is uncharted waters and may not work well see [sys_choice](https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0538947)### [Usability](#usability)

Assuming you have a table in mind;
Does it make sense to have/modify a “type” or “class” field and have one the table?
Also, does the new type inherently change the the record that it is very different?

If yes to both, extend, if not make new.

### [Scoped Access](#scoped-access)

Sometimes you cannot create or read records that you might want to use in a scoped app, see `sys_user_group`.
In this case it may make sense to extend that table if you want to create/modify those records. This is a
technical reason, and I feel they likely should not be extended still but must be.

### [Design Choice](#design-choice)

Generally, something will automatically extend a table, like Import Set Row.
Anytime you upload a new file as a data source that is extended.

This is done by adding a class field to indicate the class of record.
Some records with this only ever have one class, like `sys_auth_profile`.
Some have many like `cmdb_ci`, `sys_user`, and `task`.

## [Configuration items](#configuration-items)

Sometimes you gotta extend this to track things your work considers as a CI but ServiceNow has not. E.g. Rooms

In the example of Rooms, out-of-box there is a “Computer Room” CI class, but you may want to track conference rooms,
data closets, supply rooms, etc. In these cases in my opinion extending cmdb_ci makes sense.

## [Knowledge](#knowledge)

Knowledge is an interesting table to have here.
On one hand you could argue some Knowledge articles should be typed/classd differently.
I believe Knowledge already has this.

#ServiceNowDev #blog What is with the Custom Table Guide - Jace Benson 👨‍💻⚙️ (@jacebenson) [November 27, 2019](https://twitter.com/jacebenson/status/1199780073559203842?ref_src=twsrc%5Etfw)

Further Reading: [https://docs.servicenow.com/bundle/newyork-servicenow-platform/page/product/knowledge-management/concept/knowledge-article-templates.html](https://docs.servicenow.com/bundle/newyork-servicenow-platform/page/product/knowledge-management/concept/knowledge-article-templates.html)

## [Location](#location)

Location is an odd table to me to have on this list.

I’m trying to imagine a situation where you might have different location types, e.g. Offices, Kiosks, and Datacenters

In these cases I can’t imagine a situation you would need this extended. Now scoped apps cannot write to some common tables,
if that is the reason this is here that may make sense. If a scoped app needs a place to write to that is like location, but different
extend it and write to the extension. If that is the case though then I’d expect the same for Group Memberships

With all that being said, on initial look of the table, it does not sport a `sys_class_name` field.
However it also has “Extensible” as `false`.
If you change “Extensible” to `true`, then BOOM, now there’s a `sys_class_name` field.
I’m still not sure I agree with the all the ideas of this.
That being said it seems like a **Design Descision** now. - Jace 2019-12-16

## [Import Set Row](#import-set-row)

This is extended for each data source you upload, so I feel this is understandable.

## [Transform Map Script](#transform-map-script)

I don’t think this makes any sense. I can’t imagine why this would be extended.

## [Transform Map](#transform-map)

I don’t think this makes any sense. I can’t imagine why this would be extended.

## [Authentication Profile](#authentication-profile)

## [Action Type Base](#action-type-base)

## [Report Import Table](#report-import-table)

## [Dictionary](#dictionary)

I don’t think this makes any sense. I can’t imagine why this would be extended.

It has a class and it’s used but unless I can make a new field type (I thought that wasn’t possible.)

I dont see why this is a thing unless that **is** possible.

## [Choice](#choice)

## [System Log](#system-log)

I don’t think this makes any sense. I can’t imagine why this would be extended.

## [User Preference](#user-preference)

## [Filter](#filter)

I don’t think this makes any sense. I can’t imagine why this would be extended.

## [Portal Page](#portal-page)

I don’t think this makes any sense. I can’t imagine why this would be extended.

## [Scheduled Job](#scheduled-job)

These are already extended to a number of types of jobs, but I’m not sure why I’d extend it.

Sysauto I extended all the time. Specifically `sysauto_script` for many integrations.
Including the SCCM integration that is close to what we have today.
And I used that same design for the all the integrations for security vulnerability. - @killswitch

## [Data Lookup Definition](#data-lookup-definition)

## [Data Lookup Matcher Rules](#data-lookup-matcher-rules)

## [State Flow](#state-flow)

This has a class, but just one. I’m not sure why this would be extended.

## [Execution Plan Task](#execution-plan-task)

These are old as dirt. It has two classes today but beyond those I’m not sure why I’d extend it more.

---
[View this page on GitHub](https://github.com/jacebenson/jace.pro/tree/main/./src/posts/2019/2019-11-26-custom-table-guide-what-is-this.md).

[Custom Table Guide: What is this?!](https://jace.pro/blog/custom-table-guide-what-is-this/) [Jace Benson](https://jace.pro) ![Jace Benson](https://jace.pro/icon-512x512.png)

---

*This content is from Jace Benson's ServiceNow and tech blog at jace.pro*
*Original post: https://jace.pro/blog/custom-table-guide-what-is-this/*
