Custom Content Block Types

This is one of those secrets I wish I would have discovered years ago because it really opens a world of possibilities within the CMS. This method was revealed to me by Brian Alson. There’s a few other ways of creating custom blocks types like this, but this one is by far the easiest.

If you’re creating a block that will contain “child” records, such as a slideshow, then I would suggest extending the child table from “content_link” table and either create a M2M table or a parent reference field back to the content block.

I would love to hear your comments or feedback if you guys find this useful.


  1. Thanks Nathan! I’ve recently subscribed to your blog and I’m learning alot from your posts. We are just getting started on the CMS side of Service Now and I’m not much of a UI/UX guy, but these videos and blogs are most helpful! Thanks and keep them coming!

    1. Yes, I didn’t show it in this video but in order for it to look right you’ll need to import the Bootstrap stylesheets.

  2. Nathan,

    Awesome! After working with you and seeing some of what you did. This puts it together and answers some of the questions I had about the rendering format of those content blocks. (Basically how the macro is chosen for a particular content block table).

    Rockstar. Simply put. Thanks again! Looking forward to catching up at K15.

  3. Thanks Nathan!!!

    You’re the hero!!! Watching this tutorial make me rethink on the custom content block which I thought was hell a lot of tough job. Thanks for making it simple and sweet!!!

    Will post comment if I want to know a bit more.

  4. I Really appreciate it,
    Anurag !! we want superNow guy joining the team like
    Nathan he will make our life simpler.

    Thanks Nathan.

  5. Hi Nathan, one thing I think is up in the air is, the Jumbotron is already in service now OOTB or do we need to do some extra work to implement it before?


    1. I am just using the jumbotron as an example, to get it to look right and yes, you will need to import the Bootstrap stylesheets for it to look right. However the point of the video was to show how to use custom content blocks to tie a table to custom HTML markup.

      1. Hi Nathan, thanks for this, yes, your feature is pretty awesome on the matter of what we can accomplish with it, I loved the fact that things can be changed by editing directly the table we created. Do you have this feature isolated in an update set?

        Thanks and keep on the good work!!

        1. I do not, but that’s just because it’s only an example and not fully built feature. Eventually I might build out some complete content blocks and release them as update sets

  6. Awesome post! A great addition to this is to also create a “*new content block” for the new content block type. Then you can just drag and drop a placeholder content block just like the other OOB types. You can use one of the *new dynamic blocks as an example.

    1. Kenneth,

      Yes!!! I didn’t include this in my video because I wanted to keep it under 10 minutes. But that’s a great suggestion for a part 2. Thanks for the suggestion 🙂

      1. Hello Nathan,
        Did you already created part 2? Because I was also wondering, how to create “*new custom content block” feature, because it is quite annoying to create item in a list first and just then place it to the page. Or is somewhere this scenario already described?
        Btw great post anyway.
        Thanks a lot for a reply

  7. I tried following along (I’ll admit I’m a n00b) but I’m using Fuji and I think I’m getting messed up with the naming conventions. Any advice to get it to work in Fuji?

  8. I figured it out. I was stuck in my application and needed to switch to global to set it up correctly.
    Thanks for the tutorial!

  9. is it possible to render a ServiceNow report this way and also render a different report based on a current month.

    Very cool

    1. Reports are completely different from content blocks. You could technically create a “report” content block but you would have to create the form, logic and rendering yourself. It would take a lot of work and you would basically be reinventing the wheel. You could also use a dynamic content block with GlideRecord to fetch the data, populate a JSON object, and use a jQuery Graphing plugin to display it… however again, your creating it from scratch and not using any OOB reporting.

  10. Good stuff thanks for sharing!

    I find that using useful as well when needing to add custom JS to your custom Content Block(s), but is this the best way? Do you use UI Scripts in this way or add JS differently? Also, just for fun on the for UI Scripts I added a URL field and UI Actions to so it can call out to the JS file as it changes; pretty much the same as the Style Sheets can be update or changed. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *