<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://www.dovetailsoftware.com">
<channel>
 <title>Gary Sherman's blog</title>
 <link>http://www.dovetailsoftware.com/blog/gsherman</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/GarySherman" /><feedburner:info uri="garysherman" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>GarySherman</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
 <title>Dovetail Mobile on tablets</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/oyFZ62dsor8/dovetail-mobile-on-tablets</link>
 <description>&lt;p&gt;The question has come up a few times: can I use Dovetail on a tablet?&amp;#160; Well, &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile&lt;/a&gt; supports mobile devices, and a tablet is a mobile device, so it should work, right? Yes, indeed it does. Our &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile app&lt;/a&gt; works great on tablets. &lt;/p&gt;  &lt;p&gt;And for and for those Clarify customers who want to access their Clarify system via smartphones and tablets, Dovetail Mobile is a great choice for this. We’ve certainly seen more and more organizations allowing employees to use their own devices, so having apps that are compatible with a user’s device is important. Web apps are a great choice for this. &lt;/p&gt;  &lt;p&gt;I’ve captured a few screenshots using a few different devices (iPad, Kindle Fire, and a Motorola Xoom), so you can see that Dovetail is compatible with a variety of tablets.&lt;/p&gt;  &lt;h2&gt;iPad&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_home_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ipad_home" border="0" alt="ipad_home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_home_thumb.jpg" width="332" height="442" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_case_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ipad_case" border="0" alt="ipad_case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_case_thumb.jpg" width="331" height="440" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_search_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ipad_search" border="0" alt="ipad_search" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/ipad_search_thumb.jpg" width="330" height="438" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Kindle Fire&lt;/h2&gt;  &lt;p&gt;Unfortunately, the Fire doesn’t have a built-in screenshot app, so I fell back to taking a pic of the whole tablet itself.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_home_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="kindle_home" border="0" alt="kindle_home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_home_thumb.jpg" width="318" height="423" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_case_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="kindle_case" border="0" alt="kindle_case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_case_thumb.jpg" width="321" height="427" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_search_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="kindle_search" border="0" alt="kindle_search" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/kindle_search_thumb.jpg" width="327" height="435" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Motorola Xoom (Android)&lt;/h2&gt;  &lt;p&gt;Again, this Android doesn’t have a built-in screenshot app. Sorry. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/xoom_home_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xoom_home" border="0" alt="xoom_home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/xoom_home_thumb.jpg" width="374" height="282" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/xoom_case_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xoom_case" border="0" alt="xoom_case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/xoom_case_thumb.jpg" width="375" height="282" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;FAQ&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;What tablets will it work on?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If it’s got a web browser on it, it’ll work. That’s one of the advantages of Dovetail Mobile being a web app as opposed to a native app. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Which view mode is recommended?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As I showed in a &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/13/what%E2%80%99s-new-in-dovetail-mobile-dovetail-agent-lite-version-21"&gt;previous post&lt;/a&gt;, Dovetail Mobile has three view modes: &lt;/p&gt;  &lt;p&gt;Classic Mobile, Modern Mobile, and Desktop.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Desktop&lt;/strong&gt;: for laptops and desktops. Sometimes referred to as &lt;strong&gt;Dovetail Agent Lite&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Modern Mobile&lt;/strong&gt;: For modern mobile devices like iPhone and Android &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Classic Mobile&lt;/strong&gt;: Minimalist version for older smart phones &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Since today’s tablets are all pretty “modern”, the Modern Mobile mode looks great (which is the mode shown in all of the screenshots above). &lt;/p&gt;  &lt;p&gt;But, if you prefer the Desktop or Classic Mobile mode – go for it. They all work. Your preference.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What version of Clarify will this work with?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dovetail Mobile will work with any version of Clarify, from Clarify 7 –&amp;gt; Clarify 12, Amdocs 6 and 7. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Do I have to upgrade my Clarify version to use Dovetail Mobile?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;No. It works with the version of Clarify you have. So even if you’re on an older version of Clarify, you can still add mobile access to your system.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Can I try it out on my device?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sure. Just &lt;a href="mailto:gary@dovetailsoftware.com"&gt;drop me an email&lt;/a&gt;, and I’ll give you access to a demo site that you can use.&lt;/p&gt;  &lt;h2&gt;What about you?&lt;/h2&gt;  &lt;p&gt;In case you can’t tell, I really dig this app. When I’m at work, I use Dovetail Mobile on my laptop (in Desktop mode). When I’m at home, I use it on my iPad (in Modern Mobile mode). And when I’m, uh, mobile, I use it on my iPhone (in Modern Mobile mode).&amp;#160; &lt;/p&gt;  &lt;p&gt;Are you using tablets? At home? At work? Is your organization using tablets? What would make this more useful to you or your organization? I’d love to hear what you have to say. Leave a comment below. &lt;/p&gt;  &lt;p&gt;Rock on.&lt;/p&gt; &lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=oyFZ62dsor8:LalhCAwM-Q4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=oyFZ62dsor8:LalhCAwM-Q4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/oyFZ62dsor8" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/17/dovetail-mobile-on-tablets#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/android">android</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-mobile-agent">Dovetail Mobile Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/ipad">ipad</category>
 <category domain="http://www.dovetailsoftware.com/tags/mobile-0">mobile</category>
 <category domain="http://www.dovetailsoftware.com/tags/tablet">tablet</category>
 <pubDate>Tue, 17 Jan 2012 20:04:39 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1747 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/17/dovetail-mobile-on-tablets</feedburner:origLink></item>
<item>
 <title>What’s new in Dovetail Mobile / Dovetail Agent Lite version 2.1</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/j9R5__7o6JQ/what%E2%80%99s-new-in-dovetail-mobile-dovetail-agent-lite-version-21</link>
 <description>&lt;p&gt;Dovetail Mobile 2.1 was recently released, so I wanted to to highlight a few of the things that are new in this release.&lt;/p&gt;  &lt;p&gt;BTW – did you know you can subscribe to our &lt;a href="http://support.dovetailsoftware.com/selfservice/products/release-feed"&gt;Dovetail product release RSS feed&lt;/a&gt;? This allows you to stay up to date about new releases.&lt;/p&gt;  &lt;h2&gt;Unified Mobile and Agent Lite&lt;/h2&gt;  &lt;p&gt;Dovetail Mobile now provides users with 3 view modes: Classic Mobile, Modern Mobile, and Desktop.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Desktop&lt;/strong&gt;: for laptops and desktops. Sometimes referred to as &lt;strong&gt;Dovetail Agent Lite&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Modern Mobile&lt;/strong&gt;: For modern mobile devices like iPhone and Android &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Classic Mobile&lt;/strong&gt;: Minimalist version for older smart phones &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In previous versions, you would pick either Desktop mode or Mobile mode when setting up the application. If you wanted to run Mobile and Agent Lite (Desktop mode) you would need two instances of the application.&lt;/p&gt;  &lt;p&gt;Now, all those modes are available in a single instance of the application.&lt;/p&gt;  &lt;p&gt;Depending on the type of device/browser you’re using to access the application, you will be automagically presented with the view mode that is most appropriate for you.&lt;/p&gt;  &lt;p&gt;So if Sally logs in with her iPhone, and Fred logs in with IE on his laptop, and Marty logs in with his older BlackBerry – they’ll all access the same application, but have a user interface that is styled appropriately for their device.&lt;/p&gt;  &lt;p&gt;The core functionality is the same across all three – it’s just the styling that’s different.&lt;/p&gt;  &lt;p&gt;Lets look at some examples of how the different view modes look.&lt;/p&gt;  &lt;h3&gt;Home Page&lt;/h3&gt;  &lt;p&gt;This is the same home page for the application, just with different styling.&lt;/p&gt;  &lt;p&gt;Desktop:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_home_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="desktop.home" border="0" alt="desktop.home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_home_thumb_1.png" width="558" height="447" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Modern Mobile:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_home_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iphone.home" border="0" alt="iphone.home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_home_thumb.png" width="283" height="492" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Classic Mobile:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/classic_home_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="classic.home" border="0" alt="classic.home" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/classic_home_thumb.png" width="286" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;Case Page&lt;/h3&gt;  &lt;p&gt;Here’s an example of the case page in each mode.&lt;/p&gt;  &lt;p&gt;Desktop:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_case_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="desktop.case" border="0" alt="desktop.case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_case_thumb.png" width="553" height="574" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Modern Mobile:&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_case_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iphone.case" border="0" alt="iphone.case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_case_thumb.png" width="296" height="558" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Classic Mobile:&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/classic_case_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="classic.case" border="0" alt="classic.case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/classic_case_thumb.png" width="304" height="450" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Switch View Mode&lt;/h3&gt;  &lt;p&gt;You can also switch to a specific mode. At the bottom of both the login and home pages is a link to Switch. It will take you to a &lt;strong&gt;Select your view mode&lt;/strong&gt; page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_switch_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="desktop.switch" border="0" alt="desktop.switch" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/desktop_switch_thumb_2.png" width="577" height="431" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_switch_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iphone.switch" border="0" alt="iphone.switch" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/iphone_switch_thumb.png" width="285" height="543" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;    &lt;h2&gt;Attachments&lt;/h2&gt;  &lt;p&gt;Attachments can now be uploaded and downloaded. &lt;/p&gt;  &lt;p&gt;This works just as you would expect on a laptop or desktop.&lt;/p&gt;  &lt;p&gt;On mobile devices, file uploads are dependent on the capabilities of the device. For example, on an iPhone, you can’t upload a file, as there really isn’t a file system to pick a file from. &lt;/p&gt;  &lt;h2&gt;My Recent Items&lt;/h2&gt;  &lt;p&gt;The Home page now has a link to &lt;em&gt;My Recent Items&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;These are items that you recently viewed. Doesn't matter who owns them, or if they're opened or closed. This is useful for quickly getting back to an item that you recently viewed. For example, Fred may look at a case that Sally owns, and may need to quickly get back to it in the near future. &lt;/p&gt;  &lt;h2&gt;Employee Lookup on Assign Page&lt;/h2&gt;  &lt;p&gt;When assigning a case or subcase, we’ve expanded the employee search to be two separate fields: first name and last name.&lt;/p&gt;  &lt;p&gt;Previously, there was just one field, which would search for either first name &lt;strong&gt;or&lt;/strong&gt; last name. &lt;/p&gt;  &lt;p&gt;The recent change has made it clearer for users.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/assign_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="assign" border="0" alt="assign" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/assign_thumb.png" width="614" height="256" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;h2&gt;Allow solutions to be linked to closed cases &lt;/h2&gt;  &lt;p&gt;I’ve discussed this workflow and need in &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/08/23/linking-a-solution-to-a-closed-case"&gt;a previous post&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Here you can see the new capability:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/link_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="link" border="0" alt="link" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/link_thumb.png" width="596" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;That highlights just some of the recent capabilities we’ve added to Dovetail Mobile. &lt;/p&gt;  &lt;p&gt;This application has become the primary Dovetail application that we use around here when working on support cases. Having mobile access is great (everyone here has a contemporary smartphone), and the quickness and ease-of-use of the desktop mode make it our preferred app. We still do use Dovetail Agent for more complex tasks (configuring site parts, creating contracts, etc.). Between the functionality that we want to add to the app, coupled with customer requests, the future of this app looks bright.&lt;/p&gt; &lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=j9R5__7o6JQ:9Mx3OuwDAlU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=j9R5__7o6JQ:9Mx3OuwDAlU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/j9R5__7o6JQ" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/13/what%E2%80%99s-new-in-dovetail-mobile-dovetail-agent-lite-version-21#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-mobile-agent">Dovetail Mobile Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/mobile-0">mobile</category>
 <category domain="http://www.dovetailsoftware.com/tags/mobile-agent">mobile agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/product-releases">product releases</category>
 <pubDate>Fri, 13 Jan 2012 16:59:16 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1746 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/13/what%E2%80%99s-new-in-dovetail-mobile-dovetail-agent-lite-version-21</feedburner:origLink></item>
<item>
 <title>What’s New in Dovetail Agent 4.5 : Part 3</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/-_U3UuhUITc/what%E2%80%99s-new-in-dovetail-agent-45-part-3</link>
 <description>&lt;p&gt;We’re continuing on with highlighting some of what’s New in &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Agent"&gt;Dovetail Agent&lt;/a&gt; 4.5. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-1-console"&gt;Part 1&lt;/a&gt;. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-2-search-and-query"&gt;Part 2&lt;/a&gt;. &lt;/p&gt;  &lt;h2&gt;Multiple phone numbers and email addresses for contacts&lt;/h2&gt;  &lt;p&gt;I’ve posted in the past about &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/06/10/multiple-email-addresses-for-a-contact-or-employee"&gt;multiple email addresses for a contact&lt;/a&gt;, and how we have existing schema for this within Clarify, but we needed the UI to support this. &lt;/p&gt;  &lt;p&gt;Dovetail Agent now provides this UI.&lt;/p&gt;  &lt;p&gt;Contacts can now have unlimited phone numbers and email addresses. There is a new &lt;strong&gt;Phone/Email&lt;/strong&gt; tab used to manage the phone numbers and email addresses for a contact.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/multiple_phone_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="multiple_phone" border="0" alt="multiple_phone" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/multiple_phone_thumb.png" width="678" height="515" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In addition, all of the additions/changes/deletes of these email and phone numbers are tracked in the activity log:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/activity_log_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="activity_log" border="0" alt="activity_log" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/activity_log_thumb.png" width="684" height="306" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Link Solutions to Closed Cases&lt;/h2&gt;  &lt;p&gt;A common workflow we see here is:&lt;/p&gt;  &lt;p&gt;1. A case is opened for a customer    &lt;br /&gt;2. We work with the customer to figure out a resolution to the issue     &lt;br /&gt;3. Customer uses &lt;a href="http://support.dovetailsoftware.com/selfservice/login"&gt;SelfService&lt;/a&gt; to indicate that the resolution solved the issue, and the customer closes the case (and you know how much &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2008/01/07/my-favorite-business-rule"&gt;I love when a customer closes their own case&lt;/a&gt;)&lt;/p&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;p&gt;Now that we know that the resolution we provided did indeed solve the problem, we can create a solution, so this knowledge can be reused, should the same issue arise in the future.&lt;/p&gt;  &lt;p&gt;4. Create a new solution&lt;/p&gt;  &lt;p&gt;So we’ve created a solution, but we can’t link the solution to the case because the case is closed.&lt;/p&gt;  &lt;p&gt;So, we:&lt;/p&gt;  &lt;p&gt;5. Reopen the case    &lt;br /&gt;6. Link the case to the solution     &lt;br /&gt;7. Close the case again&lt;/p&gt;  &lt;p&gt;In general, once a case is closed, there shouldn’t be any more changes made to it.&lt;/p&gt;  &lt;p&gt;But, it seems kind of silly to have to reopen a case, just to link it, so then you can just close it again.&lt;/p&gt;  &lt;p&gt;Now you can link a solution to a closed case.&lt;/p&gt;  &lt;p&gt;The solution form looks the same – the &lt;strong&gt;Link this Solution to a Case&lt;/strong&gt; button is still there:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution4_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="solution4" border="0" alt="solution4" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution4_thumb.png" width="497" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;which opens a lightbox with the list of your open cases.&lt;/p&gt;  &lt;p&gt;We’ve added a new checkbox, which allows you to &lt;strong&gt;include my recently closed cases&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution_link_cases_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="solution_link_cases" border="0" alt="solution_link_cases" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution_link_cases_thumb.png" width="497" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;clicking that checkbox now includes your recently closed (but not yet linked) cases:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution_link_closed_cases_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="solution_link_closed_cases" border="0" alt="solution_link_closed_cases" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/solution_link_closed_cases_thumb.png" width="497" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;and there’s an icon there as well that indicates that it’s a closed case:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/closed_cases_icon_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="closed_cases_icon" border="0" alt="closed_cases_icon" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/closed_cases_icon_thumb.png" width="277" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So now you can link a solution to one (or more) of your closed cases.&lt;/p&gt;  &lt;h2&gt;64-bit Support&lt;/h2&gt;  &lt;p&gt;Dovetail Agent can now be run in 64-bit mode.&lt;/p&gt;  &lt;p&gt;Note that this requires the 64-bit version of &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20SDK"&gt;Dovetail SDK&lt;/a&gt; (version 3.0 or higher).&lt;/p&gt;  &lt;p&gt;For more info, refer to a previous post: &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/06/17/sdk-based-web-apps-in-a-64-bit-environment"&gt;SDK based web apps in a 64-bit environment&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;A Better Attachment Upload Component&lt;/h2&gt;  &lt;p&gt;We’ve updated the component that we use for uploading of file attachments. It supports both 32 and 64 bit systems. This is also a more actively developed component, and it includes better memory management than the previous component. &lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;OK, so that’s a wrap on the Dovetail Agent 4.5 changes that I wanted to cover. There’s also a bunch of minor changes and bug fixes that have been completed, but nothing exciting enough that I want to cover here.&amp;#160; More details are in the &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Agent"&gt;Dovetail Agent documentation&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;If you need more info, or would like a demonstration of any of these features (or heck, of any of out stuff), feel free to &lt;a href="http://www.dovetailsoftware.com/users/gsherman"&gt;contact me&lt;/a&gt;. &lt;/p&gt; &lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=-_U3UuhUITc:u1KHMrst_Ro:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=-_U3UuhUITc:u1KHMrst_Ro:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/-_U3UuhUITc" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-3#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-agent-2">Dovetail Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/product-releases">product releases</category>
 <pubDate>Thu, 12 Jan 2012 20:06:08 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1745 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-3</feedburner:origLink></item>
<item>
 <title>What’s New in Dovetail Agent 4.5 : Part 2 : Search and Query</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/QpEG9tIDxIk/what%E2%80%99s-new-in-dovetail-agent-45-part-2-search-and-query</link>
 <description>&lt;h1&gt;&lt;/h1&gt;  &lt;p&gt;We’re continuing on with what’s New in Dovetail Agent 4.5. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-1-console"&gt;Part 1 is available here&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Simplified Search Tips&lt;/h2&gt;  &lt;p&gt;We’ve simplified the Search Tips page, making it easier for users to understand all of the robust searching capabilities that are available.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_tips_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="search_tips" border="0" alt="search_tips" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_tips_thumb.png" width="681" height="441" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_tips2_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="search_tips2" border="0" alt="search_tips2" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_tips2_thumb.png" width="689" height="435" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Simplified Date Searching&lt;/h2&gt;  &lt;p&gt;We’ve simplified searching using a date/time property.&lt;/p&gt;  &lt;p&gt;The baseline date/time range search can be a little cumbersome. &lt;/p&gt;  &lt;p&gt;For example, to search for items created in December of 2011: &lt;strong&gt;created:[20110101 TO 20111231]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;That syntax is still available for use, but we’ve expanded data/time searching for some common scenarios.&lt;/p&gt;  &lt;p&gt;Search for items created today: &lt;strong&gt;created:today&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Search for items created in the last 30 days: &lt;strong&gt;created:30days&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;And that number (30) can be any number: &lt;strong&gt;created:7days&lt;/strong&gt;, &lt;strong&gt;created:365days&lt;/strong&gt;, etc.&lt;/p&gt;  &lt;p&gt;And, of course, you can combine this with other properties and keywords, and even save it as a favorite.&lt;/p&gt;  &lt;p&gt;Here’s my search for &lt;strong&gt;all Franchise Support cases created in the last 30 days&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="search" border="0" alt="search" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/search_thumb.png" width="698" height="409" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Distinct Queries&lt;/h2&gt;  &lt;p&gt;We’ve added the ability for Distinct Queries in the Query module.&lt;/p&gt;  &lt;p&gt;This is probably best explained with an example.&lt;/p&gt;  &lt;p&gt;Lets say I want to show &lt;strong&gt;all of the cases touched today by a particular user&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Without a distinct query, it’s possible that I would see the same case in the report multiple time. For example, if the same user logged multiple notes to the same case on the same day. Or if they did multiple workflow operations, which is also common. &lt;/p&gt;  &lt;p&gt;This could result in a query output such as this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/touched_today_not_distinct_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="touched_today_not_distinct" border="0" alt="touched_today_not_distinct" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/touched_today_not_distinct_thumb.png" width="701" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice that in the above query results, the same case is repeated. &lt;/p&gt;  &lt;p&gt;Annie really didn’t touch 7 cases. She really only touched 3 distinct cases.&lt;/p&gt;  &lt;p&gt;By making the query distinct, we get the desired results:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/touched_today_distinct_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="touched_today_distinct" border="0" alt="touched_today_distinct" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/touched_today_distinct_thumb.png" width="698" height="452" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And the way we make a query distinct is by checking the Only show distinct rows checkbox when creating/editing the query:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/query_edit_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="query_edit" border="0" alt="query_edit" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/query_edit_thumb.png" width="513" height="537" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;That highlights some of the search and query improvements.&amp;#160; There’s still a few more improvements and features I want to highlight, so Part 3 will be coming soon. &lt;/p&gt;   &lt;script type="text/javascript" src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=QpEG9tIDxIk:tBfN8sWRK0A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=QpEG9tIDxIk:tBfN8sWRK0A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/QpEG9tIDxIk" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-2-search-and-query#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-agent-2">Dovetail Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/product-releases">product releases</category>
 <category domain="http://www.dovetailsoftware.com/tags/search-3">search</category>
 <pubDate>Thu, 12 Jan 2012 18:29:54 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1744 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-2-search-and-query</feedburner:origLink></item>
<item>
 <title>What’s New in Dovetail Agent 4.5 : Part 1 : Console</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/uvEbqYhSi-8/what%E2%80%99s-new-in-dovetail-agent-45-part-1-console</link>
 <description>&lt;p&gt;Dovetail Agent 4.5 was recently released, so I figured it was a good time to highlight a few of the things that are new in this release.&lt;/p&gt;  &lt;p&gt;BTW – did you know you can subscribe to our &lt;a href="http://support.dovetailsoftware.com/selfservice/products/release-feed"&gt;Dovetail product release RSS feed&lt;/a&gt; – so you’ll always know about new releases?&lt;/p&gt;  &lt;h1&gt;Console Improvements&lt;/h1&gt;  &lt;p&gt;We’ve improved the user interaction quite a bit in the main console pages.&lt;/p&gt;  &lt;h2&gt;Right-click operations replaced by Actions button.&lt;/h2&gt;  &lt;p&gt;Previously, you could right-click on an item in the console to perform workflow and log operations. This is how it used to look:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/right-click_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="right-click" border="0" alt="right-click" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/right-click_thumb.png" width="367" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Right-clicking in web-apps is not really expected. So we’ve replaced it with a more common and expected Actions button located at the top of the page.&lt;/p&gt;  &lt;p&gt;If there’s only one item selected, the menu will show all of the actions available for that item type:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/actions_case_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="actions_case" border="0" alt="actions_case" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/actions_case_thumb.png" width="209" height="319" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If there are multiple items selected. the menu will show common items that can be applied across those items in a “batch” operation:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/actons_button_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="actons_button" border="0" alt="actons_button" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/actons_button_thumb.png" width="349" height="330" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;h2&gt;Row Coloring, Clicking&lt;/h2&gt;  &lt;p&gt;In previous versions, a row would be color highlighted when the mouse was hovered over it. This caused confusion, especially when multiple items were selected.&lt;/p&gt;  &lt;p&gt;In addition, we used to click a row (and color it) when an item was opened, or when it was clicked in any of its cells. &lt;/p&gt;  &lt;p&gt;To open it, you had to click the ID number cell, or double-click elsewhere on the row.&lt;/p&gt;  &lt;p&gt;All of this led to a lot of confusion, so we’ve simplified this.&lt;/p&gt;  &lt;p&gt;A row will only be colored if it’s row’s checkbox been explicitly checked. A single-click anywhere else on the row will open the item. Much simpler. &lt;/p&gt;  &lt;p&gt;To be honest, we borrowed a lot of this from Google’s Gmail interface, as we’re frequent users of that product, and like how that interaction works. &lt;/p&gt;  &lt;h2&gt;Drag Handle&lt;/h2&gt;  &lt;p&gt;You can still drag and drop items around (such as dragging a case into a WIPbin to move it, or dragging it into a queue to dispatch it), and we’ve made the drag handle (where you put your mouse to “grab” the item and start dragging from) clearer. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/drag_handle_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="drag_handle" border="0" alt="drag_handle" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/drag_handle_thumb.png" width="319" height="222" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Item Counts, Show More, Show All&lt;/h2&gt;  &lt;p&gt;Whenever a user has a WIPbin or Queue selected, the console will show the total number of items, and allow you to click to Show More or Show All:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/console_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="console" border="0" alt="console" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/console_thumb.png" width="927" height="447" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h2&gt;Profile / Settings&lt;/h2&gt;  &lt;p&gt;Previously, opening the user’s Profile page posted a small tabbed form in a new window.&lt;/p&gt;  &lt;p&gt;Now, the user settings are shown on the same console page.&lt;/p&gt;  &lt;p&gt;We’ve also simplified many of the elements on this settings page to make it easier to use.&lt;/p&gt;  &lt;p&gt;We’ve also added a Settings icon at the top of the page to make it easy to get to, and make it more consistent with other common web apps. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/settings_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="settings" border="0" alt="settings" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/settings_thumb.png" width="916" height="423" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;User Configurable Console Columns&lt;/h2&gt;  &lt;p&gt;We’ve given the ability for users to configure the columns that show up in the console (for WIPBINs and queues).&lt;/p&gt;  &lt;p&gt;Users can reorder columns, hide columns, and change the column headings. These are individual user settings, so each user can tailor this to their own liking.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/console_columns_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="console_columns" border="0" alt="console_columns" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/console_columns_thumb.png" width="732" height="532" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Customizing the Console&lt;/h2&gt;  &lt;p&gt;From an administrative / development standpoint, we’ve simplified the task of customizing the console columns. &lt;/p&gt;  &lt;p&gt;The default objects are case, subcase, solution, bugs, action items, and part requests. If other objects are added to the console pages, then columns from those objects can be added as well.&lt;/p&gt;  &lt;p&gt;As a quick example, to add the item’s type (case type, bug type, etc.), I just need to modify one line of code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;addColumn(&amp;quot;type&amp;quot;, &amp;quot;Type&amp;quot;, true, &amp;quot;Item's type (case type, bug type, etc.)&amp;quot;);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Then that column will show up as an available column in the user’s settings and on the console:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/case_type_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="case_type" border="0" alt="case_type" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/case_type_thumb_1.png" width="738" height="99" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice that if a particular object doesn’t have that column available in the schema, it will just show as blank (as we see here for the Solution’s Type).&lt;/p&gt;  &lt;p&gt;More details on this are available in the &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Agent"&gt;Dovetail Agent Documentation&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/query_edit_4.png"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;OK, so that highlights some of the improvements made around the console. This post is starting to get a bit long, so I’ll highlight other new features in subsequent posts. &lt;/p&gt; &lt;script type="text/javascript" src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=uvEbqYhSi-8:QwjNNjOYgG0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=uvEbqYhSi-8:QwjNNjOYgG0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/uvEbqYhSi-8" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-1-console#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-agent-2">Dovetail Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/product-releases">product releases</category>
 <pubDate>Thu, 12 Jan 2012 17:54:27 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1743 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/12/what%E2%80%99s-new-in-dovetail-agent-45-part-1-console</feedburner:origLink></item>
<item>
 <title>Automated Deployment for Clarify Example</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/m9Xj4P23IQg/automated-deployment-for-clarify-example</link>
 <description>&lt;p&gt;Last year I posted about &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/03/07/automated-deployments-for-clarify"&gt;automated deployments for Clarify&lt;/a&gt;. From that post:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Doing automatic deployments of Clarify changes is pretty straightforward. If I was starting off, I would use a contemporary build script tool such as nant or rake, and simply have it call out to your schema editing tool (Dovetail SchemaEditor, or ddcomp) to perform schema changes, use an import tool (such as Dovetail ArchiveManager, or dataex) for importing forms, and then compile your Clearbasic code using CBEX, or just import it as a DAT file using Dovetail ArchiveManager. File copying, registering components, configuring web servers, and setting permissions are all common tasks that are available in these build tools as well.&lt;/p&gt;    &lt;p&gt;Should you also need to do additional stuff in your database, some code that uses the Dovetail SDK can be useful.&lt;/p&gt;    &lt;p&gt;You could tie this in with a CI server if you wish, so when new code is checked in, the CI server could automatically push it to a test database.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Recently, I got a &lt;em&gt;Please Send Me The Codez&lt;/em&gt; email, so I’ve shared an example of doing this.&lt;/p&gt;  &lt;h2&gt;Code&lt;/h2&gt;  &lt;p&gt;The code is freely available on GitHub: &lt;a href="https://github.com/gsherman/Clarify-Deployment"&gt;https://github.com/gsherman/Clarify-Deployment&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Tools&lt;/h2&gt;  &lt;p&gt;In this example, I’m using the following tools:&lt;/p&gt;  &lt;table class="datatable"&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;td valign="top" width="232"&gt;Tool&lt;/td&gt;        &lt;td valign="top" width="286"&gt;Description&lt;/td&gt;        &lt;td valign="top" width="186"&gt;Alternatives&lt;/td&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="232"&gt;&lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="286"&gt;Free Build Tool for .NET. Overall automation scripting tool&lt;/td&gt;        &lt;td valign="top" width="186"&gt;&lt;a href="http://rake.rubyforge.org/"&gt;rake&lt;/a&gt;, &lt;a href="https://github.com/JamesKovacs/psake"&gt;psake&lt;/a&gt;, &lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/SchemaEditor"&gt;Dovetail SchemaEditor&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="286"&gt;Extends the Clarify Schema&lt;/td&gt;        &lt;td valign="top" width="186"&gt;ddcomp, SchemaManager&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;Clarify CBEX Toolkit&lt;/td&gt;        &lt;td valign="top" width="286"&gt;ClearBasic Code “Compiler”&lt;/td&gt;        &lt;td valign="top" width="186"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/ArchiveManager"&gt;Dovetail Archive Manager&lt;/a&gt; (DIET)&lt;/td&gt;        &lt;td valign="top" width="286"&gt;DAT file importer&lt;/td&gt;        &lt;td valign="top" width="186"&gt;dataex&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;&lt;a href="http://en.wikipedia.org/wiki/Windows_PowerShell"&gt;Powershell&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="286"&gt;Shell and scripting language for .NET&lt;/td&gt;        &lt;td valign="top" width="186"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20SDK"&gt;Dovetail SDK&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="286"&gt;APIs for Clarify&lt;/td&gt;        &lt;td valign="top" width="186"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;You’ll notice I didn’t upload all of my tools under &lt;a href="https://github.com/gsherman/Clarify-Deployment/tree/master/tools"&gt;the tools directory&lt;/a&gt; into GitHub. This is intentional.&amp;#160; NAnt is free, so you can download this yourself. If you want to use the Dovetail tools, you’ll need to have a license to use them. CBEX is from Clarify/Amdocs. &lt;/p&gt;  &lt;p&gt;Notice that I’ve also provided alternative tools to use, should you so desire.&lt;/p&gt;  &lt;h2&gt;NAnt Script&lt;/h2&gt;  &lt;p&gt;Everything starts with the NAnt script: &lt;em&gt;dev.query.build&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The NAnt script contains targets (sort of like functions). I’m using two main targets:&lt;/p&gt;  &lt;table class="datatable"&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;td valign="top" width="300"&gt;Target&lt;/td&gt;        &lt;td valign="top" width="300"&gt;Description&lt;/td&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="300"&gt;reset-dev-database&lt;/td&gt;        &lt;td valign="top" width="300"&gt;Reset my local development database&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;setup-dev&lt;/td&gt;        &lt;td valign="top" width="300"&gt;Does all the real work&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h2&gt;Setup-Dev Target&lt;/h2&gt;  &lt;p&gt;The setup-dev target basically calls the following other targets:&lt;/p&gt;  &lt;table class="datatable"&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;td valign="top" width="203"&gt;Target&lt;/td&gt;        &lt;td valign="top" width="267"&gt;Description&lt;/td&gt;        &lt;td valign="top" width="375"&gt;Tools Used&lt;/td&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="203"&gt;dev-properties&lt;/td&gt;        &lt;td valign="top" width="267"&gt;defines the properties for my development environment&lt;/td&gt;        &lt;td valign="top" width="375"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;apply-schema-scripts&lt;/td&gt;        &lt;td valign="top" width="267"&gt;apply all of the schema files in the /schema directory&lt;/td&gt;        &lt;td valign="top" width="375"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/SchemaEditor"&gt;Dovetail SchemaEditor&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;setup-database-stored-procs&lt;/td&gt;        &lt;td valign="top" width="267"&gt;apply the stored procedures necessary for Dovetail SDK&lt;/td&gt;        &lt;td valign="top" width="375"&gt;sqlcmd.exe (Microsoft SQL Server Command Line Tool)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;add-licenses&lt;/td&gt;        &lt;td valign="top" width="267"&gt;add Dovetail licenses to the database&lt;/td&gt;        &lt;td valign="top" width="375"&gt;NAnt built-in SQL task&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;import-dat-files &lt;/td&gt;        &lt;td valign="top" width="267"&gt;import all of the DAT files in the /files directory&lt;/td&gt;        &lt;td valign="top" width="375"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/ArchiveManager"&gt;Dovetail Archive Manager&lt;/a&gt; (DIET)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;import-forms&lt;/td&gt;        &lt;td valign="top" width="267"&gt;import all of the forms (DAT files) in the /files directory&lt;/td&gt;        &lt;td valign="top" width="375"&gt;&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/ArchiveManager"&gt;Dovetail Archive Manager&lt;/a&gt; (DIET)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;setup-resource-config &lt;/td&gt;        &lt;td valign="top" width="267"&gt;add the forms to the proper resource configuration.         &lt;br /&gt;          &lt;br /&gt;add the current user into the proper resource configuration.&lt;/td&gt;        &lt;td valign="top" width="375"&gt;PowerShell and Dovetail SDK&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;compile-clearbasic-code&lt;/td&gt;        &lt;td valign="top" width="267"&gt;compile all of the ClearBasic code&lt;/td&gt;        &lt;td valign="top" width="375"&gt;Clarify CBEX Toolkit&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="203"&gt;clear-clarify-cache&lt;/td&gt;        &lt;td valign="top" width="287"&gt;clear my Clarify cache files&lt;/td&gt;        &lt;td valign="top" width="375"&gt;NAnt built-in delete file task&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;Execute the Script&lt;/h3&gt;  &lt;p&gt;To execute it, I simply type nant plus the target that I want to execute from a command line.&lt;/p&gt;  &lt;p&gt;For example, to reset my database back to a good state (useful in development):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;DOS&amp;gt; nant reset-dev-database&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is useful because I can screw stuff up as often as I want in development, and simply revert my database easily and quickly to put me back to a known good state. Then continue on developing and testing. &lt;/p&gt;  &lt;p&gt;I then use the setup-dev task which does everything (schema, database setup, dat files, forms, resource config setup, CB code, etc.):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;DOS&amp;gt; nant setup-dev&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If needed, I can run just one target by itself, such as :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;DOS&amp;gt; nant apply-schema-scripts&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;What about deploying to QA or Production?&lt;/h2&gt;  &lt;p&gt;You could add a qa-properties or prod-properties target, which define the properties for those environments.&lt;/p&gt;  &lt;p&gt;Then, add a target such as deploy-to-qa or deploy-to-prod, such as :&lt;/p&gt;  &lt;p&gt;&amp;lt;target name=&amp;quot;deploy-to-qa&amp;quot; description=&amp;quot;Deploy to QA&amp;quot; depends=&amp;quot;qa-properties apply-schema-scripts setup-database-stored-procs add-licenses import-dat-files import-forms setup-resource-config compile-clearbasic-code clear-clarify-cache&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;h2&gt;Giddy-Up&lt;/h2&gt;  &lt;p&gt;Obviously, what I’ve done and how I’ve done it may not exactly fit into your environment or toolset. That’s OK. I think it’s the concept here that’s more important than the specific example.&lt;/p&gt;  &lt;p&gt;Fortunately, the build tools, CI servers, and scripting environments are widely used. This means that there are tons of examples and tutorials available online to help you accomplish your tasks.&lt;/p&gt;  &lt;p&gt;I think you’ll find that once you start using automated scripts, you’ll never want to manually repeat steps again.&lt;/p&gt;  &lt;p&gt;Hope you find this helpful.&lt;/p&gt;  &lt;p&gt;Rock on.&lt;/p&gt; &lt;script type="text/javascript" src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=m9Xj4P23IQg:3aqXcOnwASA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=m9Xj4P23IQg:3aqXcOnwASA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/m9Xj4P23IQg" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/11/automated-deployment-for-clarify-example#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/archivemanager">ArchiveManager</category>
 <category domain="http://www.dovetailsoftware.com/tags/automation-0">automation</category>
 <category domain="http://www.dovetailsoftware.com/tags/clearbasic-2">clearbasic</category>
 <category domain="http://www.dovetailsoftware.com/tags/diet">diet</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-sdk-0">Dovetail SDK</category>
 <category domain="http://www.dovetailsoftware.com/tags/nant-0">nant</category>
 <category domain="http://www.dovetailsoftware.com/tags/powershell">PowerShell</category>
 <category domain="http://www.dovetailsoftware.com/tags/schema">schema</category>
 <category domain="http://www.dovetailsoftware.com/tags/schemaeditor-0">schemaeditor</category>
 <category domain="http://www.dovetailsoftware.com/tags/schemascript">schemascript</category>
 <pubDate>Wed, 11 Jan 2012 21:28:52 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1742 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/01/11/automated-deployment-for-clarify-example</feedburner:origLink></item>
<item>
 <title>Notifying the Yankee (part 2) This time with the Clarify Client</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/WG1rAlXi000/notifying-the-yankee-part-2-this-time-with-the-clarify-client</link>
 <description>&lt;p&gt;Recently I &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/10/31/notifying-the-yankee"&gt;posted about how to notify the yankee&lt;/a&gt;, meaning the person who a case was yanked from.&lt;/p&gt;  &lt;p&gt;I showed how to make this happen within applications that use the &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20SDK"&gt;Dovetail SDK&lt;/a&gt; (&lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Agent"&gt;Dovetail Agent&lt;/a&gt;, &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile&lt;/a&gt;, etc.)&lt;/p&gt;  &lt;p&gt;Now, lets see how we can accomplish the same task within the Clarify Classic Client.&lt;/p&gt;  &lt;h2&gt;Setup&lt;/h2&gt;  &lt;p&gt;Most of the setup is the same as I covered previously.&lt;/p&gt;  &lt;p&gt;1. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/10/18/transform-a-pseudo-relation-into-an-exclusive-relation"&gt;Turn the participant2user pseudo-relation into an exclusive relation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/10/31/notifying-the-yankee"&gt;Setup a business rule recipient alias for the “Yanked From User”&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/10/31/notifying-the-yankee"&gt;Create a business rule that uses the “Yanked from User” as a recipient of a rule&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4. Add the participant record&lt;/p&gt;  &lt;h2&gt;Add a Participant using ClearBasic&lt;/h2&gt;  &lt;p&gt;To add a participant record, we can add some ClearBasic code behind form 737, which is the Yank form.&lt;/p&gt;  &lt;p&gt;Caution: this is an old-school C form, so much of the prescribed way of using CB code on this form doesn’t work. Especially around the Form_Save routines. &lt;/p&gt;  &lt;p&gt;Here’s what I came up with:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;OPTION&lt;/span&gt; EXPLICIT&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; actEntryObjid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Function&lt;/span&gt; GetCurrentOwnerObjid() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; previousOwnerObjid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; lor &lt;span class="kwrd"&gt;As&lt;/span&gt; List&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; rec &lt;span class="kwrd"&gt;As&lt;/span&gt; Record&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; br &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; BulkRetrieve&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; objectType &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ownerRelation &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt; GetCurrentOwnerObjid = 0&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; YANK_OBJ_TYPE.Text&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Case&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;   objectType = &lt;span class="str"&gt;&amp;quot;case&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   ownerRelation = &lt;span class="str"&gt;&amp;quot;case_owner2user&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Subcase&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   objectType = &lt;span class="str"&gt;&amp;quot;subcase&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;   ownerRelation = &lt;span class="str"&gt;&amp;quot;subc_owner2user&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;  &lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; Len(objectType) &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;   br.SimpleQuery 0, objectType&lt;/pre&gt;

  &lt;pre class="alt"&gt;   br.AppendFilter 0, &lt;span class="str"&gt;&amp;quot;id_number&amp;quot;&lt;/span&gt;, cbEqual, EDT_5.Text&lt;/pre&gt;

  &lt;pre&gt;   br.TraverseFromParent 1, ownerRelation, 0&lt;/pre&gt;

  &lt;pre class="alt"&gt;   br.RetrieveRecords&lt;/pre&gt;

  &lt;pre&gt;   &lt;span class="kwrd"&gt;Set&lt;/span&gt; lor = br.GetRecordList(1)&lt;/pre&gt;

  &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;If&lt;/span&gt; lor.Count &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="kwrd"&gt;Set&lt;/span&gt; rec = lor.ItemByIndex(0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;     previousOwnerObjid = rec.GetField(&lt;span class="str"&gt;&amp;quot;objid&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;   &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt; GetCurrentOwnerObjid =  previousOwnerObjid&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Load()&lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DoDefault&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Save2(bs &lt;span class="kwrd"&gt;As&lt;/span&gt; BulkSave)&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; recActEntry &lt;span class="kwrd"&gt;As&lt;/span&gt; Record&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; bs.CountByType(&lt;span class="str"&gt;&amp;quot;act_entry&amp;quot;&lt;/span&gt;) &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; recActEntry = bs.GetRecordByIndex(0,&lt;span class="str"&gt;&amp;quot;act_entry&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;    actEntryObjid = recActEntry.GetField(&lt;span class="str"&gt;&amp;quot;objid&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; SaveParticipant(previousOwnerObjid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; recP &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Record&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; bs &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; BulkSave&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; actEntryObjid &amp;gt; 0 &lt;span class="kwrd"&gt;And&lt;/span&gt; previousOwnerObjid &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    recP.RecordType = &lt;span class="str"&gt;&amp;quot;participant&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    recP.SetField &lt;span class="str"&gt;&amp;quot;role_code&amp;quot;&lt;/span&gt;, 1&lt;/pre&gt;

  &lt;pre class="alt"&gt;    bs.InsertRecord recP&lt;/pre&gt;

  &lt;pre&gt;    bs.RelateRecordsToID recP, &lt;span class="str"&gt;&amp;quot;act_entry&amp;quot;&lt;/span&gt;, actEntryObjid, &lt;span class="str"&gt;&amp;quot;participant2act_entry&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    bs.RelateRecordsToID recP, &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, previousOwnerObjid, &lt;span class="str"&gt;&amp;quot;participant2user&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;    bs.Save&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; YANK_BTN_Click()&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; previousOwnerObjid &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt; previousOwnerObjid = GetCurrentOwnerObjid()&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DoDefault&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt; SaveParticipant previousOwnerObjid&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;



&lt;p&gt;Normally, I would add the participant record within Form_Save1 or Form_Save2, but this didn’t work. It exhibited some really strange behavior and threw some gawd-awful OST subsystem errors. So, I punted, and just added it after the default behavior happened on the Yank button. &lt;/p&gt;

&lt;p&gt;Also notice that I only added support for cases and subcases. If you want to support other object types, add them to the &lt;em&gt;Select Case&lt;/em&gt; portion of the &lt;em&gt;GetCurrentOwnerObjid&lt;/em&gt; function.&lt;/p&gt;



&lt;h2&gt;Lets give it a whirl&lt;/h2&gt;

&lt;p&gt;From the Clarify Classic Client, Yank a case:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/yank_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="yank" border="0" alt="yank" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/yank_thumb.png" width="194" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;and then we should see an email notification come through:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/email_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="email" border="0" alt="email" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/email_thumb_1.png" width="612" height="324" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;and we should see the Yank activity and the Business Rule action in the case activity log:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/act_log_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="act_log" border="0" alt="act_log" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/act_log_thumb_1.png" width="696" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;



&lt;h3&gt;Success!&lt;/h3&gt;

&lt;p&gt;You may now continue yanking away (does that sound slightly naughty?). And the person you yanked from will be notified appropriately. &lt;/p&gt;

&lt;p&gt;Hope you find this useful.&lt;/p&gt;

&lt;p&gt;And that wraps up my blog posting for 2011. See you in 2012.&lt;/p&gt;
&lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;Rock on.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=WG1rAlXi000:yTQoacHPHwU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=WG1rAlXi000:yTQoacHPHwU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/WG1rAlXi000" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/21/notifying-the-yankee-part-2-this-time-with-the-clarify-client#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/business-rules-0">business  rules</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</category>
 <category domain="http://www.dovetailsoftware.com/tags/rulemanager-2">rulemanager</category>
 <pubDate>Wed, 21 Dec 2011 22:56:26 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1739 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/21/notifying-the-yankee-part-2-this-time-with-the-clarify-client</feedburner:origLink></item>
<item>
 <title>Better message notifications in the Clarify Client</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/UI-Esywf3fk/better-message-notifications-in-the-clarify-client</link>
 <description>&lt;p&gt;One of the common ways to do a message / notification to&amp;#160; user from a from within the Clarify Classic Client is with a simple popup message box.&lt;/p&gt;  &lt;p&gt;For example, if the user does a save operation on a form, and the save is successful, then it’s not uncommon to see a simple message box posted.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub btn_message_click()      &lt;br /&gt;&amp;#160; App.MsgBox &amp;quot;Something Interesting Just Happened&amp;quot;       &lt;br /&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/message_box_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="message_box" border="0" alt="message_box" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/message_box_thumb.png" width="303" height="182" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;These messages are purely informational. We’re not requiring the user to make a decision – we just want to tell them something.&lt;/p&gt;  &lt;p&gt;The problem is that these message boxes interrupt the user’s flow. &lt;/p&gt;  &lt;h2&gt;Don’t interrupt my flow, man&lt;/h2&gt;  &lt;p&gt;Alan Cooper, in his book &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0764526413/codihorr-20"&gt;About Face 2.0&lt;/a&gt;, calls this &lt;b&gt;stopping the proceedings with idiocy&lt;/b&gt;. And that's exactly what it is.&lt;/p&gt;  &lt;blockquote&gt;There is a particular form of excise that is so prevalent it deserves special attention. In Chapter 9, we introduced the concept of flow, where the user enters a highly productive mental state by working in harmony with his tools. Flow is a natural state, and people will enter it without much prodding. It takes some effort to break into flow after someone has achieved it. Interruptions like a ringing telephone will do it, as will an error message box. Most interruptions are avoidable; a few aren't. &lt;b&gt;But interrupting a user's flow for no good reason is &lt;i&gt;stopping the proceedings with idiocy&lt;/i&gt; and is one of the most disruptive forms of excise.&lt;/b&gt;&lt;/blockquote&gt;  &lt;p&gt;Jeff Atwood expands on this:&amp;#160; &lt;a href="http://www.codinghorror.com/blog/2006/09/unnecessary-dialogs-stopping-the-proceedings-with-idiocy.html"&gt;Unnecessary Dialogs: Stopping the Proceedings with Idiocy&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;It’s better on the web&lt;/h2&gt;  &lt;p&gt;On most good web sites, we don’t get these kind of popup messages – instead we’ll see a message as part of the page that gives the information, but doesn’t interrupt flow.&lt;/p&gt;  &lt;p&gt;An example from Gmail, when an email is deleted:&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/gmail_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="gmail" border="0" alt="gmail" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/gmail_thumb.png" width="1028" height="100" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;h2&gt;Improved Clarify messages&lt;/h2&gt;  &lt;p&gt;So lets look at accomplishing a similar type of non-invasive informational message within the Clarify Classic Client.&lt;/p&gt;  &lt;p&gt;Here’s what it looks like.&lt;/p&gt;  &lt;p&gt;I start with a simple form:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/test_form_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="test_form" border="0" alt="test_form" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/test_form_thumb.png" width="337" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When I click the “Show a Message” button, the form shows an information message, on the form, without interrupting the user’s flow:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/clarify_message_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clarify_message" border="0" alt="clarify_message" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/clarify_message_thumb.png" width="337" height="225" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Implementation&lt;/h2&gt;  &lt;p&gt;This is actually pretty simple to do.&lt;/p&gt;  &lt;p&gt;1. Add a new label to the form. &lt;/p&gt;  &lt;p&gt;I’ve set its BackColor so that it stands out appropriately. I’ve also set the Visible property to false so that the label is initially invisible. &lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/uie_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="uie" border="0" alt="uie" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/uie_thumb.png" width="623" height="288" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. Add a little bit of ClearBasic code to set the message string, and make the label visible.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub btn_go_Click()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ShowMessage &amp;quot;Something Interesting Just Happened&amp;quot;       &lt;br /&gt;End Sub&lt;/p&gt;    &lt;p&gt;Sub ShowMessage (messageString As String)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.caption = Space$(5) &amp;amp; messageString       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.Visible=True       &lt;br /&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Upon clicking the button, my message shows:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/clarify_message_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clarify_message" border="0" alt="clarify_message" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/clarify_message_thumb.png" width="337" height="225" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In a web app, it’s easy to make that message go away after a few seconds. We can use a little &lt;a href="http://api.jquery.com/hide/"&gt;jQuery to hide an element&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;$(&amp;quot;#message&amp;quot;).hide();&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And we can even use &lt;a href="http://api.jquery.com/fadeOut/"&gt;jQuery to fade it out&lt;/a&gt;, which is pretty sexy:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;code&gt;$(&amp;quot;#message&amp;quot;).fadeOut(&amp;quot;slow&amp;quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;In Clarify, we can hide the message after a few seconds:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Sub ShowMessage (messageString As String) 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.caption = Space$(5) &amp;amp; messageString 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.Visible=True 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Sleep(3000)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call HideMessage&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;End Sub &lt;/p&gt;

  &lt;p&gt;Sub HideMessage() &lt;/p&gt;

  &lt;p&gt;On Error Resume Next 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lbl_message.caption = &amp;quot;&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lbl_message.Visible=False 

    &lt;br /&gt;End Sub&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice that in the ShowMessage subroutine, I sleep for 3 seconds, and then hide the message by making it invisible.&lt;/p&gt;

&lt;h2&gt;What about a sexy fadeout?&amp;#160; &lt;/h2&gt;

&lt;p&gt;Sorry – I haven’t solved that task yet. Maybe a task for another day.&lt;/p&gt;

&lt;h2&gt;Won’t the Sleep command block the user from doing other operations?&lt;/h2&gt;

&lt;p&gt;I thought that myself. But as it turns out, no. It doesn’t block. While that Sleep statement is happening, it blocks the current (ShowMessage) subroutine, but not other code.&lt;/p&gt;

&lt;p&gt;So the user is free to do other things. Sweet!&lt;/p&gt;

&lt;p&gt;But (there’s always a but) – if you open a modal dialog while that sleep is occurring (including a MessageBox), that will block other code from executing. When the modal dialog is dismissed, the other code can resume. &lt;/p&gt;

&lt;p&gt;If your modal dialog has been opened for more than the Sleep time, then the next statement after the sleep will be immediately executed. &lt;/p&gt;

&lt;p&gt;In my scenario, I can click the “Show a Message” button, which will show the message on the form. I then immediately click the “Show Message Box”, which opens a message box (App.MsgBox). While that MessageBox is posted, the message remains on the form. If I wait more than 3 seconds to close the MessageBox, then the message is hidden as soon as I dismiss the MessageBox. &lt;/p&gt;

&lt;p&gt;Pretty nice!&lt;/p&gt;

&lt;h2&gt;What’s with the On Error Resume Next?&lt;/h2&gt;

&lt;p&gt;Notice that in the HideMessage subroutine, I’m doing an On Error Resume Next. This says, any messages that happen in this subroutine, just ignore. &lt;/p&gt;

&lt;p&gt;The reason I’m doing this is to handle the following scenario:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Display a message by calling ShowMessage &lt;/li&gt;

  &lt;li&gt;Close the form before the Sleep time expires (within 3 seconds), while the message is still visible. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What will happen is that when the Sleep timer expires, the next line of code will be executed: &lt;em&gt;lbl_message.caption = &amp;quot;&amp;quot;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because the form is already closed, Clarify can’t find that label, so you get this lovely error message:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/already_closed_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="already_closed" border="0" alt="already_closed" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/already_closed_thumb.png" width="472" height="165" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;The given form for this operation is invalid (possibly already closed). &lt;/p&gt;

&lt;p&gt;So, in order to workaround this, I’m just ignoring any error that results from hiding the message.&lt;/p&gt;



&lt;h2&gt;Niceties&lt;/h2&gt;

&lt;p&gt;We could sexy this up a bit by changing the background color of that message dynamically.&lt;/p&gt;

&lt;p&gt;For example, if I want an informational message to be displayed in Yellow, but an error to be displayed in Red, then I could do that.&lt;/p&gt;

&lt;p&gt;So an error message might look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/error_happened_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="error_happened" border="0" alt="error_happened" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/error_happened_thumb.png" width="366" height="228" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;To do this, we’ll create a new color scheme, and set the colors appropriately. Then we’ll call either ShowInfoMessage or ShowErrorMessage, which sets the colors appropriately before showing the message:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Sub CreateColorSchema() 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim LabelList1 As New List 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim ColorList1 As New List 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; LabelList1.AppendItem &amp;quot;ErrorBackground&amp;quot;, &amp;quot;ErrorForeground&amp;quot;, &amp;quot;InfoBackground&amp;quot;, &amp;quot;InfoForeground&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ColorList1.AppendItem &amp;quot;Red&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;Black&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; App.CreateColorScheme &amp;quot;messages&amp;quot;, LabelList1, ColorList1 

    &lt;br /&gt;End Sub&lt;/p&gt;

  &lt;p&gt;Sub Form_Load() 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.Dodefault 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call CreateColorSchema 

    &lt;br /&gt;End Sub &lt;/p&gt;

  &lt;p&gt;Sub ShowMessage (messageString As String, level As String) 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.Visible=True 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.BackColor = level &amp;amp; &amp;quot;background&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.ForeColor = level &amp;amp; &amp;quot;foreground&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lbl_message.caption = Space$(5) &amp;amp; messageString 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Sleep(3000) 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call HideMessage&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;End Sub&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

  &lt;p&gt;Sub ShowErrorMessage (messageString As String) 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ShowMessage messageString, &amp;quot;error&amp;quot; 

    &lt;br /&gt;End Sub &lt;/p&gt;

  &lt;p&gt;Sub ShowInfoMessage (messageString As String) 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ShowMessage messageString, &amp;quot;info&amp;quot; 

    &lt;br /&gt;End Sub &lt;/p&gt;

  &lt;p&gt;Sub HideMessage() 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; On Error Resume Next 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lbl_message.caption = &amp;quot;&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lbl_message.Visible=False 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lbl_countdown.Visible = False 

    &lt;br /&gt;End Sub&lt;/p&gt;

  &lt;p&gt;Sub btn_info_Click() 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ShowInfoMessage &amp;quot;Something Interesting Just Happened&amp;quot; 

    &lt;br /&gt;End Sub &lt;/p&gt;

  &lt;p&gt;Sub btn_error_Click() 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ShowErrorMessage &amp;quot;An Error Happened&amp;quot; 

    &lt;br /&gt;End Sub&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;So there you have it – a better way to show informational and error messages to your users without interrupting their flow.&lt;/p&gt;

&lt;p&gt;Hope you find this useful.&lt;/p&gt;
&lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=UI-Esywf3fk:LxvaJtwfbOQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=UI-Esywf3fk:LxvaJtwfbOQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/UI-Esywf3fk" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/12/better-message-notifications-in-the-clarify-client#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/clearbasic-2">clearbasic</category>
 <pubDate>Mon, 12 Dec 2011 19:39:28 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1736 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/12/better-message-notifications-in-the-clarify-client</feedburner:origLink></item>
<item>
 <title>Improving Attachments in the Clarify Classic Client</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/BcgZeukGJgg/improving-attachments-in-the-clarify-classic-client</link>
 <description>&lt;p&gt;A common issue with attachments in Clarify is getting the uploaded files to a common location.&lt;/p&gt;  &lt;p&gt;By default, Clarify simply takes the filepath you give it (such as c:\temp\file.ext) and creates attachments records in the database with that filepath.&lt;/p&gt;  &lt;p&gt;Obviously, no one else is going to be able to view an attachment that resides on a user’s C drive. So that default behavior stinks. &lt;/p&gt;  &lt;p&gt;I’ve seen a number of attempts of solving this over the years. A couple common ones:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create a shared drive (such a Z:\ or \\attachment_server\), and tell users to copy files there, and then attach them. &lt;/li&gt;    &lt;li&gt;Add an FTP customization to the attachments form, so that files are automatically FTP-ed form the user’s machine to a common location. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m not really crazy about either of these solutions.&amp;#160; In the first, it requires users to remember to do something. In the second, you end up with FTP permission issues, and its often the case that files end up in one huge directory. &lt;/p&gt;  &lt;h2&gt;It’s better on the web &lt;/h2&gt;  &lt;p&gt;With web applications (such as &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Agent"&gt;Dovetail Agent&lt;/a&gt;, &lt;a href="http://www.dovetailsoftware.com/dovetail-agent-lite"&gt;Agent Lite&lt;/a&gt;, and &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Mobile&lt;/a&gt;), we’ve solved this issue. The file is uploaded to the web server, and then from there we have full control over what to do. Typically we store it on a common share (such a Z:\ or \\attachment_server\), and dynamically built subdirectories to keep things organized. &lt;/p&gt;  &lt;p&gt;For example, the directory structure would look like &lt;a href="file://\\server\attachments\PartialCaseId\CaseId\file.ext"&gt;\\server\attachments\PartialCaseId\CaseId\file.ext&lt;/a&gt;, such as &lt;a href="file://\\server\attachments\009xxx\009009\file.ext"&gt;\\server\attachments\009xxx\009009\file.ext&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Then, when we want to download those files, we can simply serve them up by HTTP (which I discussed in &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/11/14/customizing-the-clarify-attachment-form-form-1006"&gt;a previous post&lt;/a&gt;).&lt;/p&gt;  &lt;h2&gt;How can we use the web to upload/download attachments from Clarify?&lt;/h2&gt;  &lt;p&gt;Pretty simple. We use a web browser control on a form set to a URL that handles our file uploading and downloading.&lt;/p&gt;  &lt;p&gt;This is the same technique I described previously in &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/11/11/improving-case-history-within-the-clarify-classic-client"&gt;Improving Case History within the Clarify Classic Client&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;So what might this look like?&lt;/h2&gt;  &lt;p&gt;For a quick example, I re-used the attachment page from Dovetail Agent. Here’s the Clarify attachment form (form 1006) with a browser control on it:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/attachments_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="attachments" border="0" alt="attachments" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/attachments_thumb.png" width="614" height="602" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The ClearBasic code behind it:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub Form_Load()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Dim rec As Record      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Set rec = App.GetContext       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; web.Navigate http://myserver/agent/workflow/clarify_attachment.asp?flag=1 &amp;amp; objid=&amp;quot; &amp;amp; rec.getField(&amp;quot;objid&amp;quot;) &amp;amp; &amp;quot;&amp;amp;type=&amp;quot; &amp;amp; rec.RecordType&lt;/p&gt;    &lt;p&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;    &lt;p&gt;Pretty simple. Users can upload/download and delete file attachments. The files are automatically uploaded to the web server, and then can be moved to their final storage location. In my example, they’re stored on a server called &lt;em&gt;tommy&lt;/em&gt; in a share named &lt;em&gt;Attachments&lt;/em&gt;. &lt;/p&gt;  &lt;h2&gt;Roll your own&lt;/h2&gt;  &lt;p&gt;Now, if you’re not using Dovetail Agent, you might have to whip your own little web app to do this. But that’s pretty straight-forward for any web developer.&lt;/p&gt;  &lt;p&gt;And it doesn’t matter if your web app is running on Windows, UNIX, or Linux. Your web app makes it easy for users to upload attachments – where you store them is up to you. &lt;/p&gt;  &lt;p&gt;Keep in mind though that you still need to do the “Clarify stuff”, i.e. inserts/deletes from table_doc_inst and table_doc_path, and relating them to the proper entity (such as a case or subcase). This is where Clarify libraries such as the &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20SDK"&gt;Dovetail SDK&lt;/a&gt; or Clarify CBOs come into play. &lt;/p&gt;  &lt;h2&gt;To the cloud!&lt;/h2&gt;  &lt;p&gt;Here’s another thought. What if all of these attachments were stored in the cloud, such as Amazon S3? Your web app could post/upload those files directly to your Amazon S3 account, and you could get out of the business of storing huge amounts of local file attachments. Hmmm……very interesting……&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;I think this is an interesting approach to improving a “legacy” application by incorporating contemporary technologies. And as legacy apps like the Clarify Client are phased out, we should be able to re-use much of the web-based components that we’ve built.&lt;/p&gt;  &lt;p&gt;Rock on.&lt;/p&gt;   &lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=BcgZeukGJgg:j6sKx8Xbl4Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=BcgZeukGJgg:j6sKx8Xbl4Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/BcgZeukGJgg" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/09/improving-attachments-in-the-clarify-classic-client#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify">Amdocs Clarify</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-classic-client-0">Clarify Classic Client</category>
 <category domain="http://www.dovetailsoftware.com/tags/clearbasic-2">clearbasic</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-sdk-0">Dovetail SDK</category>
 <pubDate>Fri, 09 Dec 2011 19:03:52 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1735 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/12/09/improving-attachments-in-the-clarify-classic-client</feedburner:origLink></item>
<item>
 <title>Customizing the Clarify Attachment Form (form 1006)</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/twTOG1jcIL8/customizing-the-clarify-attachment-form-form-1006</link>
 <description>&lt;p&gt;I recently had to do some modifications to the attachment form in Clarify (form 1006). This is one of those old-school forms that doesn’t always behave very well with ClearBasic. This post captures a few of my findings and learnings.&lt;/p&gt;  &lt;h2&gt;FILELIST Double-Click&lt;/h2&gt;  &lt;p&gt;One of the things I wanted to do was to intercept the double-click action on the FILELIST control, which happens when a user double-clicks a file to Open it. &lt;/p&gt;  &lt;p&gt;Plan A: some simple Clearbasic code&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub FILELIST_DblClick()      &lt;br /&gt;If FileValidation = True Then       &lt;br /&gt;&amp;#160; Me.DoDefault       &lt;br /&gt;Else       &lt;br /&gt;&amp;#160; App.MsgBox &amp;quot;Not authorized&amp;quot;       &lt;br /&gt;End If       &lt;br /&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Looks simple right? But it doesn’t work. Even if the Me.DoDefault code isn’t ever called, the file is still opened. So if the validation failed, the user would get the message box saying &amp;quot;Not authorized&amp;quot;,&amp;#160; and then the file would be opened. No bueno.&lt;/p&gt;  &lt;p&gt;I tried everything I could think of, but I couldn’t prevent the file from being opened. &lt;a href="http://crm.ittoolbox.com/groups/technical-functional/clarify-l/ref-attachment-form-1006-1084975"&gt;I found an old forum post with the same findings&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Plan B: Change the FILELIST control so that it’s no longer a fancy file renderer with drag and drop capabilities, and just make it a plain ol’ listbox. I did this by deleting the existing control, then adding a new listbox with the same name (FILELIST), and the same source and destination contextual objects. I think the same thing would work by changing the flags on that control_db record from 32768 to 0.&lt;/p&gt;  &lt;p&gt;Now I am able to trap the double-click event on that textbox.&lt;/p&gt;  &lt;p&gt;I did lose the ability to drag and drop files onto that control now, but that didn’t matter for my scenario (and I have a hunch that no one uses this anyway).&lt;/p&gt;  &lt;p&gt;Here’s what the baseline attachment form looks like, with a “fancy” listbox for files:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachment_baseline_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="attachment_baseline" border="0" alt="attachment_baseline" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachment_baseline_thumb.png" width="360" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;And now after changing it to a non-fancy listbox:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachments_better_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="attachments_better" border="0" alt="attachments_better" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachments_better_thumb.png" width="582" height="309" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I actually prefer this, as I can see more than just a couple of files at a time.&amp;#160; &lt;/p&gt;  &lt;p&gt;But, the filelist listbox now showed a full file path and file name for each of the attachments. I didn’t like that.&lt;/p&gt;  &lt;h2&gt;Make it Better&lt;/h2&gt;  &lt;p&gt;Lets get rid of the full path in the listbox.&lt;/p&gt;  &lt;p&gt;A little ClearBasic code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub ReplaceFilePathsWithJustFileName()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim allFiles As List       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim i As Integer       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim fileAndPath As String       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim fileName As String       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim n As Integer &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; cobj_doc_list.GetContents allFiles &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; For i = 0 To allFiles.Count - 1      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fileAndPath = allFiles.ItemByIndex(i)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fileName = GetFileNameFromFileAndPath(fileAndPath)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; allFiles.ReplaceByIndex i, fileName       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Next i       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cobj_doc_list.Fill allFiles       &lt;br /&gt;End Sub&lt;/p&gt;    &lt;p&gt;Sub Form_Load()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call ReplaceFilePathsWithJustFileName()       &lt;br /&gt;End Sub&lt;/p&gt;    &lt;p&gt;Sub ADD_BTN_Click()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call ReplaceFilePathsWithJustFileName()       &lt;br /&gt;End Sub &lt;/p&gt;    &lt;p&gt;Sub REPLACE_BTN_Click()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Call ReplaceFilePathsWithJustFileName()       &lt;br /&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;   And now our listbox of files looks like:   &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachments_no_paths_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="attachments_no_paths" border="0" alt="attachments_no_paths" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/attachments_no_paths_thumb.png" width="582" height="309" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cleaner. I like it.&lt;/p&gt;    &lt;h2&gt;Default the Attachment Name&lt;/h2&gt;  &lt;p&gt;One of my annoyances with that form is that when you browse and pick a file to be attached, you also have to enter an attachment name. I always wish that this had some sort of smart default, such as defaulting to the name of the file (without the path).&lt;/p&gt;  &lt;p&gt;Since I was knee deep in that form, I tried to give it a try.&lt;/p&gt;  &lt;p&gt;I added a click handler for the Browse button so that it gets the full file and path, gets just the file name out of that, and then puts that file name into the attachment name textbox:&lt;/p&gt;  &lt;p&gt;Sub FILE_BTN_Click()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim fileAndPath As String     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim fileName As String &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; fileAndPath = FILE.Value    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; fileName = GetFileNameFromFileAndPath(fileAndPath)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Ctl_Name.Value = fileName     &lt;br /&gt;End Sub&lt;/p&gt;  &lt;p&gt;And a little helper function for extracting just the filename:&lt;/p&gt;  &lt;p&gt;Function GetFileNameFromFileAndPath(fileAndPath As String) As String    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim n As Integer     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; n = ItemCount(fileAndPath,&amp;quot;\&amp;quot;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; GetFileNameFromFileAndPath = Item$(fileAndPath,n, n + 1,&amp;quot;\&amp;quot;)     &lt;br /&gt;End Function&lt;/p&gt;  &lt;p&gt;So now, when you browse and pick a file, the Attachment Name will be defaulted to the filename. Sweet.&lt;/p&gt;  &lt;h2&gt;Download File Attachments via HTTP&lt;/h2&gt;  &lt;p&gt;An additional enhancement that I was working on was the ability to download a file attachment via HTTP. In a customer-specific scenario, we were uploading attachments via a Dovetail web application (Dovetail AgentLite), so they get stored on a common server, and we can download them via a URL. &lt;/p&gt;  &lt;p&gt;I added a readonly URL textbox to the form (which was super helpful when developing).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/my_attachment_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="my_attachment" border="0" alt="my_attachment" src="http://blogs.dovetailsoftware.com/sites/default/files/gsherman/my_attachment_thumb.png" width="582" height="312" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When a file is clicked in the listbox, we want to build the proper URL, and fill that into the textbox via the contextual object.&lt;/p&gt;  &lt;p&gt;I’m using our Dovetail Mobile as a web app for serving up that file. If desired, you could also serve it up just via your web server serving up a static file, without needing a Dovetail web app at all. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Const Base_Dovetail_URL = &amp;quot;http://localhost/mobiledev/Attachments/Download/&amp;quot;&lt;/p&gt;    &lt;p&gt;Sub FILELIST_Click()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Me.DoDefault       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Cobj_url.Fill BuildURL()       &lt;br /&gt;End Sub &lt;/p&gt;    &lt;p&gt;Function BuildURL() As String      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim recDocInst As Record&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COBJ_doc_inst.GetContents recDocInst &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; BuildUrl = Base_Dovetail_URL &amp;amp; CStr(recDocInst.GetField(&amp;quot;objid&amp;quot;))      &lt;br /&gt;End Function&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Open that file&lt;/h2&gt;  &lt;p&gt;And finally, a little code to open the file URL using the user’s browser.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sub OpenURL(url)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim taskID As Variant       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; taskID = Shell(&amp;quot;explorer.exe &amp;quot; &amp;amp; url)       &lt;br /&gt;End Sub&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;Sub EDIT_BTN_Click() 'Note: This is the &amp;quot;Open&amp;quot; button       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim url As String       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; url = BuildUrl()&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; OpenURL(url)      &lt;br /&gt;End Sub&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;What about file uploads?&lt;/h2&gt;  &lt;p&gt;In the specific customer scenario I was working on, they aren’t uploading file attachments via the Clarify Client – just by Dovetail. So I was able to simply disable the Browse, Add, Replace, and Delete buttons. &lt;/p&gt;  &lt;p&gt;Uploading files to a common location is an interesting topic – perhaps for a future blog post.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;The attachment form is certainly a tricky form to customize. Hopefully some of my experience will help should you have to customize this form yourself.&lt;/p&gt; &lt;link rel="stylesheet" type="text/css" href="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.css" media="all" /&gt;&lt;script src="http://support.dovetailsoftware.com/blog_files/gary/gary_blog_hack.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=twTOG1jcIL8:dis7rAcjK0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/GarySherman?a=twTOG1jcIL8:dis7rAcjK0w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/GarySherman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GarySherman/~4/twTOG1jcIL8" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/11/14/customizing-the-clarify-attachment-form-form-1006#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify">Amdocs Clarify</category>
 <category domain="http://www.dovetailsoftware.com/tags/clearbasic-2">clearbasic</category>
 <category domain="http://www.dovetailsoftware.com/tags/customization-1">customization</category>
 <pubDate>Mon, 14 Nov 2011 15:18:32 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1725 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/11/14/customizing-the-clarify-attachment-form-form-1006</feedburner:origLink></item>
</channel>
</rss>

