1st ServiceNow Benelux User Group meeting is a fact!

General No Comments »
by: Fred Kouwenberg / 2e2


We are proud and enthusiastic to announce the 1st ServiceNow Benelux User Group meeting and we would like to invite you to join us on this first meeting from many more to come.

Date/time: June 14, 2012 – 08:45am – 13:00
Location: Patrijsweg 90, 2289 EX Rijswijk, The Netherlands
(hosted by 2e2 Consulting)

Agenda:

08:45 – 09:00 Registration and Coffee
09:00 – 09:05 Welcome by Richard Poolman, Regional Director ServiceNow Benelux
09:05 – 09:30 ServiceNow Benelux User Group: Organization, Goals & Next Steps
09:30 – 10:30 Highlights & Feedback from Knowledge12 – New Orleans
10:30 – 10:45 Coffee break
10:45 – 11:30 Using ServiceNow as Timewriting system
11:30 – 12:00 Being a ServiceNow customer for more than 4 years…
12:00 – 13:00 Closing – Lunch and opportunity to network



Speakers include:

  • Richard Poolman (Regional Director Benelux)– ServiceNow
  • Rik Burgering (Senior ServiceNow Consultant) – 2e2 Consulting
  • Wouter Revenberg (Service Manager IT4IT) – NXP Semiconductors
  • Gerrit Zevenbergen (Senior Applicatiebeheerder) – PwC

Registration:

  • Please send us an email on usergroup_BLX@service-now.com if you want to join this 1st ServiceNow Benelux User Group meeting.
  • Email registration required to account for enough coffee and lunch.
  • ServiceNow business partners can send only 1 participant – the User Group is customer-focused.

Routedescription:  Show on Google Maps

 

patrijsweg-90-google-maps-image

Updating data in ServiceNow using XML Export – Import

General No Comments »
by: KP Meinesz / 2e2

When working with databases it is common practice to import data into the system coming from a CSV or Excel formatted file.
ServiceNow has the tools to effectively import new data.
No problem.
But what if the data delivered in the Excel sheet has to be merged with data that is already in the system?!

At that point there are two options. One is to define functionality in ServiceNow to merge data.
But is also possible to export the data in XML-format from ServiceNow, merge the data in Excel and perform a simple XML import (right click on a list view header).

The steps needed to perform this export-import is discussed below.

In this case a list of new phone details are provided via Excel and have to be loaded into ServiceNow.
The only additional attribute in the Excel is the email address.
The email address will be needed to link the data in ServiceNow and the Excel together.

Step1

Create XML export of users to be modified.

Continue reading…»

Attach a report attachment to a record

General No Comments »
by: Ritesh Autar / 2e2

It sounds simple to do in ServiceNow, but in fact it is not something that works out of the box. What the customer wanted was to compare imported CIs by a discovery tool with the CIs in ServiceNow using scheduled imports and reports. As a result of the comparison several reports are created. The customer didn’t want to send the report by email but wanted to open a catalog request and attach the reports automatically.

We didn’t want to build advanced functionality to accomplish this so we used out of the box ServiceNow functionality.

The following solution has been configured.

The email table

Whenever a report is being emailed an attachment will be stored in the sys_attachment table. This attachment can be used to put in the target record. Since the email should not be send out we’re going to prevent the email from being sent out.

Request

The request is going to inserted by a script whenever a report is being created. This script will also copy the attachment from the email to the target request.

Steps to build

Continue reading…»

Which Assignees have no incidents assigned to them..??!!

General No Comments »
by: Tim Willer / 2e2

“I cannot see which users in my assignment group are not assigned to any incident”.
A valid remark of a customer, which had multiple assignees in multiple assignment groups, and each assignee needed to have three active incidents per assignment group. How can we make this happen?

Database view

First I needed to get the info of the assignment group, the user and the incidents in one view. The most practical way to get this in one overview is by using a database view. In this view we need the assignment group and the users (retrieve this from the sys_user_grmember table) and the incidents (we can use the task table). See below the database view I have created.

assign-1

As you can see I used a ‘Where clause’ to relate the task ‘Assigned to’ and ‘Assignment group’ from the TASK table to the ‘User’ and ‘Group’ field on the SYS_USER_GRMEMBER table. Be sure to set ‘Left join’ on the TASK table to true.

We will receive a list of all users in all assignment groups that are assigned to a task. We can now see that Fred Luddy is not assigned to any TASK in assignment group ‘RMA Approvers’ (as the number is (empty), but Fred Luddy is assigned to an incident in assignmet group ‘Network’ (we can see an incident number).
Continue reading…»

Same user-ids in LDAP as in ServiceNow: authentication will fail

General No Comments »
by: Richard Lurks / 2e2

Last week my colleague Olivier Cramer wrote an article on how the ServiceNow password generator can make life easier and this week I thought I would add to that same topic a short article.

When you have been using ServiceNow for some time already and there is a need to integrate with an LDAP-based directory service the following situation might occur:

  • You successfully enabled the LDAP/AD integration
  • But you had a (large?) amount of users already created with the same user-id as in LDAP


In this situation the authentication will fail.
But the old password will work.

To get rid of the passwords you cannot leave the password empty for safety reasons.

But the following little script will do the trick! :-))

var usr = new GlideRecord("sys_user");
//Replace user_name to modify filter
usr.addQuery('user_name',' User.Name');
usr.query();
while(usr.next()) {
   gs.print("USER X = " + usr.user_name + ". Password = " + usr.user_password);
   usr.user_password = '';
   usr.update();
   gs.print("USER X = " + usr.user_name + ". Password = " + usr.user_password);
}

Keep in mind that you cannot login without a password.
Now wait for the sync and you are good to go!

Any questions? Send me a mail on richard.lurks@2e2.nl

Where the ServiceNow password generator can make life easier

General No Comments »
by: Olivier Cramer / 2e2

Providing passwords to existing or new users can be time consuming.  If you need to provide a new password to one user you have to manually update the user record with a new password and add this password to a separate email which will be send to the end-user.  When you have to update multiple users with new passwords this will take even more time.

By reusing the password generator time can be saved by automating some of the actions mentioned above.

Password generator

The password generator is part of the “Self Service Password Reset” plugin and can be used by the end-user to request a password reset that is automatically handled by the system. When this request is made by the user the generator creates a password based on an algorithm after which it is send to the end-user by email.

There can be numerous ways to trigger this password generator. In this blog I will focus on one of them.

On the user record (sys_user table) the field “Password needs reset:” can be used as a trigger to generate a new password and to send out an email to the user with this new password. When the mentioned field is used as a trigger the user is also requested to adjust this generated password to a new one when logs in with this password.

New implementations and user maintenance

When a new implementation is planned that will be used by a large amount of new users you can use the password generator to lower the amount of work for the support team. By mass-updating the field “Password needs reset:” on the new user records, emails with the new passwords are automatically send by the system. This replaces the manual updating of the password field on all user records and also the sending of the emails with the credentials to all new users.

Some customers do not allow the use of the “Forgot your login credentials?” because of misuse and related security issues.
This means that existing end-users will have to contact the support desk to reset a password. To lower the amount of work that comes with these requests the support team can use the password generator. For each request they can use the “Password needs reset:” field in combination with the provided script to prevent the manual update of the password field on the user records with a new password. Also no separate email will have to be created by the support team member with the new credentials.

Passwords and compliancy

Passwords are from a compliancy perspective not that exiting to audit. Most tools deal with password rules that can be enforced to meet a specific set of characters that can be easily checked. In ServiceNow you can enable this by activating the ValidatePassword and ValidatePasswordStronger scripts.
These are by default inactive and can be found under System Definitions > Installation Exits.

More interesting is the process around the providing of these passwords. Often users are provided with a default password that an Application Administrator creates for them. This is something like WELKOM123, WELKOM with the date behind it or another simple password.  These passwords are very risky because they are highly guessable. Also the Application Administrator knows the password that he has provided to the end user. If he wants he could harm the organization by logging in with the user’s credentials and execute unauthorized actions under the name of the user.

By using the password generator to provide passwords to new and existing users the above situation will not occur anymore. An auditor will also be very pleased whit this approach regarding the provisioning of passwords.

Script

The business rule script that can be used to trigger the password generator by the field “Password needs reset:” field is the following:

Condition:

current.password_needs_reset.changes(true)

Script:

var pnr = new PasswordResetAJAX();
var currentuser = current.user_name
var useremail = current.email</em>

pnr._resetPassword(currentuser, useremail);

If needed the default password reset notification that is send by the password generator can be adjusted so that it also reflects password creations that have not been triggered by the end user with the “Forgot your login credentials?” . This can be done under System Policy > Notifications

If you have any questions you can contact me on olivier.cramer@2e2.nl

Defining and differentiating SLA’s using service levels Gold, Silver and Bronze

General No Comments »
by: Benjamin van de Water / 2e2

On every implementation of ServiceNow we get to the point we start talking about implementing SLA’s. When I ask: “Do you have SLA’s defined”? I always hear; “Of course we have”. However, the difficulty is always to get a clear understanding of the definitions needed to configure ServiceNow.

In this blog I will explain how SLA’s can be defined with the help of a simple template and how you can differentiate your SLA’s using Service Levels gold, silver and bronze based on the selected CI on your Incident record.

Defining your SLA’s

The first step before you can start configuring your SLA’s in ServiceNow is to make clear definitions of the SLA’s you would like to run against i.e. your Incident record. I use the table below as a starting point with some examples for a reaction time and resolution time SLA. As you can see you need to know when to start, pause and stop an SLA and for how long you want it to be running in order to achieve your SLA.

sla-1

Create possibility to define SLA level’s on CI’s

Since I would like to differentiate between service levels gold, silver and bronze based on the selected CI on the Incident ticket, I also include the SLA level as a start condition. Before you can define these conditions in ServiceNow you’ll need to create a dropdown list first, because the SLA level isn’t an out-of-the-box option. You can do this by creating a new dictionary entry in the table Configuration Item (cmdb_ci).
Continue reading…»

Notify users when their email is not related to a ticket in ServiceNow

General No Comments »
by: Tim Willer / 2e2


As my colleagues have written a couple of blogs about the email functionality in ServiceNow, I asked myself; what happens when ServiceNow does not process an incoming email notification as expected by the user. In some cases, ServiceNow will not relate incoming email notifications to any ticket, without informing the user. A simple notification in return to the user can save a lot of calls from indignant users to the Service Desk.

As this is not a difficult adjustment in ServiceNow, knowing when to send back a notification is a little bit harder.
For example; incoming email notification that are marked as ‘Junk’ by ServiceNow do not need a notification in return.
Also incoming email notifications in the ‘Inbox’ are way too early as they are not yet fully processed.
And – do you want to inform only ‘known’ users (who are registered in your ServiceNow instance) or any user that sends email to ServiceNow?
Also timing is essential; do you want to send notification back once a day or each half hour?

In this blog I created a business rule that will only pick-up email that is received within the last hour and is received from registered users and the email notification is in the ‘Received’ mailbox.
The email notification may not be in the state ‘Ready’ and most important the field ‘Table target’ is empty. I also created a scheduled job that will trigger the business rule each hour of the day. This is repeated each hour and notifications to the users will be sent at most, one hour after being received by ServiceNow.
Business Rule
What we need is a business rule that will only pick-up email notifications that are within my scope. I named the business rule to ‘Check not related email’ and let it run on the ‘sys_email’ table. I used an encoded query to determine the timespan which is required (the last hour). As this business rule will be triggered by a scheduled job, I did not use the ‘insert’, ‘update’, ‘delete’ or ‘query’ options. The following condition is applied:

current.mailbox == 'received' && current.state != 'ready' &&  !current.user_id.isNil() && current.target_table.isNil()

Continue reading…»

Importing Attachments from another ServiceNow instance

General No Comments »
by: Marco Coufreur / 2e2

A couple of weeks ago I had to migrate data which contained many attachments from one ServiceNow instance to another ServiceNow instance. I found out that it was not as straight forward as I expected it to be. Most of the information is available on the ServiceNow Wiki and ServiceNow community, but it took me some time to gather it all and to transform the information into a working import. I’m sharing my experience here with you and if you know of have a better way to do this, please let me know.

How attachments are stored

First some background information about attachments in ServiceNow. You can find a clear description of how ServiceNow stores attachments in the database in the ServiceNow Wiki article “Administering Attachments”:
When you store an attachment to any table, a record is created in the sys_attachment table that contains attachment metadata, and the file data is stored in the sys_attachment_doc table, in 4k chunks. For example, if you attach a 12k file called My_attachment.pdf, then you would have a sys_attachment entry with 3 related sys_attachment_doc entries.

schema

The relation between the record in any table and its attachment is created with a Document type reference. The two fields table_name and table_sys_id in the attachment table work together to reference the record in any table, for example a company in the company table. See the ServiceNow Wiki article “Creating a Document ID Field” and our SNC-Blog article “Enable use of variables in Change Task” for more information. The relation between the attachment metadata and the file data is created with a standard one-to-many reference.
Continue reading…»

Script Include – helps you prevent duplicate work and keep your desk clean

General No Comments »
by: Martijn Odijk / 2e2

Any developer knows the feeling “I think I have done this before, but where is this code?”
In this short article I would like to show some (obvious) advantages of using Script Includes to their fullest.
There are several reasons to move as much server side code as possible to Script Includes.
First of all Script Includes are accessible from any other server side code, and secondly they will only be accessed whenever they are actually needed (which prevents unnecessary checks in Business Rules that will not run anyway).
Recommendation is to set up a script include for every table that has any custom methods.
Depending on the exact setup, you can decide what your initialization should look like:

Name: CustomTableUtilsClass
Description: Class that contains methods that may be used on several occasions
Script:

var CustomTableUtilsClass=Class.create();

CustomTableUtilsClass.prototype={
// initialize your class.
    initialize: function(gr){
            // the parameters that you define here, depend on requirement.
            // you can pass the GlideRecord,
            // or just the sys_id of the current record.
            // if the methods have nothing to do with "CustomTable",
            // then it may be wise(r) to define the functions
            // in a separate Script Include
            this.curRecord=gr;
            this.curID=gr.sys_id;
    },

// declare the functions that are available for the developer
    Functionality1: function(){
        var sResult=this._doStuffWith(this.curRecord);
        return sResult;
    },

   
// set up some assisting functions
    _doStuffWith(gRecord){
        var sClass=gRecord.getClassDisplayValue();
        return sClass;
    },

    type: CustomTableUtilsClass
}

So far pretty straight forward, right?
Continue reading…»