<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JOATIT</title>
	<atom:link href="http://www.joatit.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.joatit.com/wordpress</link>
	<description>Jack of all things IT</description>
	<lastBuildDate>Sat, 01 May 2010 18:46:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maintenance Plan for SQL Server 2005 Express</title>
		<link>http://www.joatit.com/wordpress/?p=953</link>
		<comments>http://www.joatit.com/wordpress/?p=953#comments</comments>
		<pubDate>Sat, 01 May 2010 18:46:06 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=953</guid>
		<description><![CDATA[There&#8217;s no such thing as a free lunch
I recently visited a site where the local IT Team were having to remember to manually backup a SQL Server 2005 Express Edition database each night, as one of the missing features of the Express Edition is the ability to set up a maintenance plan to do this [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>There&#8217;s no such thing as a free lunch</p></blockquote>
<p>I recently visited a site where the local IT Team were having to remember to manually backup a SQL Server 2005 Express Edition database each night, as one of the missing features of the Express Edition is the ability to set up a maintenance plan to do this automatically. What follows is a workaround I provided to automate their database backups:</p>
<h2>Solution</h2>
<p>First off I created a really simple batch file using Notepad:</p>
<p><code>@echo off<br />
Set YYYY_MM_DD = %DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%<br />
Set DBName = SDE<br />
set BackupFile = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\%DBName%_%YYYY_MM_DD%.bak<br />
osql -S ServerName -E -Q "BACKUP DATABASE %DBName% TO DISK='%BackupFile%'"</code></p>
<p>I saved the file as C:\Program Files\Batch Jobs\DBBackup.bat</p>
<p>All the batch file is doing is running an SQL command to backup the database to disk appending the current date automatically. All that is then left is to create a Scheduled Task to run the batch file every night.</p>
<p>Clearly there is much more you could do with this and indeed there are a whole raft of applications (many free) that allow you to do this with a GUI etc. but&#8230;just in case it helps.</p>
<p>As always any criticism, positive or negative is always welcome. </p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=953&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=953</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Starter/Leaver Process – Part 3</title>
		<link>http://www.joatit.com/wordpress/?p=933</link>
		<comments>http://www.joatit.com/wordpress/?p=933#comments</comments>
		<pubDate>Sun, 31 Jan 2010 23:44:24 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>
		<category><![CDATA[Business Processes]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=933</guid>
		<description><![CDATA[In my previous posts in this series (New Starter/Leaver Process – Part 1 and New Starter/Leaver Process – Part 2) I described, diagrammatically, a new starter business process that could be implemented in Service Desk Express as shown below:

In the final part of this series I am going to finish it off with the business [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous posts in this series (<a title="New Starter/Leaver Process - Part 1" href="http://www.joatit.com/wordpress/?p=788">New Starter/Leaver Process – Part 1</a> and <a title="New Starter/Leaver Process - Part 2" href="http://www.joatit.com/wordpress/?p=920">New Starter/Leaver Process – Part 2</a>) I described, diagrammatically, a new starter business process that could be implemented in Service Desk Express as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter.jpg"><img class="alignnone size-medium wp-image-911" title="New Starter" src="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter-229x300.jpg" alt="New Starter" width="229" height="300" /></a></p>
<p>In the final part of this series I am going to finish it off with the business rules that tie everything together. Before I do so I should mention that I have made some changes to the Function <a href="http://www.joatit.com/downloads/misc/get_std_configs.sql">GET_STD_CONFIGS</a> detailed in the <a href="http://www.joatit.com/wordpress/?p=920">previous post</a>. So if you downloaded this before please go ahead and download it again and run it against your Service Desk Express database.</p>
<p>The first business rule we need is to create the new starter ticket (incident) when a client is created:</p>
<h4>CL01 &#8211; Client Insert Create New Starter Ticket</h4>
<p><strong>Conditions</strong></p>
<p>when a Client</p>
<input id="Checkbox1" checked="checked" disabled="disabled" type="checkbox" /> Create occurs with</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
<th>Logical Operator</th>
</tr>
<tr>
<td colspan="4">No Conditions</td>
</tr>
</tbody>
</table>
<p><strong>Actions</strong></p>
<p>Action 1</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Create</td>
<td>Incident</td>
<td>Incident (base)</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Client ID</td>
<td>{TR,Client ID}</td>
</tr>
<tr>
<td>Company ID</td>
<td>{TR,Company ID}</td>
</tr>
<tr>
<td>Group Name</td>
<td>HELPDESK</td>
</tr>
<tr>
<td>Subject ID</td>
<td>ZZNS</td>
</tr>
<tr>
<td>Status ID</td>
<td>OPEN</td>
</tr>
<tr>
<td>Description</td>
<td>New Starter</td>
</tr>
</tbody>
</table>
<p>Not very exciting but it does the job. Now we need a business rule that is going to send an email to the new starter&#8217;s supervisor (a new foreign key in the Client module referencing the Client module called Seq.Supervisor) and create a new work order for the SYSTEM ADMINS to create an Active Directory and Exchange account.</p>
<h4>HD01 &#8211; New Starter Ticket Stage 01</h4>
<p><strong>Conditions</strong></p>
<p>when a Incident</p>
<input id="Checkbox1" checked="checked" disabled="disabled" type="checkbox" /> Create occurs with</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
<th>Logical Operator</th>
</tr>
<tr>
<td>{TR,Subject ID}</td>
<td>Equals</td>
<td>ZZNS</td>
<td>None</td>
</tr>
</tbody>
</table>
<p><strong>Actions</strong></p>
<p>Action 1</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Create</td>
<td>Notifications</td>
<td>Notifications</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Subject</td>
<td>Service Desk Notification: New Starter Approval Required</td>
</tr>
<tr>
<td>Body</td>
<td>{TEMPL,HD14}</td>
</tr>
<tr>
<td>Notification Module Descr</td>
<td>SMTP Email</td>
</tr>
<tr>
<td>Client ID</td>
<td>{DB,Clients,Supervisor Client ID,&#8221;Sequence&#8221; = {TR,Seq.Client}}</td>
</tr>
</tbody>
</table>
<p>Action 2</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Create</td>
<td>Work Orders</td>
<td>Work Orders</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Incident #</td>
<td>{TR,Incident #}</td>
</tr>
<tr>
<td>Client ID</td>
<td>{TR,Client ID}</td>
</tr>
<tr>
<td>Company ID</td>
<td>{TR,Company ID}</td>
</tr>
<tr>
<td>Group Name</td>
<td>SYSADMINS</td>
</tr>
<tr>
<td>Subject ID</td>
<td>ZZNSEX</td>
</tr>
<tr>
<td>Status ID</td>
<td>OPEN</td>
</tr>
<tr>
<td>Description</td>
<td>Please create a new Active Directory / Exchange account for this new starter. Once complete, please update the client&#8217;s email address by clicking the Faces icon near the Client Information at the top of this form and entering the email address created. Thank you.</td>
</tr>
<tr>
<td>Resolution</td>
<td>AD/Email Account Created and Client Successfully Updated.</td>
</tr>
</tbody>
</table>
<p>Notification Business Rules Template HD14 referenced in the above business rule makes use of a two other templates created in my <a href="http://www.joatit.com/wordpress/?p=757">HTML Email Template post</a>. Make sure you create the _HTML_HEAD and _HTML_FOOT templates otherwise this business rule wont work properly.</p>
<h4>HD14 &#8211; New Starter Email To Supervisor</h4>
<table border="1" width="100%">
<tbody>
<tr>
<th>Template Name</th>
<td>HD14</td>
</tr>
<tr>
<th>Template Data</th>
<td>{TEMPL,_HTML_HEAD}<br />
&lt;P&gt;Dear {DB,Clients,Supervisor First Name,&#8221;Sequence&#8221; = {TR,Seq.Client}},&lt;/P&gt;<br />
&lt;P&gt;<br />
A new starter request has been raised for {TR,First Name} {TR,Last Name}. As the supervisor of this new starter you are required to specify which equipment configuration they will require. Please click on one of the links below and then send the email generated.<br />
&lt;/P&gt;<br />
&lt;H2&gt;Eqiupment Selection&lt;/H2&gt;<br />
&lt;TABLE&gt;<br />
{MATH,(SELECT _SMDBA_.GET_STD_CONFIGS({TR,Incident #}))}<br />
&lt;/TABLE&gt;<br />
&lt;P&gt;<br />
Thank you for your assistance with this service request.<br />
&lt;/P&gt;<br />
{TEMPL,_HTML_FOOT}</td>
</tr>
</tbody>
</table>
<p>That&#8217;s half of our business process complete. The email that is sent will automatically list all the Standard CI Assemblies available complete with hyperlinks such that when the supervisor clicks on their choice it will create an email configured in a way that we can pick up the inbound email and continue the business process. To pick up the inbound email from the supervisor we need a Mail Listen type business rule.</p>
<h4>ML01 &#8211; New Starter Approval Received</h4>
<p><strong>Conditions</strong></p>
<p>when a Mail Listen</p>
<input id="Checkbox1" checked="checked" disabled="disabled" type="checkbox" /> Create occurs with</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
<th>Logical Operator</th>
</tr>
<tr>
<td>{TR,Subject}</td>
<td>Contains</td>
<td>Service Desk Notification: New Starter Approval Given</td>
<td>None</td>
</tr>
</tbody>
</table>
<p><strong>Actions</strong></p>
<p>Action 1</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Create</td>
<td>Work Orders</td>
<td>Work Orders</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Incident #</td>
<td>{EXTRACT,^^,{TR,Subject}}</td>
</tr>
<tr>
<td>Client ID</td>
<td>{DB,Incident,Client ID,&#8221;Incident #&#8221; = {EXTRACT,^^,{TR,Subject}} }</td>
</tr>
<tr>
<td>Company ID</td>
<td>{DB,Incident,Company ID,&#8221;Incident #&#8221; = {EXTRACT,^^,{TR,Subject}} }</td>
</tr>
<tr>
<td>Group Name</td>
<td>DESKTOPS</td>
</tr>
<tr>
<td>Subject ID</td>
<td>ZZNSWS</td>
</tr>
<tr>
<td>Status ID</td>
<td>OPEN</td>
</tr>
<tr>
<td>Description</td>
<td>Please build a {DB,Standard CI Assembly,Description,&#8221;Name&#8221; = &#8216;{EXTRACT,[],{TR,Subject}}&#8217;} for the above user.</p>
<p>Additional Comments:<br />
{TR,Message}</td>
</tr>
</tbody>
</table>
<p>The above business rule simply creates the new workstation work order for our DESKTOPS team advising them of the choice our supervisor has made. The final business rule is the one that assigns the parent Service Request to the HR team for them to complete the new user induction. The trick here though is how do you know which work order is going to be completed first and how to you know when both work orders have been completed. The answer to the first is that you don&#8217;t (although you could take a good guess) and as such you need to allow for the fact that either of the work orders could be the last to be closed and should thus trigger this final business rule.</p>
<h4>WO01 &#8211; New Starter WOs Completed</h4>
<p><strong>Conditions</strong></p>
<p>when a Work Orders</p>
<input id="Checkbox1" checked="checked" disabled="disabled" type="checkbox" /> Update occurs with</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
<th>Logical Operator</th>
</tr>
<tr>
<td>{DB,Incident,Subject ID,&#8221;Incident #&#8221; = {TR,Seq.HD #}}</td>
<td>Equals</td>
<td>ZZNS</td>
<td>And</td>
</tr>
<tr>
<td>{MATH,(SELECT COUNT(*) FROM _SMDBA_._WORKORD_ WHERE STATUS = &#8216;O&#8217; AND HDNUM = {TR,Seq.HD #})}</td>
<td>Equals</td>
<td>0</td>
<td>And</td>
</tr>
<tr>
<td>{MATH,(SELECT COUNT(*) FROM _SMDBA_._WORKORD_ WHERE HDNUM = {TR,Seq.HD #})}</td>
<td>Equals</td>
<td>2</td>
<td>None</td>
</tr>
</tbody>
</table>
<p><strong>Actions</strong></p>
<p>Action 1</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Update</td>
<td>Incident</td>
<td>Incident (base)</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Incident #</td>
<td>{TR,Seq.HD #}</td>
</tr>
<tr>
<td>Group Name</td>
<td>HR</td>
</tr>
<tr>
<td>Description</td>
<td>Please provide a new user induction for the above user.</td>
</tr>
</tbody>
</table>
<p>So essentially what we are doing here is checking that the parent Incident / Service Request is a New Starter one and that the total number of linked Work Orders is 2 and the total number of open linked Work Orders is 0 i.e. they have all been closed.</p>
<h2>Summary</h2>
<p>Whilst this business process could have been a lot more complicated (I once implemented one with 6 parallel work orders etc.) this series of posts have shown how it is possible to chain business rules together to deliver a real business process. Hope this helps. As always, any feedback, positive or negative is always welcome. Thanks for reading.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=933&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=933</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Season&#8217;s Greetings / Thank You</title>
		<link>http://www.joatit.com/wordpress/?p=336</link>
		<comments>http://www.joatit.com/wordpress/?p=336#comments</comments>
		<pubDate>Thu, 31 Dec 2009 13:05:09 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[immigration]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=336</guid>
		<description><![CDATA[As 2009 draws to a close I thought I would just pen a final post for this year essentially to say &#8220;Season&#8217;s Greetings To All&#8221; and a massive thank you to all of you who have viewed, downloaded and commented (positively or negatively) on my content. It never ceases to amaze me how many people [...]]]></description>
			<content:encoded><![CDATA[<p>As 2009 draws to a close I thought I would just pen a final post for this year essentially to say &#8220;Season&#8217;s Greetings To All&#8221; and a massive thank you to all of you who have viewed, downloaded and commented (positively or negatively) on my content. It never ceases to amaze me how many people visit my site and, more importantly to me, how many different pages they view. The table below shows the high-level statistics:</p>
<table width="100%">
<thead>
<tr>
<th>&nbsp;</th>
<th>Visits</th>
<th>Page Views</th>
<th>Hits</th>
</tr>
</thead>
<tbody>
<tr>
<th>Monthly Average</th>
<td>10,798</td>
<td>26,477</td>
<td>81,961</td>
</tr>
<tr>
<th>Yearly Total</th>
<td>129,582</td>
<td>317,725</td>
<td>983,541</td>
</tr>
</tbody>
</table>
<p>To maintain (or hopefully increase) these numbers I need to keep writing / write more interesting articles and to do this I really need your help. What do you folk want me to write about? Are there any series that you would like to see? Let me know in the comments to this post and next year I will see what I can deliver.</p>
<p>Happy holidays everyone and thanks again.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=336&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=336</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How To Restrict A Custom Self Service Module By Client</title>
		<link>http://www.joatit.com/wordpress/?p=959</link>
		<comments>http://www.joatit.com/wordpress/?p=959#comments</comments>
		<pubDate>Sun, 08 Nov 2009 19:14:17 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=959</guid>
		<description><![CDATA[BMC Service Desk Express has awesome customisation tools that allow you create complete new tables (modules) for storing custom information in your Service Desk Express database. These custom modules can be presented in Self Service as well for end-users but here is the catch&#8230;
Out of the box you can&#8217;t restrict entries created by one client [...]]]></description>
			<content:encoded><![CDATA[<p>BMC Service Desk Express has awesome customisation tools that allow you create complete new tables (modules) for storing custom information in your Service Desk Express database. These custom modules can be presented in Self Service as well for end-users but here is the catch&#8230;</p>
<blockquote><p>Out of the box you can&#8217;t restrict entries created by one client from another client.</p></blockquote>
<p>Thankfully, with a little (well quite a lot actually) custom scripting it is possible. I should stress however, that if you are going to do this, MAKE SURE YOU BACK UP EVERYTHING (DB and Self-Service directories) FIRST!!!</p>
<h2>Example</h2>
<p>So let&#8217;s say that you want to create a new custom module to record feedback such that your clients can log Complaints, Compliments and Observations. The design of our custom module is as follows:</p>
<table border="0">
<tbody>
<tr>
<th>Table Name</th>
<th>View Name</th>
<th>Display Name</th>
</tr>
<tr>
<td>TBL_FEEDBACK</td>
<td>Feedback</td>
<td>Feedback</td>
</tr>
<tr>
<th>Alias Name</th>
<th>Column Name</th>
<th>Details</th>
</tr>
<tr>
<td>Sequence</td>
<td>SEQUENCE</td>
<td>INT, Primary Key, Created by Default</td>
</tr>
<tr>
<td>Last Modified</td>
<td>LASTMODIFIED</td>
<td>DATETIME, Created by Default</td>
</tr>
<tr>
<td>Last User</td>
<td>LASTUSER</td>
<td>STRING(30), Created by Default</td>
</tr>
<tr>
<td>Seq.Group</td>
<td>_GROUP_</td>
<td>INT, Created by Default</td>
</tr>
<tr>
<td>InActive:</td>
<td>_INACTIVE_:</td>
<td>SMALLINT, Created by Default</td>
</tr>
<tr>
<td>Seq.Client</td>
<td>SEQ_CLIENT</td>
<td>INT, Foreign Key to Clients, NOT NULL</td>
</tr>
<tr>
<td>Feedback Type</td>
<td>FEEDBACK_TYPE</td>
<td>Validated Field (Compliment, Complaint, Observation), NOT NULL</td>
</tr>
<tr>
<td>Statement</td>
<td>STATEMENT</td>
<td>STRING(Unlimited), NOT NULL</td>
</tr>
<tr>
<td>Seq.Incident</td>
<td>SEQ_INCIDENT</td>
<td>INT, Foreign Key to Incidents, NULL</td>
</tr>
<tr>
<td>Status</td>
<td>STATUS</td>
<td>Validated Field (O,C), NOT NULL</td>
</tr>
<tr>
<td>Response</td>
<td>RESPONSE</td>
<td>STRING(Unlimited), NULL</td>
</tr>
</tbody>
</table>
<p>We then create a form in for Self-Service, an appropriate popup, and modify the navigation bar such that the new custom module can be accessed as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/FeedbackForm01.JPG"><img class="alignnone size-medium wp-image-966" title="Feedback Form 01" src="http://www.joatit.com/wordpress/wp-content/uploads/FeedbackForm01-300x187.jpg" alt="Feedback Form 01" width="300" height="187" /></a></p>
<h2>Issue</h2>
<p>If Client ABARBER (that&#8217;s me by the way) submits a feedback record all appears to work perfectly. However, when SBARBER (that&#8217;s Sarah my wife) logs in, she can see my feedback and if she were to submit feedback, I would be able to see her&#8217;s as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/UnfilteredFeedback01.JPG"><img class="alignnone size-medium wp-image-967" title="Unfiltered Feedback 01" src="http://www.joatit.com/wordpress/wp-content/uploads/UnfilteredFeedback01-300x187.jpg" alt="Unfiltered Feedback 01" width="300" height="187" /></a></p>
<h2>Solution</h2>
<p>First run the following SQL command against your SDE DB and store the results somewhere:</p>
<p>SELECT BVD.TBLSEQ, COLSEQ, VIEWCOLNAME FROM dbo.SMSYSBASEVIEWDATA BVD JOIN dbo.SMSYSTABLES T ON T.TBLSEQ =<br />
BVD.TBLSEQ WHERE T.VIEWNAME = &#8216;Feedback&#8217; ORDER BY COLSEQ</p>
<p>My result looks like the table shown below but yours will look different depending on what you named your fields and how many custom modules you already have:</p>
<table border="0">
<thead>
<tr>
<th>TBLSEQ</th>
<th>COLSEQ</th>
<th>VIEWCOLNAME</th>
</tr>
</thead>
<tbody>
<tr>
<td>1002</td>
<td>1001</td>
<td>Sequence</td>
</tr>
<tr>
<td>1002</td>
<td>1002</td>
<td>Last Modified</td>
</tr>
<tr>
<td>1002</td>
<td>1003</td>
<td>Last User</td>
</tr>
<tr>
<td>1002</td>
<td>1004</td>
<td>Seq.Group</td>
</tr>
<tr>
<td>1002</td>
<td>1005</td>
<td>InActive:</td>
</tr>
<tr>
<td>1002</td>
<td>1006</td>
<td>Seq.Client</td>
</tr>
<tr>
<td>1002</td>
<td>1007</td>
<td>First Name</td>
</tr>
<tr>
<td>1002</td>
<td>1008</td>
<td>Last Name</td>
</tr>
<tr>
<td>1002</td>
<td>1009</td>
<td>Email Address</td>
</tr>
<tr>
<td>1002</td>
<td>1010</td>
<td>Feedback Type</td>
</tr>
<tr>
<td>1002</td>
<td>1011</td>
<td>Statement</td>
</tr>
<tr>
<td>1002</td>
<td>1012</td>
<td>Seq.Incident</td>
</tr>
<tr>
<td>1002</td>
<td>1013</td>
<td>Status</td>
</tr>
<tr>
<td>1002</td>
<td>1014</td>
<td>Response</td>
</tr>
</tbody>
</table>
<p>Download <a title="RestrictingCustomSelfServiceModuleByClient.zip" href="http://www.joatit.com/downloads/misc/RestrictingCustomSelfServiceModuleByClient.zip">RestrictingCustomSelfServiceModuleByClient.zip</a> containing the files that need to replace the existing BMC files.</p>
<p>In the recurring_hd.asp and recurring_hd.htm files you need to do a find/replace replacing:</p>
<ul>
<li> All occurrences of JOATIT_TBLSEQ with the  TBLSEQ number returned in the table above (so in my case 1002).</li>
<li>All occurrences of JOATIT_SEQ_CLIENT with the  SEQ_CLIENT number returned in the table above (so in my case 1006).</li>
<li>All occurrences of JOATIT_STATUS with the  STATUS number returned in the table above (so in my case 1013).</li>
</ul>
<p>In the 1_common_label_message.js file you need to scroll right down the bottom and replace the &#8220;My Whatever Your Custom Module Is Called&#8221; with in my case &#8220;My Feedback&#8221;</p>
<p>Save the files and use them to overwrite the existing files in their appropriate directories.</p>
<p>Run the following script against your SDE DB&#8230;</p>
<p>INSERT INTO dbo.NAMSYSCSMESSAGES ([SEQUENCE], [LANGSEQ], [MESGNO], [MESGTYPE], [MESG]) VALUES (3224, 1, 1597, 2, &#8216;My Feedback&#8217;)</p>
<p>&#8230;and IISRESET you application server.</p>
<h2>Summary</h2>
<p>Hope this helps. Remember to backup everything as it is very easy to make a typo. Also remember, as this is custom code you may well have to reapply it after every patch release from BMC. Who knows, perhaps Service Desk Express 10 will make this post obselete&#8230;</p>
<p>As always, comments (positive or negative) are always very welcome and very much appreciated. I do try and answer every single one.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=959&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=959</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Send An Email To All Assessors For A Given Change</title>
		<link>http://www.joatit.com/wordpress/?p=939</link>
		<comments>http://www.joatit.com/wordpress/?p=939#comments</comments>
		<pubDate>Mon, 19 Oct 2009 22:25:23 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>
		<category><![CDATA[user-defined functions]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=939</guid>
		<description><![CDATA[Ever wondered how to communicate with all assessors and/or approvers of a change request that the status of a change has changed? If the answer is &#8220;Yes&#8221; you will, probably before now, have realised that this is not as straightforward as it seems.
What I hope to achieve in this post is to walk you through [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wondered how to communicate with all assessors and/or approvers of a change request that the status of a change has changed? If the answer is &#8220;Yes&#8221; you will, probably before now, have realised that this is not as straightforward as it seems.</p>
<p>What I hope to achieve in this post is to walk you through how you would achieve this. The problem lies in Service Desk Express&#8217;s lack of functionality to &#8220;iterate&#8221; through a dataset and complete an action for each record it finds.</p>
<h2>Solution</h2>
<p>The solution is courtesy of a little SQL magic &#8211; we are going to create a user-defined function that iterates through each of the assessors and builds a string of their Login IDs such that we can give this to a Service Desk Express business rule to send an email:</p>
<p><code>CREATE FUNCTION [_SMDBA_].[GET_CHANGE_ASSESSORS]<br />
(<br />
@ChangeNo int<br />
)<br />
RETURNS nvarchar(4000)<br />
AS<br />
BEGIN<br />
DECLARE @ReturnString nvarchar(4000)<br />
SET @ReturnString = ''<br />
DECLARE @LoginID nvarchar(30)<br />
DECLARE cur CURSOR<br />
FOR SELECT DISTINCT P.CODE FROM    _SMDBA_._CHANGEASMT_ CA JOIN _SMDBA_._PERSONNEL_ P ON P.SEQUENCE = CA.ASSESSOR WHERE CA.[_INACTIVE_:] = 0 AND P.[_INACTIVE_:] = 0 AND CA.[CHANGE] = @ChangeNo<br />
OPEN cur<br />
FETCH NEXT FROM cur INTO<br />
@LoginID<br />
WHILE (@@fetch_status &lt;&gt; -1)<br />
BEGIN<br />
IF (@@fetch_status &lt;&gt; -2)<br />
BEGIN<br />
SELECT @ReturnString = @ReturnString + @LoginID + ';'<br />
END<br />
FETCH NEXT FROM cur INTO<br />
@LoginID<br />
END<br />
CLOSE cur<br />
DEALLOCATE cur<br />
RETURN SUBSTRING(@ReturnString,1,LEN(@ReturnString)-1)<br />
END</code></p>
<p>It is important that we grant execute permissions to this function:</p>
<p><code>GRANT EXECUTE ON [_SMDBA_].[GET_CHANGE_ASSESSORS] TO PUBLIC</code></p>
<p>Then we just need a simple business rule that, on change of status for example, sends and email to all assessors:</p>
<h4>Change Request -Notification of Change of Status To Assessors</h4>
<p><strong>Conditions</strong></p>
<p>when a Change Request</p>
<input id="Checkbox3" checked="checked" disabled="disabled" type="checkbox" /> Update occurs with</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
<th>Logical Operator</th>
</tr>
<tr>
<td>{CUR,Status ID}</td>
<td>NotEqual</td>
<td>{TR,Status ID}</td>
<td>None</td>
</tr>
</tbody>
</table>
<p><strong>Actions</strong></p>
<p>Action 1</p>
<table border="1" width="100%">
<tbody>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Create</td>
<td>Notifications</td>
<td>Multi-Notifications</td>
</tr>
</tbody>
</table>
<table border="1" width="100%">
<tbody>
<tr>
<th>Field Name</th>
<th>Value</th>
</tr>
<tr>
<td>Subject</td>
<td>Service Desk Notification &#8211; Change Request Status Update</td>
</tr>
<tr>
<td>Body</td>
<td>&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;Service Desk Notification &#8211; Change Request Status Update&lt;/TITLE&gt;<br />
&lt;/HEAD&gt;<br />
&lt;BODY&gt;<br />
&lt;P&gt;Add some nice text here&lt;/P&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</td>
</tr>
<tr>
<td>Notification Module Descr</td>
<td>SMTP Email</td>
</tr>
<tr>
<td>Address Staff Multiple</td>
<td>{MATH,(SELECT _SMDBA_.GET_CHANGE_ASSESSORS({TR,Sequence}))}</td>
</tr>
</tbody>
</table>
<h2>Summary</h2>
<p>User-defined functions can be a goldmine of pieces of functionality that is missing from Service Desk Express. So before you despair&#8230;think UDF! As always I hoped this post proved useful. Feedback, positive or negative, is always hugely appreciated.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=939&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=939</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>New Starter/Leaver Process – Part 2</title>
		<link>http://www.joatit.com/wordpress/?p=920</link>
		<comments>http://www.joatit.com/wordpress/?p=920#comments</comments>
		<pubDate>Sun, 27 Sep 2009 20:03:43 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>
		<category><![CDATA[Business Processes]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=920</guid>
		<description><![CDATA[In my previous post (New Starter/Leaver Process – Part 1) I described, diagrammatically, a new starter business process that could be implemented in Service Desk Express as shown below:

In this post we are going to lay the foundations to build this process (by populating some necessary data) and then in the final post in the [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post (<a title="New Starter/Leaver Process - Part 1" href="http://www.joatit.com/wordpress/?p=788">New Starter/Leaver Process – Part 1</a>) I described, diagrammatically, a new starter business process that could be implemented in Service Desk Express as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter.jpg"><img class="alignnone size-medium wp-image-911" title="New Starter" src="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter-229x300.jpg" alt="New Starter" width="229" height="300" /></a></p>
<p>In this post we are going to lay the foundations to build this process (by populating some necessary data) and then in the final post in the series we will complete the business rules.</p>
<h2>Categories/Support Subjects</h2>
<p>We need to add a couple of Categories /Support Subjects as shown below:</p>
<table border="0" width="100%">
<thead>
<tr>
<th>Subject ID</th>
<th>Description</th>
<th>Parent Subject ID</th>
</tr>
</thead>
<tbody>
<tr>
<td>ZZ</td>
<td>zzBusinessRules</td>
<td></td>
</tr>
<tr>
<td>ZZNS</td>
<td>New Starter Process</td>
<td>ZZ</td>
</tr>
<tr>
<td>ZZNSEX</td>
<td>AD/Exchange Account Request</td>
<td>ZZNS</td>
</tr>
<tr>
<td>ZZNSWS</td>
<td>Workstation Request</td>
<td>ZZNS</td>
</tr>
</tbody>
</table>
<p>Now obviously it goes without saying that you don’t have to have the same categories as me. The reason I name Business Rules as zzBusinessRules is to shove them down the bottom of the Category Tree out of the way.</p>
<h2>Groups</h2>
<p>In my example I am going to have a centralised System Admin Group (SYSADMINS), Desktop Team (DESKTOPS), and HR Team (HR) who will do my induction process. Again, if you are following this you can call your groups whatever you want</p>
<h2>CI Types/Inventory Catalogue Items</h2>
<p>Whenever I write these posts I am always keen to make the example something that has a reasonable degree of complexity about it. Many technical examples are based around the equivalent of the Hello World application, and from bitter experience this CAN be more frustrating than useful. So in my example here, I am going to assume that we are using the Asset Management modules as well. So we&#8217;ll need the following CITypes/Inventory Catalogue Items:</p>
<table border="0" width="100%">
<thead>
<tr>
<th>Part #</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>STDWS01</td>
<td>Standard Workstation</td>
</tr>
<tr>
<td>STDLT01</td>
<td>Standard Laptop</td>
</tr>
<tr>
<td>STDMB01</td>
<td>Standard Mobile Phone</td>
</tr>
<tr>
<td>STDBU01</td>
<td>Standard Operating System/Applications Build</td>
</tr>
<tr>
<td>STD3G01</td>
<td>Standard 3G Card</td>
</tr>
</tbody>
</table>
<p></p>
<h2>Standard Configurations</h2>
<p>We are then going to create two standard configurations as shown below:</p>
<table border="0" width="100%">
<tbody></tbody>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>STDST</td>
<td>Standard Static Configuration</td>
</tr>
<tr>
<td colspan="2">Consisting of&#8230;</td>
</tr>
<tr>
<td>STDWS01</td>
<td>Standard Workstation</td>
</tr>
<tr>
<td>STDBU01</td>
<td>Standard Operating System/Applications Build</td>
</tr>
</tbody>
</table>
<p>and</p>
<table border="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>STDMB</td>
<td>Standard Mobile Configuration</td>
</tr>
<tr>
<td colspan="2">Consisting of&#8230;</td>
</tr>
<tr>
<td>STDLT01</td>
<td>Standard Laptop</td>
</tr>
<tr>
<td>STDMB01</td>
<td>Standard Mobile Phone</td>
</tr>
<tr>
<td>STDBU01</td>
<td>Standard Operating System/Applications Build</td>
</tr>
<tr>
<td>STD3G01</td>
<td>Standard 3G Card</td>
</tr>
</tbody>
</table>
<p></p>
<h2>Standard Configurations User Defined Function</h2>
<p>As anyone will tell you, when, as a developer, you hardcode stuff you invariably come to regret it (unless you have already left the organisation that is). I want to be able to send my supervisors a dynamic list of Standard Configurations that he/she can select from such that if that business decides at a later date to have a Non-Standard Mobile Configuration we can cope with it without the need for any code changes.<br />
Alas, out of the box Service Desk Express can’t send a list of anything to anyone. This is where we need a little SQL help in the form of a User-Defined Function (UDF). Below is a link to a function  I want to use to send out part of my email which can either be run yourself against the SDE database or given to your SQL DBA to run against the SDE database:</p>
<p><a title="Function GET_STD_CONFIGS" href="http://www.joatit.com/downloads/misc/get_std_configs.sql">Function GET_STD_CONFIGS</a></p>
<p>If you haven&#8217;t used user-defined functions in SDE then you might find <a title="Purchase Request Line Items in Email" href="http://www.joatit.com/wordpress/?p=20">this post</a> helpful.</p>
<h2>Summary</h2>
<p>So that is all the preparation work done. Now all we have to do is build our business rules to use all this stuff and that is what I will document in the third and final post in this series.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=920&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=920</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Starter/Leaver Process &#8211; Part 1</title>
		<link>http://www.joatit.com/wordpress/?p=788</link>
		<comments>http://www.joatit.com/wordpress/?p=788#comments</comments>
		<pubDate>Sat, 15 Aug 2009 23:11:46 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Business Processes]]></category>
		<category><![CDATA[Service Desk Express]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=788</guid>
		<description><![CDATA[Synchronising with Active Directory is NOT the best approach
This is a deliberately argumentative statement that, throughout this series of posts, I want to explore and explain my reasoning behind. The other aim of this series is to provide a real-world example of a new starter/leaver process that can be implemented in Service Desk Express.
For many [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Synchronising with Active Directory is NOT the best approach</p></blockquote>
<p>This is a deliberately argumentative statement that, throughout this series of posts, I want to explore and explain my reasoning behind. The other aim of this series is to provide a real-world example of a new starter/leaver process that can be implemented in Service Desk Express.</p>
<p>For many years architects have been pushing for Active Directory synchronisation from every enterprise application vendor with, in most cases, very good reasons. AD synchonisation provides the business with a single directory source that can be used for everything from authentication/authorisation services to location and reporting structure data depending on how well it is populated. No one, not even argumentative me, would argue that a single directory source is a bad thing, nor that single sign on wouldn&#8217;t be welcomed by every enterprise user. My argument is NOT with AD. My objection to AD/Service Desk synchronisation is from a business process perspective &#8211; namely I believe that the source of HR data (which is what is being synchronised here) is better suited to the HR/Payroll system within an enterprise rather than AD. I can&#8217;t imagine that there are many organisations who add their new employees to AD before they are added to payroll and, in my opinion, the system admins should be tasked properly with creating an AD/Exchange account such that OLA/SLAs can be managed and customer satisfaction monitored.  So what, in my humble opinion, is the correct solution:</p>
<h2>Data Flow Solution</h2>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Data-Flow-Diagram.jpg"><img class="alignnone size-medium wp-image-908" title="Data Flow Diagram" src="http://www.joatit.com/wordpress/wp-content/uploads/Data-Flow-Diagram-300x152.jpg" alt="Data Flow Diagram" width="300" height="152" /></a></p>
<p>As you can see from the diagram above, my solution would be to put the Service Desk  in the centre acting as the hub through which human business processes are transacted. The initial employee record is created in the HR/Payroll system which then creates a client/customer record in Service Desk Express (using the Integration Engine). This in turn kicks off the New Starter business process that includes, amongst other tasks, an action to create an AD/Exchange account for the new employee. By updating the WinUserID field in the Client record with the user&#8217;s AD domain\username, the link between AD and Service Desk Express is then made and Self-Service Single Sign On can be provided. When employee records are updated (either through a request through the Service Desk or directly with the HR/Payroll system) the employee details are updated in Service Desk Express and then in AD.</p>
<h2>New Starter Business Process</h2>
<p>I am not going to discuss the initial synchronisation with the HR/Payroll system as this was discussed in a previous post (<a title="Using the Integration Engine to Manage Clients" href="http://www.joatit.com/wordpress/?p=61" target="_blank">Using the Integration Engine to Manage Clients</a>) and there is an appropriate Integration Engine package that can be downloaded and tweaked for your requirements. The key point to mention is that of &#8220;datakeys:&#8221;</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Data-Keys-Diagram.jpg"><img class="alignnone size-medium wp-image-906" title="Data Keys Diagram" src="http://www.joatit.com/wordpress/wp-content/uploads/Data-Keys-Diagram-300x169.jpg" alt="Data Keys Diagram" width="300" height="169" /></a></p>
<p>As you can see Service Desk Express holds the datakey for both the HR/Payroll system (EmployeeID &#8211;&gt; CLIENT) and AD (sAMAccountName &#8211;&gt; WINUSERID). This is crucial to the solution.</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter.jpg"><img class="alignnone size-medium wp-image-911" title="New Starter" src="http://www.joatit.com/wordpress/wp-content/uploads/New-Starter-229x300.jpg" alt="New Starter" width="229" height="300" /></a></p>
<p>In my example business process above, the employee is going to be provided with the following:</p>
<ul>
<li>Workstation (either static or mobile) with a standard operating system/applications build.</li>
<li>Active Directory and Exchange account for the domain.</li>
<li>Induction.</li>
</ul>
<p>The important point to note about my example process is that activities happen both in parallel and sequentially and I want to demonstrate how this can be accommodated within business rules in Service Desk Express.</p>
<p>In the next post I will walk through the creation of the New Starter Process in Service Desk Express based on the output of the <a title="Using the Integration Engine to Manage Clients" href="http://www.joatit.com/wordpress/?p=61" target="_blank">Using the Integration Engine to Manage Clients</a> post I mentioned earlier.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=788&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=788</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How To Filter The Assign To Grids in Service Desk Express</title>
		<link>http://www.joatit.com/wordpress/?p=892</link>
		<comments>http://www.joatit.com/wordpress/?p=892#comments</comments>
		<pubDate>Thu, 23 Jul 2009 21:49:10 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>
		<category><![CDATA[popups]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=892</guid>
		<description><![CDATA[A post in the MagicSolutions forum posed a challenge that I thought would be fun to try and solve, namely how to filter the Assign To grids in Service Desk Express. Unlike other popups that are accessed from a popup icon on the form these popups are accessed by clicking on the Assign To menu [...]]]></description>
			<content:encoded><![CDATA[<p>A <a title="filtering Assign To grids" href="http://tech.groups.yahoo.com/group/magicsolutions/message/77252" target="_blank">post</a> in the MagicSolutions forum posed a challenge that I thought would be fun to try and solve, namely how to filter the Assign To grids in Service Desk Express. Unlike other popups that are accessed from a popup icon on the form these popups are accessed by clicking on the Assign To menu item. As such there is no out of the box facility within the application to filter this list as there is with other popups (see <a title="How to dynamically filter a popup list in Service Desk Express" href="http://www.joatit.com/wordpress/?p=581" target="_blank">How to dynamically filter a popup list in Service Desk Express</a>).</p>
<h2>Solution</h2>
<blockquote><p>This is an unsupported hack of the ASP.NET code</p></blockquote>
<p>The first thing to do is determine how you want to filter the popup as there is usually little point hardcoding something if it can be dynamic. For my example, I created a new field in the Support Staff module called Hide In Popups as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/HideInPopups.jpg"><img class="alignnone size-thumbnail wp-image-893" title="Hide In Popups" src="http://www.joatit.com/wordpress/wp-content/uploads/HideInPopups-150x150.jpg" alt="Hide In Popups" width="150" height="150" /></a></p>
<p>Now this field will be granted a unique number by Service Desk Express and it is important that you find out what this number is using the SQL statement below:</p>
<p><code>SELECT COLSEQ FROM dbo.SMSYSBASEVIEWDATA WHERE TBLSEQ = 18 AND VIEWCOLNAME = 'Hide In Popups'</code></p>
<p>In my case this returned a value of 1001.</p>
<p>To filter the popup we need to add some code in assignto_grid.aspx (located in C:\Program Files\BMC\Service Desk Express\Application Server by default) just before the opening &lt;HTML&gt; tag:</p>
<p><code>&lt;%<br />
if (ViewName == "18" &amp;&amp; sMode == "STAFF")<br />
{<br />
AddWhereClause += " + ||1001|| = 0";<br />
}<br />
else if (ViewName == "18" &amp;&amp; sMode == "MYGROUP")<br />
{<br />
AddWhereClause += " AND ||1001|| = 0";<br />
}<br />
%&gt;</code></p>
<p>Save the file and you should be good to go.</p>
<p>So how does this code work. Well the ViewName == &#8220;18&#8243; bit means that I only want to filter the Support Staff not the Groups (which incidentally would be ViewName == &#8220;13&#8243;). The sMode bit refers to which menu item this popup was called from e.g. Member of My Groups. The AddWhereClause bit simply says check if field 1001 (my new Hide in Popups field) is equal to 0. As to why the syntax is different for the two modes &#8211; PASS!</p>
<h2>Summary</h2>
<p>Anyway, seems to work. As always any feedback (positive or negative) is always welcome.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=892&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=892</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Services, Organisations, and Service Level Agreements &#8211; Part 2</title>
		<link>http://www.joatit.com/wordpress/?p=832</link>
		<comments>http://www.joatit.com/wordpress/?p=832#comments</comments>
		<pubDate>Sun, 19 Jul 2009 18:36:12 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[Service Desk Express]]></category>
		<category><![CDATA[organisations]]></category>
		<category><![CDATA[service level agreements]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[slas]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=832</guid>
		<description><![CDATA[In Part 1 of this series I discussed how to create the Services, Organisations and Service Level Agreements (SLAs) necessary for our example of an internal service desk servicing six departments with the Finance department requiring a tighter SLA on one of the services then any of the other departments during March each year.
In this [...]]]></description>
			<content:encoded><![CDATA[<p>In <a title="Services, Organisations, Service Level Agreements - Part 1" href="http://www.joatit.com/wordpress/?p=604" target="_blank">Part 1</a> of this series I discussed how to create the Services, Organisations and Service Level Agreements (SLAs) necessary for our example of an internal service desk servicing six departments with the Finance department requiring a tighter SLA on one of the services then any of the other departments during March each year.</p>
<p>In this post, I will cover SLA Criteria (such that we can finish our example); linking Services, Organisations and SLAs;  and of course how to turn SLA Management on in the first place including the biggest gotcha of all.</p>
<h2>SLA Criteria</h2>
<p>We said that we wanted to provide our Finance department with a tighter SLA during March each year. How do we go about doing that? Well the first thing we need to do is create the new Urgency/Priority and SLA that we want to offer as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/24HR_Priority.JPG"><img class="alignnone size-thumbnail wp-image-867" title="24HR Priority" src="http://www.joatit.com/wordpress/wp-content/uploads/24HR_Priority-150x150.jpg" alt="24HR Priority" width="150" height="150" /></a> <a href="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_01.jpg"><img class="alignnone size-thumbnail wp-image-868" title="24HR SLA 01" src="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_01-150x150.jpg" alt="24HR SLA 01" width="150" height="150" /></a> <a href="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_03.jpg"><img class="alignnone size-thumbnail wp-image-869" title="24HR SLA 03" src="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_03-150x150.jpg" alt="24HR SLA 03" width="150" height="150" /></a> <a href="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_04.jpg"><img class="alignnone size-thumbnail wp-image-870" title="24HR SLA 04" src="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_04-150x150.jpg" alt="24HR SLA 04" width="150" height="150" /></a></p>
<h3>Another Gotcha</h3>
<p>We need to add a SLA Criteria that checks if the month the call was opened was March. Problem &#8211; SLA Criteria can only check the values of fields within the module they are configured for (i.e. in our case Incidents) and don&#8217;t allow for any expressions. Solution &#8211; Create a field to hold the month the call was opened and populate it on save using a CSBR as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Month-Opened.jpg"><img class="alignnone size-thumbnail wp-image-881" title="Month Opened" src="http://www.joatit.com/wordpress/wp-content/uploads/Month-Opened-150x150.jpg" alt="Month Opened" width="150" height="150" /></a></p>
<table border="0">
<tbody>
<tr>
<th colspan="3">Conditions</th>
</tr>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
</tr>
<tr>
<td>{TR,Month Opened}</td>
<td>Equals</td>
<td>{NULL}</td>
</tr>
<tr>
<th colspan="3">Actions</th>
</tr>
<tr>
<th>Field</th>
<th colspan="2">Value</th>
</tr>
<tr>
<td>Month Opened</td>
<td colspan="2">{MATH, DATEPART(MONTH,GETDATE()) MT}</td>
</tr>
</tbody>
</table>
<blockquote><p>You MUST add the field to the forms used otherwise you will get an error &#8211; Input string not in correct format. It CAN be hidden though.</p></blockquote>
<p>Now in order that this SLA is only offered during March we need to configure an SLA Criteria as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_02.jpg"><img class="alignnone size-thumbnail wp-image-872" title="24HR SLA 02" src="http://www.joatit.com/wordpress/wp-content/uploads/24HR_SLA_02-150x150.jpg" alt="24HR SLA 02" width="150" height="150" /></a></p>
<p>Notice that this criteria only considers the March clause NOT the Finance department clause. That comes later when we link Services, Organisations and SLAs. You could include the Finance department clause but then you would need to keep changing you SLA if, for example, another department wanted the same SLA.</p>
<p>In this example, given all the hassle of creating a field and CSBR, you could choose an alternative solution of selecting the 24HR_MARCH SLA and configuring the Start and End dates to only include March. The problem here of course is that you need to create one for every year which is a little painful. What is more, it wouldn&#8217;t have given me the opportunity to explain SLA Criteria <img src='http://www.joatit.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>Service Organisation SLA Links</h2>
<p>Now there&#8217;s a mouthful! Service Organisation SLA Links (LINK) are what they say on the tin &#8211; the way to assign a SLA to a service consumed by an organisation. They are accessible from the Service, Organization, and SLA forms via their respective tabs. In our example above we want each department to use our Standard 48HR SLA for the service of Application Support. Now we could create a separate LINK for each Organisation but we don&#8217;t need to. If we open the Service form, find our Application Support service and click Add on the SLA/Org tab we can create a LINK as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/LINK-01.jpg"><img class="alignnone size-thumbnail wp-image-875" title="LINK 01" src="http://www.joatit.com/wordpress/wp-content/uploads/LINK-01-150x150.jpg" alt="LINK 01" width="150" height="150" /></a></p>
<p>What the record above says is &#8220;Offer this SLA whenever the Application Support Service is selected.&#8221; This is fine for what we want at the moment. Now what we need to do is create another LINK for the Finance Organisation to provide the 24HR SLA against the Application Support Service as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/LINK-02.jpg"><img class="alignnone size-thumbnail wp-image-876" title="LINK 02" src="http://www.joatit.com/wordpress/wp-content/uploads/LINK-02-150x150.jpg" alt="LINK 02" width="150" height="150" /></a></p>
<p>Thus your Application Support service should look like this:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Service-With-LINKS-01.jpg"><img class="alignnone size-thumbnail wp-image-877" title="Service With LINKS 01" src="http://www.joatit.com/wordpress/wp-content/uploads/Service-With-LINKS-01-150x150.jpg" alt="Service With LINKS 01" width="150" height="150" /></a></p>
<p>Now, when anyone logs a ticket against the Application Support Service between April and February inclusive, the only option will be the 48HR SLA as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Select-from-SLAs-01.jpg"><img class="alignnone size-thumbnail wp-image-883" title="Select from SLAs 01" src="http://www.joatit.com/wordpress/wp-content/uploads/Select-from-SLAs-01-150x150.jpg" alt="Select from SLAs 01" width="150" height="150" /></a></p>
<p>However, when a member of the Finance department log a ticket against the Application Support Service during March, a choice of either the 24HR SLA or the 48HR SLA will appear as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Select-from-SLAs-02.jpg"><img class="alignnone size-thumbnail wp-image-885" title="Select from SLAs 02" src="http://www.joatit.com/wordpress/wp-content/uploads/Select-from-SLAs-02-150x150.jpg" alt="Select from SLAs 02" width="150" height="150" /></a></p>
<p>&#8230;assuming you have turned the functionality on!</p>
<h2>Service Level Agreement Rules</h2>
<p>Yes that&#8217;s right &#8211; out of the box the SLA functionality is NOT turned on. To enable Service Level Agreements you need to click on the Service Level Agreement Rules item in the Service Level Management tab. Then from the Enable SLAs window that appears check the box to enable SLAs as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/Enable-SLAs-01.jpg"><img class="alignnone size-thumbnail wp-image-878" title="Enable SLAs 01" src="http://www.joatit.com/wordpress/wp-content/uploads/Enable-SLAs-01-150x150.jpg" alt="Enable SLAs 01" width="150" height="150" /></a></p>
<p>So here is the kicker and this is absolutely WOEFUL!</p>
<p>You have to manually enable the SLA functionality for each group <strong>by logging in as that group</strong> and turning it on by checking the box as described above! Imagine what that is like on 126 Groups! Scripts to the rescue&#8230;</p>
<p><a title="Set Default SLA Rules For All Groups Script" href="http://www.joatit.com/downloads/misc/SDE_SetDefaultSLARulesForAllGroups.sql">SDE_SetDefaultSLARulesForAllGroups.sql</a></p>
<p>The above script will turn on SLA Management for every group!</p>
<h2>One Final Issue!</h2>
<p>SLA&#8217;s are NOT mandatory out of the box. What this means is that if one of your Service Desk Agents decides to close the Select From SLA popup that appears to select the SLA, no SLA is populated at all. If you want to enforce SLAs you MUST make your SLA ID field selectable (i.e. NOT readonly) and write a Client Side Business Rule (CSBR) as shown below:<br />
<strong>When an Incident is Saved</strong></p>
<table border="0">
<tbody>
<tr>
<th colspan="3">Conditions</th>
</tr>
<tr>
<th>Expression 1</th>
<th>Comparison Operator</th>
<th>Expression 2</th>
</tr>
<tr>
<td>{TR,SLA ID}</td>
<td>Equals</td>
<td>{NULL}</td>
</tr>
<tr>
<th colspan="3">Actions</th>
</tr>
<tr>
<th>Method</th>
<th>Module</th>
<th>Form</th>
</tr>
<tr>
<td>Display Message</td>
<td>Incident</td>
<td>Current Form</td>
</tr>
<tr>
<td colspan="2">Exit Rule if &#8216;OK&#8217; clicked</td>
<td>Checked</td>
</tr>
</tbody>
</table>
<h2>Summary</h2>
<p>Hopefully, throughout these two posts I have given you an idea of what the art of the possible might be using the SLA modules available with Service Desk Express. As always, comments, positive or negative, are always welcome.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=832&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=832</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Dundas Map for SQL Reporting Services 2005 &#8211; Dynamic Symbols</title>
		<link>http://www.joatit.com/wordpress/?p=837</link>
		<comments>http://www.joatit.com/wordpress/?p=837#comments</comments>
		<pubDate>Tue, 30 Jun 2009 19:55:24 +0000</pubDate>
		<dc:creator>Alan</dc:creator>
				<category><![CDATA[SQL Reporting Services]]></category>
		<category><![CDATA[dundas map]]></category>

		<guid isPermaLink="false">http://www.joatit.com/wordpress/?p=837</guid>
		<description><![CDATA[As some of you might know, I am a BIG BIG fan of Microsoft&#8217;s SQL Reporting Services 2005 and STILL (Arggh!) haven&#8217;t had a chance to play with SQL Reporting Services 2008! For awhile now, I have been wanting to take my reports to a new level (mainly targetted at producing an enhanced suits of [...]]]></description>
			<content:encoded><![CDATA[<p>As some of you might know, I am a BIG BIG fan of Microsoft&#8217;s SQL Reporting Services 2005 and STILL (Arggh!) haven&#8217;t had a chance to play with SQL Reporting Services 2008! For awhile now, I have been wanting to take my reports to a new level (mainly targetted at producing an enhanced suits of the Service Desk Express reports) and as such I have been looking into some of the 3rd party add-ons that are available.</p>
<p>Recently I have been doing some experimentation with the demo version of the <a title="Dundas Map For SQL Reporting Services" href="http://www.dundas.com/Products/Map/RS/index.aspx" target="_blank">Dundas Map for SQL Reporting Services 2005</a> &#8211; specifically attempting to dynamically populate symbols (in my case Cities) based on dynamic latitudes and longitudes retrieved from a database. Whilst the Dundas Map Control is very cool, this simple task is NOT at all straightforward and consequently I thought explaining it would make a good post. So here goes.</p>
<h2>The Basic Stuff</h2>
<p>Once you have installed the Dundas Map Control you can drag it onto any report using the SQL Server Business Intelligence Development Studio. A nice Wizard appears&#8230;KILL IT!! Seriously, the Wizard is fine if you want to colour sections of the map based on the sum of values for that area (e.g. sales in Wales vs Scotland). For dynamic symbols it is completely useless as you MUST populate dynamic symbols in code (thankfully either C# or VB.NET)! So you should end up with something that looks like this:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_03.jpg"><img class="alignnone size-thumbnail wp-image-848" title="Dundas Map Example 03" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_03-150x150.jpg" alt="Dundas Map Example 03" width="150" height="150" /></a></p>
<p>Right-click on the Map and select Properties from the popup menu and this is where you can configure what part of the world the map displays. So in my case I have selected the UK and dragged my Dundas Map Control to fill the area of my report as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_04.jpg"><img class="alignnone size-thumbnail wp-image-849" title="Dundas Map Example 04" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_04-150x150.jpg" alt="Dundas Map Example 04" width="150" height="150" /></a></p>
<p>Now my database structure looks like this:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_01.jpg"><img class="alignnone size-medium wp-image-847" title="Dundas Map Example 01" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_01-300x213.jpg" alt="Dundas Map Example 01" width="300" height="213" /></a></p>
<p>In order to make this post realistic, I want my report to call a stored procedure to return the Cities for a given region (or all regions) and as such I need a stored procedure, a dataset of regions and a parameter that uses these regions as shown below:</p>
<p><strong>dsRegions:</strong></p>
<p><code>SELECT -1 As [RegionID], 'All Regions' As [RegionName] UNION SELECT RegionID, RegionName FROM dbo.Regions ORDER BY 2</code></p>
<p><strong>RegionID Parameter:</strong></p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_06.jpg"><img class="alignnone size-thumbnail wp-image-850" title="Dundas Map Example 06" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_06-150x150.jpg" alt="Dundas Map Example 06" width="150" height="150" /></a></p>
<p><strong>StoredProcedure [dbo].[up_Cities_Select]:</strong></p>
<p><code>CREATE PROC [dbo].[up_Cities_Select]<br />
@RegionID int<br />
AS<br />
SELECT R.RegionName,<br />
C.CityName,<br />
C.Latitude,<br />
C.Longitude,<br />
C.Population<br />
FROM dbo.Cities C<br />
JOIN dbo.Regions R<br />
ON R.RegionID = C.RegionID<br />
WHERE (R.RegionID = @RegionID OR @RegionID = -1)<br />
ORDER BY C.Population DESC</code></p>
<h2>Code</h2>
<p>So far so good. Now here is where things get a little crazy. Right-click on the Map and select View Code from the popup menu. This bring up the Code Editor Window where you choose your choice of language and select the Event you are interested in coding for. For the purpose of this demo I will select VB.NET and the event I am interested in is PostInitialize as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_07.jpg"><img class="alignnone size-thumbnail wp-image-853" title="DundasMapExample_07" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_07-150x150.jpg" alt="DundasMapExample_07" width="150" height="150" /></a></p>
<p>There are couple of gotchas that you REALLY need to be aware of before you start using this control:</p>
<ul>
<li>You cannot access the DataSources from the code and as such everything (including the connectionstring to the database) needs to be provided in code!</li>
<li>You cannot access the DataSets from the code which means that you need to write all the SQL in the code. For this reason I cannot imagine a realistic example when you wouldn&#8217;t use a stored procedure as it makes the code SO much more legible as you will see.</li>
</ul>
<p>Let me step you through my simple code:</p>
<p>The first thing we need to do is add a SymbolDataBindingRule to tell the MapControl which fields to use for the Latitude, Longitude and Name.</p>
<p><code>Dim _sbr As New SymbolDataBindingRule<br />
With _sbr<br />
.Name = "sbr"<br />
.BindingField = "CityName"<br />
.XCoordinateField = "Longitude"<br />
.YCoordinateField = "Latitude"<br />
End With<br />
mapObj.DataBindingRules.Add(_sbr)</code></p>
<p>Now we need to set up a database connection which requires a connectionString. I can&#8217;t be doing with hardcoding a connectionString in .NET code as it makes deployment from test to production a nightmare. So, what you can do is create an additional parameter (hidden this time) that holds the connectionString as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_05.jpg"><img class="alignnone size-thumbnail wp-image-855" title="Dundas Map Example 05" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_05-150x150.jpg" alt="Dundas Map Example 05" width="150" height="150" /></a></p>
<p>Now whilst we are on the subject of Parameters we need to make these Report Parameters available to the Code by clicking on the Code Parameters tab and creating our two new Code Parameters as shown below:</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_02.jpg"><img class="alignnone size-thumbnail wp-image-856" title="Dundas Map Example 02" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_02-150x150.jpg" alt="Dundas Map Example 02" width="150" height="150" /></a></p>
<p>OK, so now we can carry on with our code creating our database connection:</p>
<p><code>Dim _objConn As New System.Data.SqlClient.SqlConnection(codeParams("paramConnectionString"))</code></p>
<p>We then create a SQLCommand object that uses the above connection, and appropriate stored procedure from the database:</p>
<p><code>Dim _objCmd As New System.Data.SqlClient.SqlCommand<br />
With _objCmd<br />
.CommandText = "dbo.up_Cities_Select"<br />
.CommandType = System.Data.CommandType.StoredProcedure<br />
.Connection = _objConn<br />
End With</code></p>
<p>And we pass our parameters to the stored procedure as appropriate:</p>
<p><code>_objCmd.Parameters.Add("@RegionID", System.Data.SqlDbType.Int)<br />
_objCmd.Parameters("@RegionID").Value = codeParams("paramRegionID").ToString</code></p>
<p>We then fire up our connection:</p>
<p><code>_objConn.Open</code></p>
<p>And create a SQLDataAdapter to fill a datatable with the results of the stored procedure:</p>
<p><code>Dim _objDA As New System.Data.SqlClient.SqlDataAdapter(_objCmd)<br />
Dim _dt As New System.Data.DataTable<br />
_objDA.Fill(_dt)</code></p>
<p>We then bind the map object (mapObj) to the datatable.</p>
<p><code>mapObj.DataSource = _dt<br />
mapObj.DataBind</code></p>
<p>And then finally we iterate through each of the symbols we have created setting their name:</p>
<p><code>Dim _i As Integer = 0<br />
For Each _symbol As Symbol In mapObj.Symbols<br />
_symbol.Text = _dt.Rows(_i).Item("CityName")<br />
_i = _i + 1<br />
Next</code></p>
<p>Before closing the connection:</p>
<p><code>_objConn.Close</code></p>
<p>Compile the code and then run it and with a bit of luck it should end up looking like this (obviously subject to some data):</p>
<p><a href="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_08.jpg"><img class="alignnone size-thumbnail wp-image-862" title="Dundas Map Example 08" src="http://www.joatit.com/wordpress/wp-content/uploads/DundasMapExample_08-150x150.jpg" alt="Dundas Map Example 08" width="150" height="150" /></a></p>
<h2>Debugging</h2>
<p>Another tip (stolen from a post in Dundas Support Forums) is to wrap all your code in a Try Catch such that your errors write out to a file on the local machine. This makes debugging ALOT easier:</p>
<p><code>Try<br />
...code above...<br />
Catch ex As Exception<br />
System.IO.File.WriteAllText("C:\MapRSExceptionText.txt", ex.Message &amp; " - " &amp; ex.StackTrace)<br />
End Try</code></p>
<h2>Summary</h2>
<p>You can download a copy of my database and the example report <a title="Dundas Map Example" href="http://www.joatit.com/downloads/misc/DundasMapExample.zip">here</a>.</p>
<p>So, as I said at the beginning of the post &#8211; not straightforward at all! But with a little work this control adds a valuable component to anyone&#8217;s SQL Reporting Services toolbox. As always, any feedback (positive or negative) is always welcome.</p>
<img src="http://www.joatit.com/wordpress/?ak_action=api_record_view&id=837&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.joatit.com/wordpress/?feed=rss2&amp;p=837</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
