Bootstrap Dropdowns in Fuji

I've been getting a lot of email lately about Bootstrap dropdowns no longer working in Fuji. Even some of the old JavaScript solutions that seemed to resolve the conflicts between Prototype.js and Bootstrap.js no longer seem to be working in Fuji. The issue is being worked on and hopefully should be resolved in an upcoming patch, however until then I offer this simple, hacky but working solution: [crayon-656b508c9fe7c633469249/] In the few cases where I have tested this, it seems to resolve the problem and dropdowns go back to working as usual.

ServiceNow CMS issues in Fuji

If you have upgraded to Fuji you might have discovered that it caused some issues with your CMS portal. The main issues being: A modified version of Twitter Bootstrap is already included Not all UI scripts execute The version of bootstrap that is included has some changes to it (such as modified media queries) that can cause some negative side effects to your site. The good news is that it can be disabled by creating a system property called "glide.ui.heisenberg.exclude" and setting it to "view_content". Once set, you will need to include your own version of Bootstrap if needed. The issue with UI scripts will be fixed in Fuji Patch 2, however the work around is to include empty script tags (<script></script>) in front of all your existing <script> tags. The issue is that it is skipping every odd numbered script tag. Example: [crayon-656b508ca0f1f279656638/] Only alert 2 and 4 would be executed. So until you are able to upgrade to Fuji Patch 2, the solution is to include the extra script tags.

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.

I Need Your Help!!! (an exciting announcement)

I have accepted an offer to come back to ServiceNow and join the UI team, focusing specifically on CMS. I'm very excited and humbled by this incredible opportunity. Now this is where I could really use your help. Below are 3 questions regarding your experience with CMS, if you could take a moment to provide some feedback I would really appreciate it. You will help in shaping the future of the ServiceNow content management system. With the existing CMS, what are some of the biggest pain points and frustrations? If ServiceNow were to build a new CMS, what would that look like and what features would you like to see? How important would a mobile portal be for your organization and users?

CMS Dynamic Edit Page Button

Jumping between the page preview and the page editor is always a pain. Even with multiple tabs I always seem to loose the edit page screen, so I've created this UI Macro which puts a "Edit Page" button on every page. When editing a page it changes to "View Page". Hope you enjoy and let me know if you find this useful. Create a UI Macro with: Name: "render_cms_edit_button" XML: [crayon-656b508ca2da5814757888/] Insert the content block in to your site layouts at very bottom using [crayon-656b508ca2dad828998909/]

Modifying UI Pages & Macros without affecting upgrades

In the Wiki you will find solutions that include updating OOB Macros or UI Pages, however this will obviously cause those files to be skipped during the next upgrade. So how do you go about updating UI Pages and Macros (or other records) without future upgrades being impacted? The answer is actually quite simple. I discover this little nugget in the Wiki: By default, the Active field on a tracked table is treated as update_exempt even if the attribute is not present (starting with the Calgary release) This means that if we clone the original record, set the original record to "active=false", then we can continue to make changes to the copy record without affecting the upgrade process. The only thing to note is after an upgrade you will want to check the difference between the files so in the event there was a change, you can manually upgrade your updated record.

UI Pages without all the extra platform HTML

If you create a empty UI pages you will notice that without anything on the page, the platform has already loaded in a ton of platform code including JavaScript (js_includes), CSS (css_includes), as well as quite a bit of HTML. If you are looking to build a page that includes jQuery, Angular, Bootstrap, or other JavaScript or CSS library, chances are you will run into a conflict. The following trick was originally brought to my attention by Will Leingang, who recently wrote a blog post about it. However because I think this is a very important trick to know, I am going to post it as well. The solution is to append "?sysparm_direct=true" to the end of the URL (after .do). Before: After: This method technically also works for CMS pages, however because CMS pages also load some additional javascript files to the page, if you remove the framework template you will get several JavaScript errors. There are some ways around this as well but require overloading some platform files, so that will be beyond the scope of this blog post.