Licenses and Windows 2003 SP2

Recently we upgraded our installation of Magic 7.51 to Service Desk Express 9.20. Our previous installation was on a single server, Windows 2000 and SQL Server 2000 SP4. Moving forward, we decided to split the application and database server, moving to Windows 2003 R2 SP2 and SQL Server 2005 SP2. The “upgrade” (if you can call it that given that it was a fresh installation of SDE 9.20 and migration of all data) went very well (all things considered) and on the Monday morning we had a very successful release – too successful!

Everyone knew we were doing the upgrade but everyone except us had forgotten – as such as people arrived for work people started talking about the new Magic and they started logging on to take a look. Before very long we breached our license count – the very same license count that had been working perfectly for the last three years! So what was the problem?

The answer was a surprise – there WAS a genuine increase in use as a result of a new and nicer looking Service Desk Express. However, the real problem was a technical issue – the Session_OnEnd() event of a classic ASP application (located in global.asa in C:Program FilesBMCService Desk ExpressApplication Server) running on Windows 2003 SP2 does NOT fire. Have a guess where the code that releases the license lives? (See below).

Sub Session_OnEnd()
...
'Aveneri - 42128 - Remove User for this session.
Application("UserTrack").UserEnd DbConn, cstr(Session.SessionID)
...
End Sub

This is a known issue with Microsoft and BMC and there is a workaround available from Microsoft for this (http://support.microsoft.com/kb/934903/en-us).

Anyway, thought I would pass on the information for anyone who this might affect – in the next post I will hopefully have some good news re a new project that, with a bit of luck might reduce some pressure on organisations license count. Thanks for reading – as always any comments are most welcome.

The Curse of the Severity Message Box

I guess one of the clever features of Service Desk Express is its ability to calculate the Due Date for a ticket based on its Urgency (or even Priority in version 9.6). If the Urgency of a ticket changes during its lifecycle Service Desk Express needs to know what rules to apply for the recalculation of the Due Date.

Enter “The Curse of the Severity Message Box.”

So, I am guessing everyone is familiar with this popup message that appears when the Urgency changes:

Standard Severity Message Box

So the problem is that this message box is not configurable and if your delightful colleagues don’t change the selector and just click OK then the due date is left as it was – which in the case of when there isn’t a due date populated then that means there is still no due date!

So I thought I would post a couple of hacks that might help if this issue is causing your organisation pain. The result of all the hacks (which don’t have to all be applied) looks like this:

Modified Severity Message Box

The results of this are:

  • The users can only choose Recalculate Due Date based on Open Date.
  • The Cancel button is disabled.

I believe this is what is called a “Belt and Braces” approach 🙂

You are about to hack an HTML page and as such I would stongly suggest you make a back up of it!

All the hacks are applied to one file so open C:Program FilesBMCService Desk ExpressApplication Serverhtmlseveritymsgbox.htm in Notepad.

Default to Something Other Than “Do Not Recalculate Due Date”

Find:

<input CLASS="InputLabel" checked type=radio ID="radio1" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" >

Replace With:

<input CLASS="InputLabel" type=radio ID="radio1" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" disabled>

This will remove the current default AND disable this radio button. I you don’t want to disable it, just remove the word “disabled” above.

Find:

<input CLASS="InputLabel" type=radio ID="radio2" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" >

Replace With:

<input CLASS="InputLabel" checked type=radio ID="radio2" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" >

The word “checked” will cause this radio button (“Recalculate Due Date based on Open Date”) to be selected by default.

Find:

<input CLASS="InputLabel" type=radio ID="radio3" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" >

Replace With:

<input CLASS="InputLabel" type=radio ID="radio3" NAME="radio" STYLE="BORDER-BOTTOM: none; WIDTH: 20px;" disabled>

This will disable this radio button. I you don’t want to disable it, just remove the word “disabled” above.

Disabling the Cancel button

Find:

<button CLASS="InputButton" TITLE=MGC_PL_LABEL_10 id="CANCEL" name="CANCEL" ONCLICK="window.close()" oonMouseOut="style.color='black'" oONMOUSEOVER="style.color='white'" STYLE="width:100%;cursor:hand;" MGC_PL_LABEL=10></button>

Replace With:

<button CLASS="InputButton" TITLE=MGC_PL_LABEL_10 id="CANCEL" name="CANCEL" ONCLICK="window.close()" disabled oonMouseOut="style.color='black'" oONMOUSEOVER="style.color='white'" STYLE="width:100%;cursor:hand;" MGC_PL_LABEL=10></button>

When your done applying all your changes, save the file and you should be good to go.

Hope this helps. As always, comments (positive and negative) always appreciated.

Email Conversation – Mandated Subject Lines and Signature Blocks

So I am finally coming to the end of a piece of work I am doing for one of our contracts and there was a genuine need to mandate a phrase at the beginning of every email from the Service Desk and also include the signature block of the user sending the email. Whilst the solution to doing this wasn’t exactly rocket-science, I thought it might save one of you guys the trouble if I posted my solution:

Mandated Subject Line:

So the first challenge was to mandate a phrase in the subject line. So by way of an example, let’s say that you wanted to make sure that the subject of every email sent by any staff member, started with “Service Desk Notification:” What I did was to create a simple client-side business rule (CSBR).

Conditions

On Data Change – <Any Field>
Expression 1 Comparison Operator Expression 2 Logical Operator
{SUBSTR,1,26,{TR,Subject} SS} NotEqual Service Desk Notification: None

Actions

Method Module Form
Populate Current Form Email Conversation Email Conversation
Field Name Value
Subject Service Desk Notification: {TR,Subject}

So basically, when ever a field is changed on the form (handles when a user doesn’t bother entering a subject), the rule checks to see if the first 26 characters of the new subject is “Service Desk Notification:”. If it is not then the rule appends the new subject to the words, “Service Desk Notification:”

Signature Blocks:

The second challenge was to automatically insert the signature block of the user sending the email using a standard IS Service signature block. The solution to this was a lot easier than I had imagined. I created another CSBR:

Conditions

On Save
Expression 1 Comparison Operator Expression 2 Logical Operator
       

Actions

Method Module Form
Populate Current Form Email Conversation Email Conversation
Field Name Value
Body {TR,Body}  

Regards,

{DB,Support Staff,Full Name,”Login ID” = ‘{MAGICUSER}’ DB}
IS Service Team
T: {DB,Support Staff,Phone,”Login ID” = ‘{MAGICUSER}’ DB}
F: {DB,Support Staff,Fax,”Login ID” = ‘{MAGICUSER}’ DB}
P: {DB,Support Staff,Beeper,”Login ID” = ‘{MAGICUSER}’ DB}
E: mailto: {MAGICUSER}@mydomain.com

You can track the progress of any of your tickets by visiting our Self-Service portal (http://servicedesk) and clicking on the link to My Tickets.

On save, the rule essentially goes and gets all the details from the Support Staff table for the user sending the email ({MAGICUSER}) and creates and appends the signature block. 

And that was it.

Making Training A Little Different

I have recently completed a project where we provided a training environment (application and database server) on the same physical network as the production environment. We put in place a scripted backup and restore for each Friday night such that the training environment has a sensible up-to-date set of training data.

The fear however, was that given that our users had shortcuts to both environments, there was a risk that someone might log into the wrong system and not realise. Consequently, we needed a way of differentiating between the two environments which we accomplished via cascading style sheets as shown below:

Production:

Standard SDE Login Standard SDE Dashboard

Training:

Training SDE Login Training SDE Dashboard

Achieving this is very simple:

Open default.htm from the C:Program FilesBMCService Desk ExpressApplication Serverhtml directory and replace the line:

<table style="height:99%;width:100%;background-color:0069A5;" cellspacing="0" cellpadding="5" border=0 bordercolor=yellow ID="TableLogin">

with:

<table style="height:99%;width:100%;background-color:FF0000;" cellspacing="0" cellpadding="5" border=0 bordercolor=yellow ID="TableLogin">

Save the file. That sorts out the Login page which isn’t a great deal of use if your organisation is using “Windows Authentication!”

Open Merlin Theme.css from the C:Program FilesBMCService Desk ExpressApplication Server directory in notepad. Scroll down until you find:

.navLEFT
{
BACKGROUND-COLOR: #2188c9;
BORDER-TOP: #ffffff 1px solid;
BORDER-BOTTOM: #196697 1px solid
}

and replace with:

.navLEFT
{
BACKGROUND-COLOR: #FF0000;
BORDER-TOP: #ffffff 1px solid;
BORDER-BOTTOM: #196697 1px solid
}

and similarly find:

.navBODY
{
BACKGROUND-COLOR: #2188c9;
}

and replace with:

.navBODY
{
BACKGROUND-COLOR: #FF0000;
}

Save the file and you have the desired effect.

Reporting Magic

So, it was about time that I released another project. Reporting Magic is for those of us who rather like Microsoft SQL Reporting Services and would like to use it as their reporting tool of choice for BMC Magic/SDE. Reporting Magic is a complete rewrite of all the reports available for Magic 8.0 in SQL Reporting Services. The Service Desk Express reports are currently being ported but will take a little longer. Two versions are available:

> Microsoft SQL Reporting Services 2000 with Visual Studio 2003 and

> Microsoft SQL Reporting Services 2005 with Visual Studio 2005

As with all my projects they are completely free. Any feedback would, as always, be greatly appreciated.

User Forms Gallery

In response to feedback given I had added a user forms gallery. The purpose of this page is to allow users to view images of other user’s forms. These forms can be for custom or out of the box modules including self-service.

To get your forms shown here simply drop me an email to alan@14j.co.uk including the images and I will upload them and provide the appropriate credit.

Enjoy.

Virtual directories and DNS entries

In Service Desk Express it is possible to install the application in a website(s) that is NOT the Default website in IIS. Using DNS entries this allows your users to access the core application and self-service via much shorter (easier to remember), resilient (i.e. servers can be renamed without application falling over) URLs. Whilst this is great for all us Service Desk Express users, this is not an option for Magic 8.0 and below. So what is the solution for them.

The easiest solution I have found is to open IIS Manager on the application server and create a new website called SDE. This should appear along side the Default Web Site NOT a virtual directory in the default web site. Call the new web site SDE and on the IP and Port Settings window select the IP address of the server rather than all and enter sde in the host header. Navigate to C:Program FilesBMCApplication Server or whatever the location is on your server. Select Run Scripts as well as the default Read and click finish.

Now the trick: Right click on the website you have just created and select properties. Click on the Home Directory tab and change the content to a redirection to a url and enter your http://servername/sde as the address. Click OK.

Finally, get your server admins to create a DNS entry (CNAME) pointing to the IP Address of the server or its name and you should now be able to type SDE into a browser window and automatically be taken there.

Obviously you can repeat this exercise creating another website for self-service etc.

As always, any feedback/comments always welcome.

Providing a common look and feel to all Service Desk Express forms

OK – so before anyone gets too excited and thinks that I (or BMC for that matter) have provided something like a template that all forms can inherit from (wouldn’t that be useful) – let me stop you there. I haven’t! However, as I got extremely bored of building the same forms and laying them all out slightly different, it became quickly apparent that some sort of template was needed. Apart from anything else, when others create forms on “my” systems it can quickly end up looking very disjointed/uncontrolled.

So, what follows is a template of numbers that will at least cause every form to have a similar look and feel and, although not perfect, is a fairly good match to the out of the box forms provided by BMC.

Control FG Colour BG Colour X Pos Width Y Pos Height
“Main Form” #FFFFFF
“Button Box” #DDDDDD 0 735 0 60
“Separator Line” #000000 0 735 20 0
“Open Button” 1 25 1 25
“Save Button” 36 25 1 25
“Copy Button” 51 25 1 25
“Clear Button” 76 25 1 25
“Delete Button” 101 25 1 25
“InActive Field” 663 20 5 20
“Previous Button” 663 Leave Blank 38 Leave Blank
“Next Button” 712 Leave Blank 38 Leave Blank
“Form Title Text” Dark Blue – Bold 7 100 33 20

Clearly, there is a whole bunch of other stuff that you could do as well – one thing I would also suggest is that you add the Sequence field next to the “Form Title Text” field as it makes integration/database queries much easier.

Anyway, hope this helps – as always comments (positive or negative) always welcome.

Self Service Authentication – Switching Between Authentication Options

Before Service Desk Express, when “Windows” authentication was not an option for the core product, the installer for Magic (whilst woeful in comparison to nowadays) used to have an option to have “Windows” authentication for Self-ServiceClient Services. Nowadays, the installer gives you the choice between “Windows” for the core product and for Self-Service or just the core product – ah, progress!

Anyway, for those organisations that want “Windows” for Self-Service but not for the core product, I thought I would post a quick “How-To:”

So, log onto the application server using, for example, remote desktop. Open IIS Manager by clicking on Start > All Programs > Administrative Tools > Internet Information Services (IIS) Manager. Assuming that you have installed the product in the Default Web Site, expand the Default Web Site, right-click on the Self-Service virtual directory (called HelpDesk by default) and select Properties for the popup menu that appears. Click on the Directory Security tab and click the button to edit Authentication and access control. Uncheck Enable Anonymous Access and check Integrated Windows authentication. Click OK to exit that window and OK to apply your changes. You will be presented with a screen that looks like the image below:

Inheritance Overrides

*** IMPORTANT ***

You MUST click the button to Select All and then press OK. You can close IIS Manager and log-off the application server.

One final thing to do – tell Service Desk Express that you want to use “Windows” authentication for Self-Service. To do this you need to run the following script against the SDE database:

UPDATE dbo.SMSYSFLAGS SET VALUE = '1' WHERE NAME = 'featUseIntegratedLoginSSHD'

And that is it. To reverse the process run the script above replacing the ‘1’ with ‘0’, check the Enable Anonymous Access and uncheck Integrated Windows authentication. Again, do NOT forget to click the Select All on the Inheritance Overrides window that appears.

Calculated field error in purchase request module

A little gotcha that I came across awhile ago is there is an error in the Total Cost calculated field in the Purchase Requests module that forgets to take into account if a Purchasing Item is active or not. As many organisations prefer to use the InActive flag as opposed to allowing users to delete records, this can lead to erroneous reporting. Thankfully, it is easily fixed…

Open DB Admin and expand the Purchase Requests module. Right-click on the Total Cost field and select Modify Field from the popup menu. Change the SQL from:

(((select ISNULL(SUM(CHILD."PRICE"*CHILD."QUANTITY"),0) from "_SMDBA_"."_PI_" as CHILD , "_SMDBA_"."_CATALOG_" as CATALOG where CHILD."SEQ_PR" = BASE."SEQUENCE" and CHILD."CATALOG#" = CATALOG."SEQUENCE" and CATALOG."TAXABLE" = 1) * (1+(ISNULL(BASE."TAX_%",0)*0.01) ))+(select ISNULL(SUM(CHILD."PRICE"*CHILD."QUANTITY"),0) from "_SMDBA_"."_PI_" as CHILD , "_SMDBA_"."_CATALOG_" as CATALOG where CHILD."SEQ_PR" = BASE."SEQUENCE" and CHILD."CATALOG#" = CATALOG."SEQUENCE" and CATALOG."TAXABLE" = 0)+ISNULL(BASE."SHIPPING_COST",0))

to:

(((select ISNULL(SUM(CHILD."PRICE"*CHILD."QUANTITY"),0) from "_SMDBA_"."_PI_" as CHILD , "_SMDBA_"."_CATALOG_" as CATALOG where CHILD."SEQ_PR" = BASE."SEQUENCE" and CHILD."CATALOG#" = CATALOG."SEQUENCE" and CATALOG."TAXABLE" = 1 and CHILD."_INACTIVE_:" = 0) * (1+(ISNULL(BASE."TAX_%",0)*0.01) ))+(select ISNULL(SUM(CHILD."PRICE"*CHILD."QUANTITY"),0) from "_SMDBA_"."_PI_" as CHILD , "_SMDBA_"."_CATALOG_" as CATALOG where CHILD."SEQ_PR" = BASE."SEQUENCE" and CHILD."CATALOG#" = CATALOG."SEQUENCE" and CATALOG."TAXABLE" = 0 and CHILD."_INACTIVE_:" = 0)+ISNULL(BASE."SHIPPING_COST",0))

Save the field after testing it and you are good to go. Happy reporting.