<?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>Remedy AR System blog</title>
	<atom:link href="http://arsystem.xqsr.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://arsystem.xqsr.com</link>
	<description>A blog about the BMC Remedy Action Request System</description>
	<lastBuildDate>Mon, 15 Feb 2010 19:36:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Developer Preview of ARSocial, a Twitter &#8211; BMC Remedy AR System integration</title>
		<link>http://arsystem.xqsr.com/2010/01/26/developer-preview-of-arsocial-a-twitter-bmc-remedy-ar-system-integration/</link>
		<comments>http://arsystem.xqsr.com/2010/01/26/developer-preview-of-arsocial-a-twitter-bmc-remedy-ar-system-integration/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 20:37:28 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=92</guid>
		<description><![CDATA[ARSocial is a Twitter &#8211; BMC Remedy AR System integration that allows you to publish tweets, replies, direct messages as well as have an overview of your friends timeline, a search option and mentions. Because it is based on the AR System it can be fully integrated into the ITSM Suite as well as custom [...]]]></description>
			<content:encoded><![CDATA[<p>ARSocial is a Twitter &#8211; BMC Remedy AR System integration that allows you to publish tweets, replies, direct messages as well as have an overview of your friends timeline, a search option and mentions. Because it is based on the AR System it can be fully integrated into the ITSM Suite as well as custom built applications. The plugin and application are open source and released on with a BSD style license. Please be aware this is only a &#8216;preview&#8217; release and is not quite ready for production use.</p>
<div class="wp-caption alignnone" style="width: 527px"><a href="http://farm5.static.flickr.com/4071/4282720646_2d79ee1ef9_o_d.png"><img title="Friends Timeline" src="http://farm5.static.flickr.com/4071/4282720646_2d79ee1ef9_o_d.png" alt="Friend timeline" width="517" height="392" /></a><p class="wp-caption-text">Friend timeline (click to show fullsize)</p></div>
<h2>Architecture</h2>
<p>The ARSocial application consists of several parts:</p>
<ul>
<li><strong>ARDBC Plugin</strong> for listing tweets, mentions, direct messages and search</li>
</ul>
<p>The ARDBC Plugin treats the twitter feeds (friends, direct messages, search) as a database source. Because of the speed of the Twitter API we can do fast searches and show all relevant information, mentions and direct messages. It also allows for the creation of tweets, replies and direct messages.</p>
<ul>
<li><strong>ARSocial Console</strong> form, for an overview of all twitter related items</li>
</ul>
<p>This will be the main form for the users of the application. It is meant to keep an overview of all tweets that are sent by friends, mentions of the twitter account and searches (for example tweets that mention your company name)</p>
<ul>
<li><strong>Vendor and Regular forms</strong></li>
</ul>
<p>Vendor Forms are built from the ARDBC Data sources to show the information in the Tables of the console. Regular forms are used to store sent Tweets and Direct Messages.</p>
<p><em>All items and source code can be found in the download package.</em></p>
<h2>What you will need</h2>
<ul>
<li>BMC Remedy AR System 7.5 server</li>
<li>Midter 7.5</li>
<li>Remedy Developer know-how</li>
<li>Plugin Server know-how</li>
<li>Java know-how</li>
<li>A twitter account</li>
<li>An AR Server that you can break without getting people angry at you (really, I&#8217;m serious)</li>
</ul>
<p>You can download a &#8216;developer preview&#8217; of the application here: <a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2010/01/arsocialpreview.zip" target="_blank">arsocialpreview</a></p>
<p>at the moment there&#8217;s only standard twitter client functionality implemented, and there is no direct integration into the ITSM Suite, however because of the architecture including Vendor Forms it is quite easy to integrate into any itsm and custom built applications. Over the next few weeks I will expand the plugin and the application.</p>
<p>For now please be aware there are several open issues, including ordering of tweets in the table fields and missing functionality in the stand-alone application.</p>
<p>Please provide feedback on <a href="http://communities.bmc.com/communities/message/136874" target="_blank">BMCDN</a> communities, contact me on<a href="http://twitter.com/sebas" target="_blank"> twitter</a> or send an email.</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2010/01/26/developer-preview-of-arsocial-a-twitter-bmc-remedy-ar-system-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get ITSM Application information using the ARSystem Java API</title>
		<link>http://arsystem.xqsr.com/2009/01/26/how-to-get-itsm-application-information-using-the-arsystem-java-api/</link>
		<comments>http://arsystem.xqsr.com/2009/01/26/how-to-get-itsm-application-information-using-the-arsystem-java-api/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 14:41:08 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=55</guid>
		<description><![CDATA[The Remedy Java API can  be used to get a lot of information. We typically either get information from Forms, or we get configuration information from the server itself. In this example we’ll be looking at how to get application information back from the ARSystem.
For that we use the SHARE:Application_Properties Form. This form stores all [...]]]></description>
			<content:encoded><![CDATA[<p style="line-height: 14.25pt;"><span style="font-size: 10pt; color: black; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">The Remedy Java API can  be used to get a lot of information. We typically either get information from Forms, or we get configuration information from the server itself. In this example we’ll be looking at how to get application information back from the ARSystem.</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; color: black; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">For that we use the </span><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">SHARE:Application_Properties Form. This form stores all information about installed BMC applications. It is typically installed if you install ITSM 7.x (It is standard installed on ARSystem 7.5)</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">The entries in this form are not stored and readable in a very user friendly way. Sometimes we just want to information at a glance about which applications are installed, which patch level we’re at and which languages are there. What our Java application does is it will query the form, get the separate entries that belong to the same application together and print it on the screen.</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">Let’s have a look first at how we get the information from the ARSystem form. First we define which fields we want to get back. For this we create an array of integers of the field id’s:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">int[] fieldsFromShareApp = new int[2];</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">fieldsFromShareApp[0] = 400081800; // Property Value</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">fieldsFromShareApp[1] = 400081600; // Application ID</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; color: black; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Then we create a QualifierInfo object, which is our query that we will run. The easiest way to creat an object like this is to use the following syntax:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">QualifierInfo qualSearch = context.parseQualification(&#8220;SHARE:Application_Properties&#8221; , &#8220;&#8216;Property Name&#8217; = &#8220;Name&#8221;");</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">We call the parseQualification function and give it two parameters: the Form name and the qualification as we would put it in the form. Here we use the Database names for the fields, we can also use the field labels. In that case we would use the ParseQualification() function with three parameters: Form name, View Name and Qualification.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">Once we have the QualifierInfo object we use it to run the search:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">List&lt;Entry&gt; foundAppNames = context.getListEntryObjects(&#8220;SHARE:Application_Properties&#8221; , qualSearch, 0, 0, null, fieldsFromShareApp, false, null);</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">This will give us a List of Entry objects that match the qualification. <span style="mso-spacerun: yes;"> </span>For us these are all entries where the Property Name field holds the value Name. For the other options that we can specify here please consult the ARS Java API Javadoc documentation.</span></p>
<p style="line-height: 14.25pt;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">We can see how entries are returned by using the .size() function of the List&lt;Entry&gt; object:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">System.out.println(foundAppNames.size() + &#8221; Applications in SHARE:Application_Properties&#8221;);</span><span style="font-size: 10pt; color: black; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="mso-ansi-language: EN-US;" lang="EN-US"><span style="font-size: small; font-family: Calibri;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">We repeat this step to also retrieve the version, patches and languages installed on the server.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Then we loop through our applications to match up the<span style="mso-spacerun: yes;">  </span>names with versions, patches and languages:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">for (int i = 0; i &lt; foundAppNames.size(); i++)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>Entry foundApp = foundAppNames.get(i);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>String appName = foundApp.get(400081800).toString();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>String appID = foundApp.get(400081600).toString();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>&lt;……….&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US; mso-bidi-font-family: 'Courier New';" lang="EN-US">In the above function we browse through the Entry Objects that we have and set the appID String to hold the application InstanceID. We use this ID to compare it to the Application Instance ID in the version information.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>// now find the versions</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>for (int v = 0; v &lt; foundAppVersions.size(); v++) {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>Entry foundAppVersion = foundAppVersions.get(v);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>String appIDVersion = foundAppVersion.get(400081600).toString();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 3;">                  </span>if (appIDVersion.equals(appID)) {appVersion = foundAppVersion.get(400081800).toString();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 4;">                        </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><span style="mso-tab-count: 3;">                  </span>}// end for loop versions</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">At the end we display the information in a readable format for the user:</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US">System.out.print(appName + &#8221; Version: &#8221; + appVersion);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>if (appPatch != null) {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 4;">                        </span>System.out.print(&#8221; Patch &#8221; + appPatch);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>if (appLanguagepack != null) {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 4;">                        </span>System.out.print(&#8221; &#8221; + appLanguagepack);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 2;">            </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 3;">                  </span>System.out.println();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-tab-count: 1;">      </span>} // end for loop appNames</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Georgia&quot;,&quot;serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p>You can find the full source code to the application here: <a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2008/12/arsystemapplicationinfo.java">arsystemapplicationinfo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2009/01/26/how-to-get-itsm-application-information-using-the-arsystem-java-api/feed/</wfw:commentRss>
		<slash:comments>127</slash:comments>
		</item>
		<item>
		<title>New in ARS 7.5 &#8211; Auto-completion</title>
		<link>http://arsystem.xqsr.com/2009/01/21/new-in-ars-75-auto-completion/</link>
		<comments>http://arsystem.xqsr.com/2009/01/21/new-in-ars-75-auto-completion/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 20:43:04 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.5]]></category>
		<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=66</guid>
		<description><![CDATA[Wow, there are sure a lot of new options in ARS 7.5, a lot of improvements in the GUI, Scalability and other fun stuff. Since I could spend a few months detailing all the new functionality I urge everyone to look at the &#8216;What&#8217;s new in ARS 7.5&#8242; documentation on the BMC site.
I will go [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, there are sure a lot of new options in ARS 7.5, a lot of improvements in the GUI, Scalability and other fun stuff. Since I could spend a few months detailing all the new functionality I urge everyone to look at the &#8216;What&#8217;s new in ARS 7.5&#8242; documentation on the BMC site.</p>
<p>I will go through some of the (I think) best new options in AR System 7.5 in a few posts, starting off with some GUI stuff and going on to the CMDB (which has a complete new user interface!).  Unfortunately I have a few projects lined up at the moment at work so posting will be a bit light over the next few weeks.</p>
<p>One of the coolest (and easiest for developers) GUI enhancement is the Auto-completion. Where in Remedy we used to have to create workflow where a user would press enter in a field and search the database this is now automatically done by the Midtier. Here&#8217;s an example of how it looks:</p>
<p><a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2009/01/auto-completion.png"><img class="alignnone size-full wp-image-67" title="auto-completion" src="http://arsystem.xqsr.com/blog/wp-content/uploads/2009/01/auto-completion.png" alt="auto-completion" width="404" height="137" /></a></p>
<p>Here I just typed an a into the field, the midtier gave me back all the menu items that have an a in the value. This is great news for all the users who want to use the keyboard only and not be bothered with mouseclick on menu items.</p>
<p>The option is simply enabled by attaching a menu to a field and setting the following option in the field properties:</p>
<p><a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2009/01/devstudiooption.png"><img class="alignnone size-full wp-image-68" title="devstudiooption" src="http://arsystem.xqsr.com/blog/wp-content/uploads/2009/01/devstudiooption.png" alt="devstudiooption" width="282" height="102" /></a></p>
<p>It is under the Display Options in the Developer Studio (which I&#8217;ll look at in another post). Unfortunately this option only seems to work in the Midtier at the moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2009/01/21/new-in-ars-75-auto-completion/feed/</wfw:commentRss>
		<slash:comments>439</slash:comments>
		</item>
		<item>
		<title>AR System 7.5</title>
		<link>http://arsystem.xqsr.com/2009/01/19/ar-system-75/</link>
		<comments>http://arsystem.xqsr.com/2009/01/19/ar-system-75/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 06:10:06 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.5]]></category>
		<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=63</guid>
		<description><![CDATA[Remedy ARSystem 7.5 and CMDB 7.5 were released this weekend and have a whole lot of new options, including a 100% java api (so no native libraries anymore). I will write about some of the new options here once I have explored them.
]]></description>
			<content:encoded><![CDATA[<p>Remedy ARSystem 7.5 and CMDB 7.5 were released this weekend and have a whole lot of new options, including a 100% java api (so no native libraries anymore). I will write about some of the new options here once I have explored them.</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2009/01/19/ar-system-75/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Twittering</title>
		<link>http://arsystem.xqsr.com/2009/01/13/twittering/</link>
		<comments>http://arsystem.xqsr.com/2009/01/13/twittering/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 16:42:32 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=60</guid>
		<description><![CDATA[Creating a test post for the twitter integration. http://twitter.com/sebas
]]></description>
			<content:encoded><![CDATA[<p>Creating a test post for the twitter integration. <a href="http://twitter.com/sebas">http://twitter.com/sebas</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2009/01/13/twittering/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Get License info using the Remedy ARS Java API</title>
		<link>http://arsystem.xqsr.com/2008/12/29/get-license-info-using-the-remedy-ars-java-api/</link>
		<comments>http://arsystem.xqsr.com/2008/12/29/get-license-info-using-the-remedy-ars-java-api/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 00:36:38 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.1]]></category>
		<category><![CDATA[arsystem]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ars]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=50</guid>
		<description><![CDATA[Using the Remedy ARS Java API we can get all kinds of information about the licenses that are installed on the server. These can be server licenses (ARServer, Fixed, Floating, etc.) or application licenses (Incident Management, Problem Management, etc).
What we first of course do is get a proper ARServerUser, as usual we will create one [...]]]></description>
			<content:encoded><![CDATA[<p>Using the Remedy ARS Java API we can get all kinds of information about the licenses that are installed on the server. These can be server licenses (ARServer, Fixed, Floating, etc.) or application licenses (Incident Management, Problem Management, etc).</p>
<p>What we first of course do is get a proper ARServerUser, as usual we will create one hardcoded for the example.<br />
<code>ARServerUser context = new ARServerUser("Demo", "", "","192.168.184.128")</code></p>
<p>Now we use the ARServerUser.getListLicense() method to get a List of LicenseInfo objects:</p>
<p><code>List&lt;LicenseInfo&gt; licenseInfo= context.getListLicense(null);</code></p>
<p>What we do now is walk through the <code>List&lt;LicenseInfo&gt;</code> that we got (in licenseInfo) and show some information about it.<br />
<code><br />
for (int i = 0; i &lt; licenseInfo.size(); i++) {<br />
LicenseInfo licInfo = licenseInfo.get(i);<br />
System.out.println(licInfo.getlicType() + " " + licInfo.getNumLicenses() );<br />
}</code></p>
<p>We show the Type of the license (ie. BMC Incident Management Application, User Floating, etc) and the number of licenses.</p>
<p>If you want to see all the information that we can get back about license information have a look at the LicenseInfo object in the Javadoc Documentation.</p>
<p>You can download the complete source for this example here:<a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2008/12/arsystemlicenseinfo.java">arsystemlicenseinfo</a></p>
<p>This entry is part of the <a href="http://arsystem.xqsr.com/bmc-remedy-ars-java-api/">BMC Remedy ARSystem Java api</a> series</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2008/12/29/get-license-info-using-the-remedy-ars-java-api/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Java &#8211; Get Server Information</title>
		<link>http://arsystem.xqsr.com/2008/12/21/java-get-server-information/</link>
		<comments>http://arsystem.xqsr.com/2008/12/21/java-get-server-information/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 15:46:18 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.1]]></category>
		<category><![CDATA[arsystem]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[remedy]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ars]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/?p=25</guid>
		<description><![CDATA[Using the Java API we can get all kinds of information about the AR System server.
In this example we will get information back about the server, operating system and databank. We are using the getServerInfo(requestList) method for that.
We first specify which information we want to get back from the server:

int[] requestList = new int[7];
requestList[0] = [...]]]></description>
			<content:encoded><![CDATA[<p>Using the Java API we can get all kinds of information about the AR System server.</p>
<p>In this example we will get information back about the server, operating system and databank. We are using the getServerInfo(requestList) method for that.</p>
<p>We first specify which information we want to get back from the server:<br />
<code><br />
int[] requestList = new int[7];<br />
requestList[0] = ServerInfo.DB_TYPE;<br />
requestList[1] = ServerInfo.SERVER_IDENT;<br />
requestList[2] = ServerInfo.OS;<br />
</code><br />
We create a new integer array and fill it with the static values that we want. For example ServerInfo.DB_TYPE is the type of database. If you want to have a complete list of all the information you can get back refer to the ServerInfo class in the javadocs.</p>
<p>Now we go to the server and ask for a ServerInfoMap of the information. We use the .getServerInfo() method from ARServerUser for that.<br />
<code><br />
ServerInfoMap serverInfoMap = context.getServerInfo(requestList);<br />
</code><br />
What we have now is an object that is filled with the information we requested, we can get this information out by using the .get method of our ServerInfoMap object. like this:<br />
<code><br />
System.out.println("Database Type: " + serverInfoMap.get(1));<br />
System.out.println("Database Version: "    + serverInfoMap.get(Constants.AR_SERVER_INFO_DB_VERSION));<br />
System.out.println("Full Hostname: "+ serverInfoMap.get(Constants.AR_SERVER_INFO_FULL_HOSTNAME));<br />
</code><br />
As you can see for the key we can use either the ServerInfo.INT, Constants.INT or the normal integer values.</p>
<p>You can download the full source code here: <a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2008/12/arsystemserverinfo.java" target="_blank">arsystemserverinfo</a> (don&#8217;t forget to change the servername)</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2008/12/21/java-get-server-information/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Eeuhm, oops.</title>
		<link>http://arsystem.xqsr.com/2008/12/21/eeuhm-oops/</link>
		<comments>http://arsystem.xqsr.com/2008/12/21/eeuhm-oops/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 13:04:35 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/2008/12/21/eeuhm-oops/</guid>
		<description><![CDATA[Ok, so I kinda let the site slide and did not do any updates for a year. However with a new version on the horizon I think it&#8217;s time to take the dust off. I&#8217;m hoping to prepare something for then, and will keep you updated.
Also it seems I had an old email address at [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so I kinda let the site slide and did not do any updates for a year. However with a new version on the horizon I think it&#8217;s time to take the dust off. I&#8217;m hoping to prepare something for then, and will keep you updated.</p>
<p>Also it seems I had an old email address at the about page. I updated it and it should be fine now.</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2008/12/21/eeuhm-oops/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ARS 7.1 &#8211; New Java API</title>
		<link>http://arsystem.xqsr.com/2007/09/10/ars-71-new-java-api/</link>
		<comments>http://arsystem.xqsr.com/2007/09/10/ars-71-new-java-api/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 17:51:23 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.1]]></category>
		<category><![CDATA[arsystem]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[new in 7.1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ars]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/2007/09/10/ars-71-new-java-api/</guid>
		<description><![CDATA[This article is part of my New in ARS 7.1 series and my Java ARS API series.
One of the major changes for ARS 7.1 is that it has a new Java API. It looks and feels like it is a complete rewrite from the original API. From the BMC documentation:
The primary goals of this API [...]]]></description>
			<content:encoded><![CDATA[<p>This article is part of my <a href="http://arsystem.xqsr.com/new-in-ars-71/">New in ARS 7.1</a> series and my <a href="http://arsystem.xqsr.com/bmc-remedy-ars-java-api/">Java ARS API</a> series.</p>
<p>One of the major changes for ARS 7.1 is that it has a new Java API. It looks and feels like it is a complete rewrite from the original API. From the BMC documentation:</p>
<p>The primary goals of this API revision are to simplify the interface and eliminate drawbacks of the 7.0 API. Changes include:</p>
<ul>
<li>Simplified interface.</li>
<li>More Java-friendly.</li>
<li>Use of Java typed-collections.</li>
<li>Improved stability, performance, and ease of deployment.</li>
<li>Increased developer productivity by means of better named API methods, intellisense of IDEs, and documentation.</li>
<li>Drive towards a “pure” Java implementation and eventually eliminate Java Native Interface (JNI) use.</li>
</ul>
<p>While this is all true, one of the main drawbacks is that you almost completely have to rewrite old Java applications if you want to use them with the new API.</p>
<p>However if you are writing new Java applications this new API is the best release ever. I only played around with it a short time but was really impressed by how it all fits together. Lots and lots of irritating String wrappers have been dropped, multiple &#8216;nested&#8217; items have become uncluttered and the toString functions now returns nice Strings instead of garbled nonsense.</p>
<p><strong>Sample Code</strong></p>
<p>For the sample code (and all ARS Java API 7.1 code) to work you will need <a href="http://java.sun.com/javase/downloads/index_jdk5.jsp" target="_blank">Java 1.5.0_12</a> or later. I personally use <a href="http://www.eclipse.org/downloads/" target="_blank">Eclipse 3.2 Europa (Eclipse IDE for Java Developers</a>) as my development environment, however you can of course use any.</p>
<p><a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2007/09/XQSRJavaExample.zip">Full source code of samples with comments download (click)</a></p>
<p>Let&#8217;s take a look at creating a new Entry in a Form (yes, they are called Forms now!)<br />
<code><br />
ARServerUser context = new ARServerUser("Demo", "", "", "localhost");<br />
</code><code>Entry newEntry = new Entry();</p>
<p>newEntry.put(7, new Value(0));<br />
newEntry.put(2, new Value("JavaSubmitter"));<br />
newEntry.put(8, new Value("Short Description"));</p>
<p>try{<br />
System.out.println(context.createEntry("XQSR:JavaExample", newEntry));<br />
}<br />
catch(ARException arException){<br />
arException.printStackTrace();<br />
}<br />
}<br />
</code></p>
<p>Yes, that is indeed all, no need for anything more. The Entry Class now holds a map with the Field IDs (integers) and Value objects. This is a great improvement over the <code>EntryItem[] entryList = new EntryItem[3];</code> &#8216;fun&#8217; that was in previous API versions.</p>
<p>As for retrieving an Entry, changing values and submitting it again the following example should give a quick impression:<br />
<code><br />
ARServerUser context = new ARServerUser("Demo", "", "", "localhost");</p>
<p>int[] fieldIDsToRetrieve = new int[6];<br />
fieldIDsToRetrieve[0] = 1;<br />
fieldIDsToRetrieve[1] = 2;<br />
fieldIDsToRetrieve[2] = 3;<br />
fieldIDsToRetrieve[3] = 5;<br />
fieldIDsToRetrieve[4] = 6;<br />
fieldIDsToRetrieve[5] = 7;</p>
<p>try{<br />
Entry retrievedEntry = context.getEntry("XQSR:JavaExample", "000000000000001", fieldIDsToRetrieve);</p>
<p>for(int i=0; i&lt;fieldIDsToRetrieve.length; i++){<br />
System.out.println(retrievedEntry.get(fieldIDsToRetrieve[i]) );</p>
<p>}<br />
retrievedEntry.put(8, new Value("I am updated"));</p>
<p>context.setEntry("XQSR:JavaExample", "000000000000001",  retrievedEntry,new Timestamp(0), 0);</p>
<p>}<br />
catch(ARException arException){<br />
arException.printStackTrace();<br />
}<br />
</code><br />
We fill an integer array with all Field IDs we want to retrieve, make a call to the DB, print out the values, set another field with a value and save it again. Again, no things like:</p>
<p>entry.setEntryItems(entryItems);<br />
entry.store();</p>
<p>Where we had to set an EntryItems object and fill it with Field IDs and Values separate, we now go to the Entry object, and specify where to save it.</p>
<p>There&#8217;s a whole lot more to this API than I said here in this small article, unfortunately I don&#8217;t have too much time explore it all at the moment. Once I start writing more applications with it I&#8217;m sure other new functions and possibilities show up.</p>
<p><strong> Conclusion</strong></p>
<p>A great step forward for the ARS Java API. Of course it is never fun to break backwards compatibility with version 7.0 and earlier, but at of course those applications will still run with the old libraries against a 7.1 server. If you start writing a new Java application and use the 7.1 API you&#8217;ll never want to return the old one.</p>
<p><a href="http://arsystem.xqsr.com/blog/wp-content/uploads/2007/09/XQSRJavaExample.zip">Full source code with comments download (click)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2007/09/10/ars-71-new-java-api/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>ARSystem 7.1 &#8211; Status History</title>
		<link>http://arsystem.xqsr.com/2007/09/09/arsystem-71-status-history/</link>
		<comments>http://arsystem.xqsr.com/2007/09/09/arsystem-71-status-history/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 13:17:02 +0000</pubDate>
		<dc:creator>Sebastiaan de Man</dc:creator>
				<category><![CDATA[7.1]]></category>
		<category><![CDATA[arsystem]]></category>
		<category><![CDATA[bmc]]></category>
		<category><![CDATA[new in 7.1]]></category>
		<category><![CDATA[remedy]]></category>

		<guid isPermaLink="false">http://arsystem.xqsr.com/2007/09/09/arsystem-71-status-history/</guid>
		<description><![CDATA[This article is part of the New in ARS 7.1 series
One of the new options in 7.1 is the option to disable the Status History for forms. This has the advantage that the Status History tables in the database do not need to be updated. Theoretically this could save a lot of time.
Functionality
The Status History of [...]]]></description>
			<content:encoded><![CDATA[<p>This article is part of the <a href="http://arsystem.xqsr.com/new-in-ars-71/">New in ARS 7.1</a> series</p>
<p>One of the new options in 7.1 is the option to disable the Status History for forms. This has the advantage that the Status History tables in the database do not need to be updated. Theoretically this could save a lot of time.</p>
<p><strong>Functionality</strong></p>
<p>The Status History of a form can be disabled by going to Form Properties and checking the &#8216;Disable Status History&#8217; button on the &#8216;Basic&#8217; tab. This has to be done for each form separate.</p>
<p><strong>Test</strong></p>
<p> To test out this new functionality I built a small application (<a target="_blank" href="http://arsystem.xqsr.com//blog/wp-content/uploads/2007/09/XQSR_Status_History.zip">Download here to test yourself</a>). It has two forms, one with Status History enabled and one disables. Both forms have 1000 records. Separate is a Display Only field with a button and four fields, each recording the time it takes to set the status of all records to Assigned and back to New. The four times it records:</p>
<ul>
<li>Changing status of 1000 records with Status History
<ul>
<li>Using Active Links</li>
<li>Using Filters</li>
</ul>
</li>
</ul>
<ul>
<li>Changing status of 1000 records without Status History
<ul>
<li>Using Active Links</li>
<li>Using Filters</li>
</ul>
</li>
</ul>
<p> The improvements speak pretty much for themself, keeping in mind that the testenvironment is a bit extreme.</p>
<p>Testhardware: VMWare Workstation on Core 2 Due 2.0 Ghz with 2 Gb RAM. VMWare RAM: 1552 Mb</p>
<p>The following times (seconds) are averages over 5 tests:</p>
<table border="1" cellPadding="0" cellSpacing="0" style="border-collapse: collapse; border: medium none" class="MsoTableGrid">
<tr>
<td width="205" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 153.5pt; padding-top: 0cm; background-color: transparent; border: windowtext 1pt solid">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">&nbsp;</p>
</td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">Active Link Push Field</font></font></td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">Filter Push Field</font></font></td>
</tr>
<tr>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 153.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">With Status History</font></font></td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><span style="font-size: 10pt; font-family: Arial">34.2</span><font size="3" face="Times New Roman"> </font></td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">4.8</font></font></td>
</tr>
<tr>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 153.5pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">Without Status History</font></font></td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">32.8</font></font></td>
<td width="205" vAlign="top" style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 153.55pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent"><font size="3"><font face="Times New Roman">3.8</font></font></td>
</tr>
</table>
<p>As expected the biggest percentual gain is on the server, almost 20% !</p>
<p><strong> SQL</strong></p>
<p>If we look at the SQL that gets generated when updating one record we can see how we get there. this is the SQL that gets generated when updating a ticket in the user tool with Status History enabled:</p>
<p>*/BEGIN TRANSACTION<br />
*/OK<br />
*/UPDATE T1676 SET C7=1,C5=&#8217;Demo&#8217;,C6=1189331127 WHERE C1 = &#8216;000000000000001&#8242; AND ((C6 &lt;= 1189331110) OR (C5 = &#8216;Demo&#8217;))<br />
*/OK<br />
*/UPDATE H1676 SET T1=1189331127,U1=&#8217;Demo&#8217; WHERE entryId = &#8216;000000000000001&#8242;<br />
*/OK<br />
*/COMMIT TRANSACTION<br />
*/OK<br />
*/SELECT C1,C2,C3,C4,C5,C6,C7,C8,0 FROM T1676 WHERE C1 = &#8216;000000000000001&#8242;<br />
*/OK<br />
*/SELECT entryId,T0,U0,T1,U1,T2,U2,T3,U3,T4,U4 FROM H1676 WHERE entryId = &#8216;000000000000001&#8242;<br />
*/OK</p>
<p>As you can see first we update the ticket table (T1676), then the status history (H1676), after that we retrieve the ticket first, and then again the status history.</p>
<p>The following SQL is without Status History:</p>
<p>*/BEGIN TRANSACTION<br />
*/OK<br />
*/UPDATE T1677 SET C7=1,C5=&#8217;Demo&#8217;,C6=1189331073 WHERE C1 = &#8216;000000000000001&#8242; AND ((C6 &lt;= 1189331035) OR (C5 = &#8216;Demo&#8217;))<br />
*/OK<br />
*/COMMIT TRANSACTION<br />
*/OK<br />
*/SELECT C1,C2,C3,C4,C5,C6,C7,C8,0 FROM T1677 WHERE C1 = &#8216;000000000000001&#8242;<br />
*/OK</p>
<p> As you notice, 50% less SQL statements! This is of course only because there is no further workflow on the form, large forms with lots of checking and other workflow (push fields) will not notice too much performance improvement. However this will drastically improve the performance of mass updates through the Atrium Integration Engine (the application formely known as EIE).</p>
<p><strong>Database</strong></p>
<p>When disabling the Status History functionality, all information in the H table is deleted, however the table itself is not removed from the database.</p>
<p><strong> Conclusion</strong></p>
<p>Very neat feature, that on mass updates will improve the perfomance a lot. In normal daily use it is unlikely that users will have a notable performance increase when updating tickets, but of course it will ease up on the load of a database. It would perhaps have been nice to have a general checkbox to disable all Status History on a server.</p>
]]></content:encoded>
			<wfw:commentRss>http://arsystem.xqsr.com/2007/09/09/arsystem-71-status-history/feed/</wfw:commentRss>
		<slash:comments>446</slash:comments>
		</item>
	</channel>
</rss>
