Let’s Meet at Knowledge 2020!

The Knowledge 2020 Digital Experience is just around the corner and we want to talk with you! The team and I will be hosting sessions, scheduling live demos, and meeting with you about everything portals and user experience. If you would like to schedule some time to meet, fill out this quick form and we will arrange a time to meet with you. We'll see you in May! [contact-form-7 id="56309" title="Knowledge 2020"]

UI Bootstrap in Service Portal

UI Bootstrap in Service Portal You may already be familiar with the $uibModal service in Service Portal, but did you know there is a whole library of useful directives and services available in UI Bootstrap?  UI Bootstrap is a client-side library of Bootstrap components written in AngularJS and contains 20 directives that offer a consistent framework, responsive design, and cross-browser compatibility when developing in Service Portal. Although UI Bootstrap is considered feature-complete and is no longer being maintained, Service Portal currently includes UI Bootstrap version 1.1.2. Here are the UI Bootstrap directives. Accordion (ui.bootstrap.accordion) The accordion directive builds on top of the collapse directive to provide a list of items, with collapsible bodies that are collapsed or expanded by clicking on the item’s header. Alert (ui.bootstrap.alert) This directive can be used both to generate alerts from static and dynamic model data (using the ng-repeat directive). Buttons (ui.bootstrap.buttons) With the buttons directive, we can make a group of buttons behave like a set of checkboxes (uib-btn-checkbox) or behave like a set of radio buttons (uib-btn-radio). Carousel (ui.bootstrap.carousel) Carousel creates a carousel similar to bootstrap’s image carousel. Collapse (ui.bootstrap.collapse) Resize window to less than 768 pixels to display mobile menu toggle button. Dateparser (ui.bootstrap.dateparser) The uibDateParser is what the uib-datepicker uses internally to parse the dates. You can use it standalone by injecting the uibDateParser service where you need it. Datepicker (ui.bootstrap.datepicker) The datepicker is flexible and fully customizable. You can navigate through days, months and years. Dropdown (ui.bootstrap.dropdown) Dropdown is a simple directive that will toggle a dropdown menu on click or programmatically. Modal (ui.bootstrap.modal) $uibModal is a service to create modal windows. Creating modals is straightforward: create a template and controller, and reference them when using $uibModal. Pager (ui.bootstrap.pager) A lightweight pager directive that is focused on providing previous/next paging functionality. Pagination (ui.bootstrap.pagination) A lightweight pagination directive that is focused on providing pagination & will take care of visualizing a pagination bar and enable/disable buttons correctly! Popover (ui.bootstrap.popover) A lightweight, extensible directive for fancy popover creation. The popover directive supports multiple placements, optional transition animation, and more. Position (ui.bootstrap.position) The $uibPosition service provides a set of DOM utilities used internally to absolute-position an element in relation to another element (tooltips, popovers, typeaheads etc…). Progressbar (ui.bootstrap.progressbar) A progress bar directive that is focused on providing feedback on the progress of a workflow or action. Rating (ui.bootstrap.rating) Rating directive that will take care of visualizing a star rating bar. Tabs (ui.bootstrap.tabs) AngularJS version of the tabs directive. Timepicker (ui.bootstrap.timepicker) A lightweight & configurable timepicker directive. Tooltip (ui.bootstrap.tooltip) A lightweight, extensible directive for fancy tooltip creation. The tooltip directive supports multiple placements, optional transition animation, and more. Typeahead (ui.bootstrap.typeahead) Typeahead is an AngularJS version of Bootstrap v2’s typeahead plugin. This directive can be used to quickly create elegant typeaheads with any form text input. Check out the full UI Bootstrap documentation here: https://angular-ui.github.io/bootstrap/ How have you used the UI  Bootstrap directives in your Service Portal projects? Let me know in the comments below.

spUtil API Reference Cheat Sheet

Overview spUtil enables you to perform common functions in a Service Portal widget client script. You can access the methods by passing in spUtil as a parameter in your client-script function. Many of these methods have not been documented by ServiceNow, so we have combed through the source code once again to bring you another Service Portal cheatsheet! Save time and maximize your productivity with this quick reference document for you to use day-to-day. Enjoy!

Top 5 Features in the Orlando Release

This year's Orlando release is full of great new functionality and updates to the ServiceNow platform. Needless to say, there were a ton of features to cover, so instead of compiling an enormous list, I've put together this video of my personal top 5 features. I bet at least a couple of these will surprise you! Check out the video. Let me know in the comments below if you agree or if you feel there is a big feature that should have made the list. The official release notes can be found here: https://docs.servicenow.com/bundle/orlando-release-notes/page/release-notes/family-release-notes.html

Featured Portal: Multinational Retailer

OVERVIEW With over a million employees worldwide, this multinational retailer wanted to deliver an intuitive and scalable employee experience with personalized content based on the users' location, language, and business area across 6 departments. PROJECT GOALS Make it MaintainableBased on development best practices, reduce or eliminate custom code to allow for future upgrades Make it PersonalPersonalize the data by correctly applying user criteria based on location, language, and business unit Define StandardsCreate well defined UI styling and standards that the client could use for internal updates Improve NavigationRedefine the catalog taxonomy and implement more user-friendly language throughout the portal      Learn more about the details of this project by reviewing the full case study featured on the NewRocket website:

Custom Native Mobile Apps on ServiceNow

I get asked a lot about mobile and how to deliver branded mobile experiences on ServiceNow. For years the answer has been to use Service Portal since it's responsive and can be themed to function really well on mobile devices. This has worked quite well for many use-cases, but it still requires accessing through a browser or ServiceNow Classic, and it's still not the same experience that we've all come to expect from a native mobile app. 54% of employees expect their employers to provide mobile-optimized tools Source: https://research.servicenow.com/ Some of this has changed with the release of the Now Mobile app, but it is ServiceNow branded, lives in the app stores under ServiceNow's name, and requires entering of the instance name and credentials. It may be great for roled users, fulfillers, or users at least familiar with ServiceNow, but there are still many use-cases when using the Now Mobile app does not seem ideal. Consider, for example: Local governments or municipalities enabling anonymous citizens to report issues Universities using ServiceNow for managing student requests Product companies offering support via ServiceNow to its customers Enterprise organizations wanting to provide their employees with a tailored and branded experience In many of these cases, it seems the ideal scenario would be a dedicated app, in the app stores, with the organization's branding, and with the specific features for that target audience. This compelled us to explore what it would take to develop cross-platform mobile apps. Apps fully integrated with ServiceNow, with custom branding, feature specific UI's, and taking full advantage of the mobile capabilities such as geolocation, maps, push notifications, and camera features. We've chosen to build our current platform on React Native, as this allows for both iOS and Android apps with a single code base, but we're also exploring a version in Swift and Java. In the video above, you can see some of the example apps that we've been prototyping. The goal of the project has been to follow the same conventions as Now Mobile, leveraging the same APIs, ensuring a sustainable architecture. As of this writing, we have not yet released any publicly available apps into the store... but we are working with some of our early adopter customers on some innovative new mobile solutions. To learn more about these projects and our native mobile capabilities, please contact us or visit newrocket.com for more information. I would love to hear your comments or feedback below. What are some use-cases where a mobile app could really improve the user experience?

Lodash in Service Portal

Lodash in Service Portal There are a number of client-side libraries included in Service Portal. We will be going over some of them in this next series, starting with the Lodash library. The version of Lodash that is included in the Service Portal is 4.17.11. Please keep in mind that Lodash is only available client-side, so you can use it in your Client Script, but not in your Server Script. About Lodash Lodash is a JavaScript library that helps programmers write more concise and maintainable JavaScript and contains tools to simplify programming with strings, numbers, arrays, functions, and objects. You can find the full documentation here: https://lodash.com/docs Lodash can be broken down into several main areas: Utilities - for simplifying common programming tasks such as determining type as well as simplifying math operations. Function - simplifying binding, decorating, constraining, throttling, debouncing, currying, and changing the pointer. String - conversion functions for performing basic string operations, such as trimming, converting to uppercase, camel case, etc. Array - creating, splitting, combining, modifying, and compressing Collection - iterating, sorting, filtering, splitting, and building Object - accessing, extending, merging, defaults, and transforming Seq - chaining, wrapping, filtering, and testing. Some examples Lodash contains hundreds of helper functions. Although I can't go through all of them here, I have put together some common examples. OBJECTS _.clone(value) Creates a shallow clone of value. [crayon-673235d5647c8474693602/] _.assign(object, [sources]) Assigns own enumerable string keyed properties of source objects to the destination object. Source objects are applied from left to right. Subsequent sources overwrite property assignments of previous sources. [crayon-673235d5647d2211286090/] ARRAYS _.times(n, [iteratee=_.identity]) Invokes the iteratee n times, returning an array of the results of each invocation. The iteratee is invoked with one argument; (index). [crayon-673235d5647d4750415321/] _.uniq(array) Creates a duplicate-free version of an array, using SameValueZero for equality comparisons, in which only the first occurrence of each element is kept. The order of result values is determined by the order they occur in the array. [crayon-673235d5647d6624955079/] FUNCTIONS _.bind(func, thisArg, [partials]) [crayon-673235d5647d8679291441/] COLLECTION _.includes(collection, value, [fromIndex=0]) Checks if value is in collection. If collection is a string, it's checked for a substring of value, otherwise, SameValueZero is used for equality comparisons. If fromIndex is negative, it's used as the offset from the end of collection. [crayon-673235d5647d9970872323/] _.filter(collection, [predicate=_.identity]) Iterates over elements of collection, returning an array of all elements predicate returns truthy for. The predicate is invoked with three arguments: (value, index|key, collection). [crayon-673235d5647db428521335/] _.find(collection, [predicate=_.identity], [fromIndex=0]) Iterates over elements of collection, returning the first element predicate returns truthy for. The predicate is invoked with three arguments: (value, index|key, collection). [crayon-673235d5647dd055014121/] SEQ _.chain(value) Creates a Lodash wrapper instance that wraps value with explicit method chain sequences enabled. The result of such sequences must be unwrapped with _#value. [crayon-673235d5647de822232314/] _.sortBy(collection, [iteratees=[_.identity]]) Creates an array of elements, sorted in ascending order by the results of running each element in a collection thru each iteratee. This method performs a stable sort, that is, it preserves the original sort order of equal elements. The iteratees are invoked with one argument: (value). [crayon-673235d5647e0353635864/] _.map(collection, [iteratee=_.identity]) Creates an array of values by running each element in collection thru iteratee. The iteratee is invoked with three arguments: (value, index|key, collection). [crayon-673235d5647e2345967278/] Conclusion Although some Lodash methods are becoming native JavaScript functions with ES6, there are still many useful methods that complement functional programming in Service Portal. For more on Lodash, check out the website: https://lodash.com For a Lodash cheatsheet, check out: https://devhints.io/lodash What other Lodash methods do you find useful in Service Portal? Let me know in the comments.

Featured Portal: Merck Group

OVERVIEW Merck is a German multinational pharmaceutical, chemical, and life sciences company headquartered in Darmstadt, with approximately 50,000 employees in 70 countries. Merck came to NewRocket to build a unified portal experience that seamlessly combined multiple departments and processes, but still allowed each department to have some autonomy. PROJECT HIGHLIGHTS   Ticket System Implemented a new ticket system that provides Merck employees with a consolidated view of their tickets across all departments. Defined Catalog Designed a dashboard that displays top destinations filtered through user criteria, allowing users to navigate the catalog and submit items more efficiently. Subsidiary Impersonation Provided enhancements that allow selected users to request different services or view knowledge articles on behalf of another user. Accurate Translations Utilized our translation tool to supercharge translation efforts, promote maintainability, and improve communication for Merck's global user-base.     We helped create an organized portal structure that accommodates a modern design experience and streamlines Merck's inter-departmental processes. Click the link below to view the full case study, or visit NewRocket.com to see our products and services.