<?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>Deletes (Drops) in SchemaEditor</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/mfVhWsplwJo/deletes-drops-in-schemaeditor</link>
 <description>&lt;p&gt;While discussing &lt;a href="https://support.dovetailsoftware.com/selfservice/products/show/SchemaEditor"&gt;Dovetail SchemaEditor&lt;/a&gt; recently, a question came up around deletes (drops), i.e. How do you delete a column using SchemaEditor, as it doesn’t seem like SchemaScript supports deletes.&lt;/p&gt;  &lt;p&gt;First, a little background.&lt;/p&gt;  &lt;p&gt;SchemaEditor works with Data Dictionary files and with SchemaScript files. &lt;/p&gt;  &lt;p&gt;A &lt;a href="https://support.dovetailsoftware.com/documentation/SchemaEditor/2.3.2/html/2467.htm"&gt;Data Dictionary&lt;/a&gt; file is a complete reference of the database schema. This is similar to a Clarify complete schema files. &lt;/p&gt;  &lt;p&gt;&lt;a href="https://support.dovetailsoftware.com/documentation/SchemaEditor/2.3.2/html/2458.htm"&gt;SchemaScript&lt;/a&gt; is a simple, imperative way of specifying the changes to be made to the database schema. &lt;/p&gt;  &lt;p&gt;A complete schema file (Data Dictionary), because of its size and complexity, can quickly become unwieldy and cumbersome to work with. &lt;/p&gt;  &lt;p&gt;Schema Script simplifies the process of schema changes by allowing a user to specify only the changes to be made, as opposed to the complete schema. &lt;/p&gt;  &lt;p&gt;However, only &lt;em&gt;adds &lt;/em&gt;and &lt;em&gt;updates &lt;/em&gt;can be performed using SchemaScript. &lt;em&gt;Deletes &lt;/em&gt;are not currently supported. &lt;/p&gt;  &lt;h2&gt;Adds using SchemaScript&lt;/h2&gt;  &lt;p&gt;Here’s a simple example of a SchemaScript file that adds a new column to a table, and also adds this column to an existing view. &lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.dovetailsoftware.com/2006/10/SchemaScript.xsd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addColumn&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;case&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;x_test_integer&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;dataType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Integer&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addViewColumn&lt;/span&gt; &lt;span class="attr"&gt;view&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;cas_secure&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;x_test_integer&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;x_test_integer&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;case&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&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;Nice and simple.&lt;/p&gt;

&lt;h2&gt;Deletes&lt;/h2&gt;

&lt;p&gt;As I mentioned earlier, deletes are not currently supported when using SchemaScript. In order to perform a delete: &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Export the Schema to a File. This will create a complete Data Dictionary file. &lt;/li&gt;

  &lt;li&gt;Modify the Schema File, removing the schema elements you wish to delete. &lt;/li&gt;

  &lt;li&gt;Apply the changes to the database. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is similar to the process when working with Clarify schema files and using Clarify ddcomp or Amdocs Schema Manager.&lt;/p&gt;

&lt;h2&gt;Delete a column and view column at the same time&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can SchemaEditor drop a (table) column and a view column (based on that table column) at the same time?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Yes, it can. &lt;/p&gt;

&lt;p&gt;I suspect the reason for this question was due to a limitation of the Amdocs Schema Manager application. &lt;/p&gt;

&lt;p&gt;After I added the column and view column using the SchemaScript defined above, I exported my schema to a file, edited that file to remove that column and view column, and applied the changes. &lt;/p&gt;

&lt;p&gt;Looking at the SchemaEditor output report, I can see that it did just what I was expecting: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dovetail SchemaEditor Difference Report 
    &lt;br /&gt;---------------------------------------------------------------------------------- 

    &lt;br /&gt;Date: 2013-05-03 11:00:49 

    &lt;br /&gt;Action: Apply 

    &lt;br /&gt;User: fcs\gary 

    &lt;br /&gt;Database Name: classic 

    &lt;br /&gt;Input File: Schema.xml 

    &lt;br /&gt;---------------------------------------------------------------------------------- 

    &lt;br /&gt;Changed schema 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Changed table &amp;quot;case&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Removed column &amp;quot;x_test_integer&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Changed view &amp;quot;cas_secure&amp;quot; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Removed view column &amp;quot;x_test_integer&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice that it reported that it removed both the column and the view column. &lt;/p&gt;

&lt;p&gt;And there you have it. Hope this helps explains a bit about deletes using SchemaEditor.&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=mfVhWsplwJo:CXrS20Oq3h4: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=mfVhWsplwJo:CXrS20Oq3h4: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/mfVhWsplwJo" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/05/03/deletes-drops-in-schemaeditor#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</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>Fri, 03 May 2013 16:30:08 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">2003 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/05/03/deletes-drops-in-schemaeditor</feedburner:origLink></item>
<item>
 <title>awesome CSS Specificity cheat sheet</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/w6-nUAnQt_o/awesome-css-specificity-cheat-sheet</link>
 <description>&lt;p&gt;Over the weekend I attended the &lt;a href="http://html5tx.com/"&gt;HTML5.TX&lt;/a&gt; conference here in Austin, along with an awesome CSS workshop by &lt;a href="http://www.standardista.com"&gt;Estelle Weyl&lt;/a&gt;. It was a great conference and workshop. Austin is such a great community for technology. &lt;/p&gt;  &lt;p&gt;Every time I think I got a handle on CSS, I learn some new stuff that blows my mind, both practical tips and fun stuff.&lt;/p&gt;  &lt;p&gt;For a bit of CSS fun, check out her &lt;a href="http://estelle.github.com/10/files/file_steps.html"&gt;Gangham style done with CSS sprite animations&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;One of the helpful things that Estelle shared was her &lt;a href="http://www.standardista.com/css3/css-specificity/"&gt;CSS SpeciFISHity cheat sheet&lt;/a&gt;, which helps explain CSS specificity.&amp;#160; &lt;a href="http://www.standardista.com/wp-content/uploads/2012/01/specifishity1.pdf"&gt;Download the PDF&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.standardista.com/wp-content/uploads/2012/01/specifishity1.pdf"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="specifishity[1]" border="0" alt="specifishity[1]" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/specifishity%5B1%5D_3.gif" width="597" height="772" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hopefully you’ll find this as useful as I did.&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=w6-nUAnQt_o:SyipTuKF0xk: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=w6-nUAnQt_o:SyipTuKF0xk: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/w6-nUAnQt_o" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/02/04/awesome-css-specificity-cheat-sheet#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/css-1">CSS</category>
 <pubDate>Mon, 04 Feb 2013 17:21:00 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1968 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/02/04/awesome-css-specificity-cheat-sheet</feedburner:origLink></item>
<item>
 <title>Job Opportunities – here and there</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/7WCf_Z7aGJo/job-opportunities-%E2%80%93-here-and-there</link>
 <description>&lt;p&gt;A couple of job opportunities to share.&lt;/p&gt;  &lt;h2&gt;Front End Web Developer here at Dovetail&lt;/h2&gt;  &lt;p&gt;We’re looking for an experienced front end web developer to join our team. HTML/CSS and heavy JavaScript. &lt;/p&gt;  &lt;p&gt;What you bring to the table:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You write JavaScript from scratch and have written your own JavaScript library because it’s fun &lt;/li&gt;    &lt;li&gt;If you aren’t working with HTML5 and CSS3 you feel like you are working on legacy applications &lt;/li&gt;    &lt;li&gt;You love client-side MVC frameworks such as Backbone.js, Knockout.js, Underscore.js, etc. (we do!) &lt;/li&gt;    &lt;li&gt;When you go out to eat at a restaurant, you wonder why the menu isn’t presented in JSON &lt;/li&gt;    &lt;li&gt;You understand cross browser compatibility and testing in your development process &lt;/li&gt;    &lt;li&gt;You thrive in a fast paced work environment and get a rush from releasing a new build &lt;/li&gt;    &lt;li&gt;You contribute to the open source/technical community and stay up to date on the latest and greatest &lt;/li&gt;    &lt;li&gt;You understand why it is important to separate structure from presentation from behavior &lt;/li&gt;    &lt;li&gt;You don’t wonder what the difference is between a &amp;lt;div&amp;gt; and a &amp;lt;span&amp;gt; (seriously, please!) &lt;/li&gt;    &lt;li&gt;You have code samples, a portfolio, Github account or the like&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/front-end-developer"&gt;More details on our website&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Interested? Drop us an email: &lt;a href="mailto:tech-jobs@dovetailsoftware.com"&gt;tech-jobs@dovetailsoftware.com&lt;/a&gt;&lt;/p&gt;    &lt;h2&gt;Clarify Developer&lt;/h2&gt;  &lt;p&gt;I also have a Clarify customer who reached out to me looking for a Clarify Developer. &lt;/p&gt;  &lt;p&gt;They use Clarify in the warehouses to facilitate order management and to help with shipping.&amp;#160; The last time they had a major upgrade on the system was ’08.&amp;#160; They are in the process of going through an update right now, but it is on a long term schedule, hence the need for developers. It’s a Java/Oracle environment.&lt;/p&gt;  &lt;p&gt;They’re currently using Clarify 6.0, working on upgrading to Amdocs 8.1.&lt;/p&gt;  &lt;p&gt;I asked if they were upgrading to the Amdocs Smart Client or staying with the Classic Client. The reply was the Clarify Client.&lt;/p&gt;  &lt;p&gt;They’re located in Denver, CO, and it’s an onsite (not remote) position. &lt;/p&gt;  &lt;p&gt;From their job description:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database understanding and development with Oracle PL/SQL - schemas, data modeling, packages, tuning, writing/debugging queries (simple and complex)&lt;/li&gt;    &lt;li&gt;Amdocs/Clarify experience - (UI) User Interface, Clear Basic, knowledge of Clear Logistics or experience with a similar CRM application&lt;/li&gt;    &lt;li&gt;Expert knowledge of Unix shell scripting, source control tools, JAVA batch processing/stored procedures&lt;/li&gt;    &lt;li&gt;Visual Basic, VB.net, Oracle Forms, any tool for building GUIs.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://dish-assessment1-dish.icims.com/jobs/15147/job"&gt;More details&lt;/a&gt; and a link top apply online.&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=7WCf_Z7aGJo:8MGYPfXP6fw: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=7WCf_Z7aGJo:8MGYPfXP6fw: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/7WCf_Z7aGJo" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/01/28/job-opportunities-%E2%80%93-here-and-there#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</category>
 <category domain="http://www.dovetailsoftware.com/tags/jobs">jobs</category>
 <pubDate>Mon, 28 Jan 2013 16:35:32 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1965 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2013/01/28/job-opportunities-%E2%80%93-here-and-there</feedburner:origLink></item>
<item>
 <title>You got Dovetail in my Gmail!</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/THFAx9Rd34k/you-got-dovetail-in-my-gmail</link>
 <description>&lt;p&gt;If you use Gmail, you may have heard of &lt;a href="http://rapportive.com/"&gt;Rapportive&lt;/a&gt;. It’s a plugin that brings in social information into the context of an email.&lt;/p&gt;  &lt;p&gt;For example, when I’m looking at email from from my buddy Kevin, the sidebar fills in with contextual information, like so:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/email_4_0.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_0.png" width="642" height="466" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now I can quickly see his avatar, recent tweets, see where he’s located, job titles, get to his Facebook and LinkedIn accounts, etc.&lt;/p&gt;  &lt;p&gt;This is nice when emailing with people I know. It’s even nicer when I get emails from people I don’t know (or don’t know well), as it brings in much more contextual information. You can also hover over any email address and have the relevant info show up. Really powerful stuff.&lt;/p&gt;  &lt;p&gt;If you use Gmail, I highly recommend &lt;a href="http://rapportive.com/"&gt;Rapportive&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Raplets&lt;/h2&gt;  &lt;p&gt;What’s even better is that they’ve opened up Rapportive so developers can build in &lt;a href="http://code.rapportive.com/raplet-docs/"&gt;extensions called raplets&lt;/a&gt;, pulling in data from other apps/services.&lt;/p&gt;  &lt;p&gt;There are existing ones you can add, including Github, MailChimp, Highrise, and a bunch more. &lt;/p&gt;  &lt;p&gt;I’ve been playing with their &lt;a href="http://code.rapportive.com/raplet-docs/"&gt;raplet API&lt;/a&gt; to create my own raplet for adding data from our Dovetail/Clarify system into my Rapportive sidebar. Like so:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/sidebar_jim_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="sidebar_jim" border="0" alt="sidebar_jim" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/sidebar_jim_thumb.png" width="240" height="495" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So when I get an email from a customer, I can quickly see their open cases. I can click on any of those cases, which will open that case in Dovetail. I can click on the individual’s first name which will take me to that contact page in Dovetail, or I can click on the &lt;em&gt;Create a New Case&lt;/em&gt; button which will start a new case for that contact. &lt;/p&gt;  &lt;p&gt;Pretty rockin!&lt;/p&gt;  &lt;h2&gt;Collapsed/Expanded HTML&lt;/h2&gt;  &lt;p&gt;If you end up with a lot of items in your sidebar (twitter, facebook, etc.) there may not be enough room to show the &lt;em&gt;expanded&lt;/em&gt; view for each raplet. So Rapportive smartly collapses the views. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/collapsed_sidebar_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="collapsed_sidebar" border="0" alt="collapsed_sidebar" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/collapsed_sidebar_thumb.png" width="239" height="422" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the Dovetail section with just a summary (in this case, the number of open cases this person has).&lt;/p&gt;  &lt;p&gt;Then when you hover over the appropriate icon, an expanded view flys out, like so:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/collapsed_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="collapsed" border="0" alt="collapsed" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/collapsed_thumb.png" width="548" height="248" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Very slick.&lt;/p&gt;  &lt;h2&gt;Next Steps&lt;/h2&gt;  &lt;p&gt;I’ve been playing this in my local environment (but connected to our production Dovetail database) for a few weeks now, and I really dig it.&lt;/p&gt;  &lt;p&gt;I just hacked out some code rather quickly as a proof of concept for creating this custom raplet. &lt;/p&gt;  &lt;p&gt;I’ll be working on cleaning this code up as I get some spare cycles, hopefully over the next few weeks. Then I’ll share the code on Github. I’ll post again when it’s there. &lt;/p&gt;  &lt;p&gt;If any of this is of interest to you – please do get in touch. I think it would be a fun project to put in place at a customer site.&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=THFAx9Rd34k:DIYbhx8gR04: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=THFAx9Rd34k:DIYbhx8gR04: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/THFAx9Rd34k" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/13/you-got-dovetail-in-my-gmail#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/amdocs-clarify-crm">Amdocs Clarify CRM</category>
 <category domain="http://www.dovetailsoftware.com/tags/gmail">gmail</category>
 <category domain="http://www.dovetailsoftware.com/tags/integration-1">integration</category>
 <pubDate>Thu, 13 Dec 2012 15:50:59 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1956 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/13/you-got-dovetail-in-my-gmail</feedburner:origLink></item>
<item>
 <title>Authentication across applications, including Dovetail Mobile / AgentLite</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/nTncylbaExg/authentication-across-applications-including-dovetail-mobile-agentlite</link>
 <description>&lt;p&gt;We’ve worked with a couple of customers recently who use some other application for authentication. Basically, Single Sign-On. One was using CA SiteMinder, and another had a home grown application. In both instances, we were able to easily allow &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile / AgentLite&lt;/a&gt; to work with their existing authentication mechanisms, allowing single sign-on capabilities. This means that if a user has already authenticated in their environment, then they were automatically logged into Dovetail, without having to enter their username and password again. Pretty nice user experience.&lt;/p&gt;  &lt;p&gt;In this post, I’ll share some of the details about how this all works. &lt;/p&gt;  &lt;p&gt;For this scenario, our customer had a home grown “App Store”. Users logged into this App Store, which authenticates them, and then shows them a list of applications that they are authorized to use. One of them is &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The customer’s App Store application is an ASP.NET web application that uses forms based authentication. Dovetail Mobile also uses ASP.NET forms based authentication. Which means that we can take advantage of &lt;a href="http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx"&gt;forms authentication across applications&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ASP.NET supports forms authentication in a distributed environment, either across applications on a single server or in a Web farm. When forms authentication is enabled across multiple ASP.NET applications, users are not required to re-authenticate when switching between the applications.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Flows&lt;/h2&gt;  &lt;p&gt;Lets see this in action.&lt;/p&gt;  &lt;p&gt;To test this out, I built a very simple &lt;a href="https://github.com/gsherman/AppStore"&gt;“App Store” app&lt;/a&gt; that does forms based authentication using a simple XML file as a membership provider.&lt;/p&gt;  &lt;p&gt;I browse to the login page (which is part of the App Store) and login. I then see my list of available apps, which includes Dovetail. Clicking that app automatically logs me into Dovetail. No additional authentication necessary.&lt;/p&gt;  &lt;p&gt;Lets see that in action: (&lt;a href="http://screenr.com/bwh7"&gt;Video Link&lt;/a&gt;)&lt;/p&gt; &lt;iframe height="396" src="http://www.screenr.com/embed/bwh7" frameborder="0" width="650"&gt;&lt;/iframe&gt;    &lt;p&gt;Another common flow is that the user browses to the&amp;#160; Dovetail app, but they aren’t yet authenticated. That flow looks like:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Unauthenticated user browses to Dovetail app &lt;/li&gt;    &lt;li&gt;User is redirected to the login page (which is part of the App Store app) &lt;/li&gt;    &lt;li&gt;User logs in &lt;/li&gt;    &lt;li&gt;Authenticated user is automatically redirected back to the original requested page (Dovetail) and can access the app. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Lets see that in action: (&lt;a href="http://screenr.com/ywh7"&gt;Video Link&lt;/a&gt;)&lt;/p&gt;   &lt;iframe height="396" src="http://www.screenr.com/embed/ywh7" frameborder="0" width="650"&gt;&lt;/iframe&gt;  &lt;h2&gt;Configuration&lt;/h2&gt;  &lt;p&gt;To set this all up, it’s mostly a configuration exercise. To configure forms authentication across applications, you set attributes of the &lt;a href="http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx"&gt;forms&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx"&gt;machineKey&lt;/a&gt; sections of the Web.config file to the same values for all applications that are participating in shared forms authentication.&lt;/p&gt;  &lt;h2&gt;A Tale of Two Applications&lt;/h2&gt;  &lt;p&gt;The first application is the App Store app, which is the app that performs the authentication. Its URL is &lt;a href="http://app.company.com"&gt;http://app.company.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The second application is Dovetail Mobile. Its URL is &lt;a href="http://dovetail.company.com"&gt;http://dovetail.company.com&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Authentication Config&lt;/h2&gt;  &lt;p&gt;In the App Store (which performs the authentication), we configure the forms section within the web.config like so:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;compilation&lt;/span&gt; &lt;span class="attr"&gt;debug&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;targetFramework&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;4.0&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Forms&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;forms&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;.ADAuthCookie&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;loginUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;~/Account/Login&amp;quot;&lt;/span&gt;
             &lt;span class="attr"&gt;defaultUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;~/&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;protection&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;All&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;timeout&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;slidingExpiration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;
             &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;cookieless&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoDetect&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;enableCrossAppRedirects&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;domain&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;.company.com&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;credentials&lt;/span&gt; &lt;span class="attr"&gt;passwordFormat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SHA1&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;forms&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;A couple things to take note of:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;loginUrl: this is the path to the login page. The fully resolved path would be &lt;a href="http://app.company.com/Account/Login"&gt;http://app.company.com/Account/Login&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;domain: Since the two apps need to share an authorization cookie, the domain needs to be set with a leading dot. This allows the authentication cookie to be available to subdomains (i.e. a cookie created on app.company.com is available to dovetail.company.com) &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Dovetail Config&lt;/h2&gt;

&lt;p&gt;In the Dovetail app, we configure the forms section within the web.config like so:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Forms&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;&amp;lt;!-- The name, protection, and path attributes must match exactly in each Web.config file. --&amp;gt;&lt;/span&gt;        
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;forms&lt;/span&gt; 
          &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;.ADAuthCookie&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;loginUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://app.company.com/account/login&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;defaultUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;~/&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;protection&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;All&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;timeout&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;slidingExpiration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;cookieless&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoDetect&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;enableCrossAppRedirects&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; 
          &lt;span class="attr"&gt;domain&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;.company.com&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;    
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;A couple things to take note of:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;loginUrl: this is the path to the login page – which is part of the App Store app. &lt;/li&gt;

  &lt;li&gt;domain: again, the domain needs to be set with a leading dot. &lt;/li&gt;

  &lt;li&gt;The name, protection, and path attributes must match exactly in each Web.config file. Here, we’ve matched them to the App Store config. &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  &lt;br /&gt;&lt;/h5&gt;

&lt;h2&gt;Machine Key&lt;/h2&gt;

&lt;p&gt;We also need to ensure the &lt;strong&gt;machineKey&lt;/strong&gt; for &lt;em&gt;Dovetail Mobile&lt;/em&gt; is in sync with the app store &lt;strong&gt;machineKey&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the Dovetail web.config file, within the system.web element, add:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;machineKey&lt;/span&gt; 
    &lt;span class="attr"&gt;decryptionKey&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;94222F033F0A4759E6FFCA4A0F02&amp;quot;&lt;/span&gt; 
    &lt;span class="attr"&gt;validationKey&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;C03B9555F16851C764665C9FDF07D3D660821EACA33E0D40EEA775D0956DFDCCA95E23&amp;quot;&lt;/span&gt; 
    &lt;span class="attr"&gt;validation&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SHA1&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;  &lt;/pre&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;em&gt;Note: Use your own keys! Not the ones above!&lt;/em&gt;&amp;#160; Those are just examples!&lt;/p&gt;

&lt;p&gt;The name, protection, path, validationKey, validation, and decryptionKey attributes must be identical across all applications. Similarly, the encryption and validation key values and the encryption scheme and validation scheme used for authentication tickets (cookie data) must be the same. If the settings do not match, authentication tickets cannot be shared.&lt;/p&gt;

&lt;p&gt;To access and generate a machine key:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;From IIS Manager, click on the top level server node in the left pane. &lt;/li&gt;

  &lt;li&gt;In the main panel, under ASP.NET, click on &lt;strong&gt;Machine Key&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/machineKey_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="machineKey" border="0" alt="machineKey" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/machineKey_thumb.png" width="644" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Changes so far&lt;/h2&gt;

&lt;p&gt;So far, we haven’t made any changes to the app other than configuration. The code has remained unchanged. But we do have a couple of scenarios that we need to code for, that aren’t handled by configuration alone.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Unknown Users &lt;/li&gt;

  &lt;li&gt;Redirects across different servers &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Unknown Users&lt;/h2&gt;

&lt;p&gt;If a user authenticates via the app Store, but is an unknown user in Dovetail, then by default the user is redirected back to the login page. They can login in again, it will redirect them to Dovetail, where Dovetail would redirect them back to the login page again (as they aren’t a valid user in Dovetail). A seemingly infinite login loop without the user knowing what’s going on. This isn’t good. Instead, we’ll create an &lt;strong&gt;Unknown Agent&lt;/strong&gt; page which tells the user what happened and what they should do. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/unknown_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="unknown" border="0" alt="unknown" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/unknown_thumb.png" width="644" height="280" /&gt;&lt;/a&gt; &lt;/p&gt;



&lt;h2&gt;Redirects across different servers&lt;/h2&gt;

&lt;p&gt;One other scenario that the .NET configuration doesn’t handle properly is the redirect to a different server.&lt;/p&gt;

&lt;p&gt;Given this flow:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Unauthenticated user browses to Dovetail app &lt;/li&gt;

  &lt;li&gt;User is redirected to the login page (which is part of the App Store app) &lt;/li&gt;

  &lt;li&gt;User logs in &lt;/li&gt;

  &lt;li&gt;User is automatically redirected back to the original requested page (Dovetail) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the user is redirected to the login page, we can look at the URL and we’ll see a ReturnURL querystring parameter. Such as this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;http://app.company.com/appstore/Login.aspx?ReturnUrl=%2fdovetail&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This tells the authentication app where to return the user to once the user is authenticated.&lt;/p&gt;

&lt;p&gt;But, notice that it’s a relative, not a full URL. The correct ReturnURL should be &lt;em&gt;http://dovetail.company.com/&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is a &lt;a href="https://www.google.com/search?q=returnurl+full+relative+forms"&gt;common problem that many have run into&lt;/a&gt;, and it doesn’t seem to be able to be resolved just with config. So a small code change was necessary. &lt;a href="http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=cb739183-6a0b-46bc-9179-22aed8e60433"&gt;Something like this&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;In general, the majority of everything worked with just some config settings. We had to add code to handle a few specific edge cases, but for the most part, it just works.&lt;/p&gt;

&lt;p&gt;What I dig is how easily we were able to integrate into an existing authentication application, and improve the end user experience. Sweet!&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=nTncylbaExg:AhMxujoLHdo: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=nTncylbaExg:AhMxujoLHdo: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/nTncylbaExg" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/11/authentication-across-applications-including-dovetail-mobile-agentlite#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/net-4">.Net</category>
 <category domain="http://www.dovetailsoftware.com/tags/aspnet-0">asp.net</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-agent-lite">Dovetail Agent Lite</category>
 <category domain="http://www.dovetailsoftware.com/tags/dovetail-mobile-agent">Dovetail Mobile Agent</category>
 <category domain="http://www.dovetailsoftware.com/tags/integration-1">integration</category>
 <category domain="http://www.dovetailsoftware.com/tags/sso">sso</category>
 <pubDate>Tue, 11 Dec 2012 21:32:45 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1954 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/11/authentication-across-applications-including-dovetail-mobile-agentlite</feedburner:origLink></item>
<item>
 <title>More on Customizing the Clarify Attachment Form (form 1006)</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/4Q_lDQuMwLk/more-on-customizing-the-clarify-attachment-form-form-1006</link>
 <description>&lt;p&gt;Last year I had to do some customizing of the Clarify attachment form (form 1006) for a customer. This is one of those old-school forms that doesn’t always behave very well with ClearBasic. &lt;a href="http://www.dovetailsoftware.com/blogs/gsherman/archive/2011/11/14/customizing-the-clarify-attachment-form-form-1006"&gt;I shared some of my findings and solutions on customizing this form&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I had a new request come up this week. &lt;em&gt;How do I enable a user to add an attachment on a case that they don’t own?&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Plan A&lt;/h2&gt;  &lt;p&gt;The first thought was simply to enable the buttons on the form. &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Load()
    &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DoDefault
    FILE_BTN.Enabled = &lt;span class="kwrd"&gt;TRUE&lt;/span&gt;
    ADD_BTN.Enabled = &lt;span class="kwrd"&gt;TRUE&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&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;The buttons were now enabled, but clicking the Add button raised an error, &amp;quot; '{CurrentOwnerLoginName} is now the owner, therefore the 'Save' operation cannot be completed.&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/image001%20(5)_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="image001 (5)" border="0" alt="image001 (5)" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/image001%20(5)_thumb.png" width="463" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Bummer.&lt;/p&gt;

&lt;h2&gt;Plan B&lt;/h2&gt;

&lt;p&gt;There’s a bug that exists in most versions of Clarify, where the drag and drop functionality still seems to work, even if the current user is not the owner.&amp;#160; &lt;/p&gt;

&lt;p&gt;So I can open windows explorer, and drag and drop a file onto the filebox, and that adds the attachment. So let’s exploit this bug. &lt;/p&gt;

&lt;p&gt;You could give some guidance and help in making this operation easier for the user, such as this:&lt;/p&gt;


&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/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="attachment" border="0" alt="attachment" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/attachment_thumb.png" width="428" height="386" /&gt;&lt;/a&gt; 

&lt;p&gt;And the code for this is simple:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Load()
    &lt;span class="kwrd"&gt;Me&lt;/span&gt;.DoDefault
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

&lt;span class="kwrd"&gt;Sub&lt;/span&gt; lbl_explorer_click()
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; taskID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Variant&lt;/span&gt; 
    taskID = Shell(&lt;span class="str"&gt;&amp;quot;explorer.exe &amp;quot;&lt;/span&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="csharpcode"&gt;&amp;#160;&lt;/pre&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;Now any user can drag and drop an attachment onto a case, even if they don’t own it. And by giving them a link to open Windows Explorer, we’ve made it easier for them to do so.&lt;/p&gt;



&lt;h2&gt;Plan C&lt;/h2&gt;

&lt;p&gt;The other thing you could consider is to replace that functionality with your own web page, using a browser control on the attachments form. &lt;/p&gt;

&lt;p&gt;Then, you get full control of all the functionality. &lt;/p&gt;

&lt;p&gt;Bonus: You get to control where the uploaded file goes to. Meaning you could upload it to your attachments server as opposed to allowing attachments with a local path (such as a user's C drive)&lt;/p&gt;

&lt;p&gt;This is an example from a demo I did a while back.&amp;#160; I hacked up the attachment pages from Dovetail Agent as a proof of concept:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/attachments3_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="attachments3" border="0" alt="attachments3" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/attachments3_thumb_1.png" width="1028" height="679" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;More than one way to tackle the problem at hand.&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 experiences in this area will help should you have to customize this form yourself.&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=4Q_lDQuMwLk:p9DCiHUObA8: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=4Q_lDQuMwLk:p9DCiHUObA8: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/4Q_lDQuMwLk" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/04/more-on-customizing-the-clarify-attachment-form-form-1006#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>
 <category domain="http://www.dovetailsoftware.com/tags/customization-1">customization</category>
 <pubDate>Tue, 04 Dec 2012 16:37:11 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1951 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/12/04/more-on-customizing-the-clarify-attachment-form-form-1006</feedburner:origLink></item>
<item>
 <title>Troubleshooting Bad Time Bombs</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/CbM5Ff3VNdY/troubleshooting-bad-time-bombs</link>
 <description>&lt;p&gt;There are times when &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/RuleManager"&gt;Rulemanager&lt;/a&gt; will report a bad time_bomb in the system. Although it’s easy to just ignore when this happens, it’s better to diagnose the issue to understand (and resolve) the root cause.&lt;/p&gt;  &lt;p&gt;This post will walk through an approach to troubleshooting bad time bombs.&lt;/p&gt;  &lt;h2&gt;Time Bombs&lt;/h2&gt;  &lt;p&gt;Recall that a time_bomb record is created when events happen in the system, such as a case being created or closed, workflow actions (dispatch, accept, assign, yank), etc.&amp;#160; Rulemanager is responsible for picking up these time bombs, and comparing them against the defined business rules in the system, to see if something should happen, such as a notification.&lt;/p&gt;  &lt;h2&gt;Time Bombs Gone Bad&lt;/h2&gt;  &lt;p&gt;On occasion, Rulemanager will report a bad time_bomb. This will typically show up in the Rulemanager log file. It may also be reported via email, if your Rulemanager is so configured.&lt;/p&gt;  &lt;p&gt;What’s nice is that rather than deleting the bad time bomb, Rulemanager will set its escalation data far into the future (in the year 2999). This allows us to still have access to the time bomb record so that we can troubleshoot the core issue.&lt;/p&gt;  &lt;h2&gt;Dovetail Rulemanager&lt;/h2&gt;  &lt;p&gt;Here’s an example from a &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/RuleManager"&gt;Dovetail Rulemanager&lt;/a&gt; log file showing an invalid time bomb:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;2012-11-01 14:58:20,400 [Producer] ERROR FChoice.RuleManager.ApplicationEventRepository - &lt;br /&gt;Application Event &lt;span class="kwrd"&gt;with&lt;/span&gt; ID 268444196 &lt;span class="kwrd"&gt;is&lt;/span&gt; invalid because it does &lt;span class="kwrd"&gt;not&lt;/span&gt; have a valid Focus &lt;span class="kwrd"&gt;Object&lt;/span&gt;: &lt;br /&gt;FocusTypeID: 5208, FocusTableName: communication, FocusID: 268435547
&lt;br /&gt;2012-11-01 14:58:20,408 [Producer] ERROR FChoice.RuleManager.ApplicationEventRepository - &lt;br /&gt;Invalid Application Event updated &lt;span class="kwrd"&gt;with&lt;/span&gt; future escalation &lt;span class="kwrd"&gt;time&lt;/span&gt;: &lt;br /&gt;ID: 268444196, Escalation &lt;span class="kwrd"&gt;Time&lt;/span&gt;: 1/1/2999 12:00:00 AM&lt;/pre&gt;
&lt;/blockquote&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;h2&gt;Clarify Rulemanager&lt;/h2&gt;

&lt;p&gt;Here’s an example from a Clarify/Amdocs Rulemanager log file showing an invalid time bomb:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;2012/10/22    12:15:43.980    Info Terse    1    0    ProcessJob JobID=216155882
2012/10/22    12:15:43.994    Info Verbose    2    0    &lt;br /&gt;Processing &lt;span class="kwrd"&gt;time&lt;/span&gt; bomb &lt;span class="kwrd"&gt;with&lt;/span&gt; id = 216155882 escalation &lt;span class="kwrd"&gt;time&lt;/span&gt; = 10/22/2012 12:15:41
2012/10/22    12:15:44.000    Critical    2    0    Erros ocurred &lt;span class="kwrd"&gt;while&lt;/span&gt; processing &lt;span class="kwrd"&gt;time&lt;/span&gt; bomb
2012/10/22    12:15:44.000    Critical    2    0     &lt;br /&gt;Reasons &lt;span class="kwrd"&gt;for&lt;/span&gt; error: &lt;span class="kwrd"&gt;Object&lt;/span&gt; &lt;span class="kwrd"&gt;of&lt;/span&gt; type communication &lt;span class="kwrd"&gt;and&lt;/span&gt; low oid 1d9fdf does &lt;span class="kwrd"&gt;not&lt;/span&gt; exist &lt;span class="kwrd"&gt;in&lt;/span&gt; the &lt;span class="kwrd"&gt;database&lt;/span&gt;.
2012/10/22    12:15:44.000    Critical    2    0    Information about &lt;span class="kwrd"&gt;time&lt;/span&gt; bomb
2012/10/22    12:15:44.000    Critical    2    0    &lt;br /&gt;Focus &lt;span class="kwrd"&gt;object&lt;/span&gt; type &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="str"&gt;'Communication'&lt;/span&gt;, Focus &lt;span class="kwrd"&gt;object&lt;/span&gt; objid &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="str"&gt;'1941471'&lt;/span&gt;, &lt;br /&gt;&lt;span class="kwrd"&gt;Time&lt;/span&gt; bomb type &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="str"&gt;'2'&lt;/span&gt;, &lt;span class="kwrd"&gt;Time&lt;/span&gt; bomb objid &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="str"&gt;'216155882'&lt;/span&gt;,
2012/10/22    12:15:44.002    Info Terse    2    0    Resetting &lt;span class="kwrd"&gt;time&lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; bad bomb &lt;span class="kwrd"&gt;to&lt;/span&gt; far &lt;span class="kwrd"&gt;in&lt;/span&gt; the future.
2012/10/22    12:15:44.002    Info Terse    2    0    Resetting bad bomb's escalate &lt;span class="kwrd"&gt;time&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt; the &lt;span class="kwrd"&gt;database&lt;/span&gt;.
2012/10/22    12:15:44.015    Info Terse    2    0    Removing bad bomb &lt;span class="kwrd"&gt;from&lt;/span&gt; &lt;span class="kwrd"&gt;time&lt;/span&gt; bomb queue.
2012/10/22    12:15:44.016    Info Terse    2    0    DONE processing bad &lt;span class="kwrd"&gt;time&lt;/span&gt; bomb.&lt;/pre&gt;
&lt;/blockquote&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;h2&gt;Reason&lt;/h2&gt;

&lt;p&gt;In both cases, the content of the problem is pretty clear. We have a time bomb that is for a Communication object that doesn’t exist. &lt;/p&gt;

&lt;p&gt;Which brings us to a my number 1 tip for debugging time bomb issues: &lt;em&gt;Enable Rulemanager logging at a verbose/debug level.&lt;/em&gt; This will give you lots of good information, and in many cases, the exact reason why the time bomb is bad.&lt;/p&gt;

&lt;h2&gt;View the time bomb record&lt;/h2&gt;

&lt;p&gt;Lets take a look at the time bomb record itself using SQL&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 &lt;/pre&gt;
&lt;/blockquote&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;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/image_2_0.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/image_thumb_0.png" width="1474" height="65" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Notice that the time_bomb record exists, and its escalate_time has been set to January 1, 2999. Since Rulemanager only processes time bombs whose escalate_date has past, we have over 900 years to troubleshoot this issue before Rulemanager picks it up. Plenty of time.&lt;/p&gt;

&lt;h2&gt;Time Bomb Details: Focus Type and Focus Lowid&lt;/h2&gt;

&lt;p&gt;The focus_type is the schema id of the kind of object that the event occurred on. Case = 0, Contact = 45, Communication = 5208. Etc.&lt;/p&gt;

&lt;p&gt;The focus_lowid is the objid of the object. &lt;/p&gt;

&lt;p&gt;Lets do some verification of that data.&lt;/p&gt;

&lt;p&gt;You can easily verify the focus_type using your schema file, or using &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/BOLT"&gt;BOLT&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/bolt_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="bolt" border="0" alt="bolt" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/bolt_thumb.png" width="644" height="198" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;OK, so we’ve verified that 5208 is a communication object.&amp;#160; Good.&lt;/p&gt;

&lt;p&gt;We can then use SQL to verify that the communication object exists:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; table_communication &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; focus_lowid &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 )&lt;/pre&gt;
&lt;/blockquote&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;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;This returns zero rows, so we’ve now confirmed what Rulemanager is telling us: &lt;/p&gt;

&lt;p&gt;&lt;span class="kwrd"&gt;Object&lt;/span&gt; &lt;span class="kwrd"&gt;of&lt;/span&gt; type communication &lt;span class="kwrd"&gt;and&lt;/span&gt; objid 268435547 does &lt;span class="kwrd"&gt;not&lt;/span&gt; exist &lt;span class="kwrd"&gt;in&lt;/span&gt; the &lt;span class="kwrd"&gt;database&lt;/span&gt;. &lt;/p&gt;

&lt;h2&gt;Time Bomb Details: employee&lt;/h2&gt;

&lt;p&gt;The cmit_creator2employee should be a valid objid of an employee record. &lt;/p&gt;

&lt;p&gt;Lets confirm that with SQL:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt;  &lt;span class="kwrd"&gt;from&lt;/span&gt; table_employee &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; cmit_creator2employee &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 )&lt;/pre&gt;
&lt;/blockquote&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;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;This returns one row, so that all looks good.&lt;/p&gt;

&lt;h2&gt;Time Bomb Details: time_period/act_entry&lt;/h2&gt;

&lt;p&gt;In most cases, the time_period will be a valid objid of an act_entry record. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I say most cases because it depends on the type of time_bomb (rule, non-rule, scheduling, etc.) But the majority of the time, you’ll be debugging rule scheduling time_bombs, so it will be the objid of an act_entry record. &lt;/p&gt;

  &lt;p&gt;Typically, Clarify will show these as Type 2 time bombs. As shown in the log file: &lt;em&gt;&lt;span class="kwrd"&gt;Time&lt;/span&gt; bomb type &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="str"&gt;'2'&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;and Dovetail will show them as Application Events. As shown in the log file: &lt;em&gt;ApplicationEventRepository - Application Event &lt;span class="kwrd"&gt;with&lt;/span&gt; ID 268444196&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lets confirm we have a valid act_entry with SQL:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; table_act_entry &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; time_period &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 )&lt;/pre&gt;
&lt;/blockquote&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;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;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;This returns one row, so that all looks good.&lt;/p&gt;

&lt;p&gt;We can also verify that the act_entry2user is filled in correctly:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; table_user &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; act_entry2user &lt;span class="kwrd"&gt;from&lt;/span&gt; table_act_entry &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; time_period &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 ))&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;This also returns one row, which tells us that the relation from act_entry to user is valid. &lt;/p&gt;

&lt;h2&gt;Time Bomb Details: flags&lt;/h2&gt;

&lt;p&gt;The flags represent the type of event that occurred. It should be a valid number.&lt;/p&gt;

&lt;p&gt;This one is a bit tricky to figure out. &lt;/p&gt;

&lt;p&gt;If it’s a user-defined event, then the flags is calculated as: flags = (&lt;i&gt;n&lt;/i&gt; * 65536) + 2&lt;/p&gt;

&lt;p&gt;where &lt;em&gt;n&lt;/em&gt; is the event ID of the entry that was added to the event list on form 472. &lt;/p&gt;

&lt;p&gt;So if your event was USER1001, then the flags should be 65601538.&lt;/p&gt;

&lt;p&gt;Or, to flip the equation, n = (flags – 2) / 65536&lt;/p&gt;

&lt;p&gt;These formulas work for &lt;em&gt;user-defined&lt;/em&gt; rule events. Baseline Clarify events don’t always follow this formula.&lt;/p&gt;

&lt;p&gt;This is covered in more detail in the &lt;a href="http://rulemanager.wikispaces.com/Training+and+Presentations"&gt;Advanced Business Rules (part 2)&lt;/a&gt; training presentation. &lt;/p&gt;

&lt;h2&gt;Back around to the initial problem at hand&lt;/h2&gt;

&lt;p&gt;What we now know:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The time_bomb is related to a valid act_entry &lt;/li&gt;

  &lt;li&gt;The time_bomb is related to a valid employee &lt;/li&gt;

  &lt;li&gt;The flags of the time_bomb appear to be correct &lt;/li&gt;

  &lt;li&gt;The act_entry is related to a valid user (and we know who that user is) &lt;/li&gt;

  &lt;li&gt;The activity (Create Communication) is valid for the type of object (communication) &lt;/li&gt;

  &lt;li&gt;The flags looks OK (it’s not zero) &lt;/li&gt;

  &lt;li&gt;The focus_type is valid (communication) &lt;/li&gt;

  &lt;li&gt;The focus_lowid is invalid (which confirms what Rulemanager logs told us) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;So, why do we have a time_bomb and an act_entry for a communication object that doesn’t exist?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Lets take a closer look at the act_entry.&lt;/h2&gt;

&lt;p&gt;Lets look at the additional info of the act_entry:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; addnl_info &lt;span class="kwrd"&gt;from&lt;/span&gt; table_act_entry &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; time_period &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 )&lt;/pre&gt;
&lt;/blockquote&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;The additional info of the act_entry is: &lt;em&gt;Communication created for : fred&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next, lets look at the activity name for this act_entry. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; title &lt;span class="kwrd"&gt;from&lt;/span&gt; table_gbst_elm, table_gbst_lst &lt;span class="kwrd"&gt;where&lt;/span&gt; rank = (
&lt;span class="kwrd"&gt;select&lt;/span&gt; act_code &lt;span class="kwrd"&gt;from&lt;/span&gt; table_act_entry &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 
(&lt;span class="kwrd"&gt;select&lt;/span&gt; time_period &lt;span class="kwrd"&gt;from&lt;/span&gt; table_time_bomb &lt;span class="kwrd"&gt;where&lt;/span&gt; objid = 268444196 ))
&lt;span class="kwrd"&gt;and&lt;/span&gt; gbst_elm2gbst_lst = table_gbst_lst.objid
&lt;span class="kwrd"&gt;and&lt;/span&gt; table_gbst_lst.title = &lt;span class="str"&gt;'Activity Name'&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&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;This returns: &lt;em&gt;Create Communication&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;now we know that the activity that did this whole shebang was creating a communication&lt;/strong&gt;. The additional info confirms this.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So, why do we have a time_bomb and an act_entry for creating a communication object, but the communication object doesn’t exist?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;A couple options from here&lt;/h2&gt;

&lt;p&gt;1. We know &lt;em&gt;who&lt;/em&gt; did this activity (as the act_entry is related to a valid user), so we can talk to that person, and see if they might provide some insight as to what they did.&lt;/p&gt;

&lt;p&gt;2. Use our knowledge, and some experimenting, and see if we can replicate it.&lt;/p&gt;

&lt;p&gt;I went with option #2. My initial thought was that the communication object was created, and then it was deleted somehow. Typically, you don’t delete things in Clarify. But, I started playing around with the Clarify client app, and figured out that I could actually delete a communication object. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/dialogue_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="dialogue" border="0" alt="dialogue" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/dialogue_thumb.png" width="704" height="470" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Test&lt;/h2&gt;

&lt;p&gt;So, I then setup my test:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Stop Rulemanager &lt;/li&gt;

  &lt;li&gt;Create a communication and save it as a draft. &lt;/li&gt;

  &lt;li&gt;Confirm that a Create Communication activity entry and time bomb were created &lt;/li&gt;

  &lt;li&gt;Delete the communication using the &lt;em&gt;Delete Draft&lt;/em&gt; button &lt;/li&gt;

  &lt;li&gt;Confirm that the communication row has been deleted from the database &lt;/li&gt;

  &lt;li&gt;Confirm that the act_entry and time_bomb records still exist in the database &lt;/li&gt;

  &lt;li&gt;Start Rulemanager &lt;/li&gt;

  &lt;li&gt;Observe Rulemanager logs – confirm that the original error occurs &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And my test proved true! We’ve now reproduced the issue.&lt;/p&gt;

&lt;h2&gt;Final Step – fix the core issue&lt;/h2&gt;

&lt;p&gt;So now that we can reproduce the issue, our task is to fix the core issue. &lt;/p&gt;

&lt;p&gt;In this particular case, it’s really a bug in the Clarify Classic Client. IMO, if you delete an object, you should delete its related records as well. &lt;/p&gt;

&lt;p&gt;So if you delete a communication object, you should delete its related time_bomb records. ‘Cause if you don’t, you have problems (as we’re seeing here).&lt;/p&gt;

&lt;p&gt;We can do this with a bit of ClearBasic code added to the &lt;em&gt;Delete Draft&lt;/em&gt; button. Sample code is on github: &lt;a title="https://gist.github.com/3987865" href="https://gist.github.com/3987865"&gt;https://gist.github.com/3987865&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Other examples&lt;/h2&gt;

&lt;p&gt;Here’s a few other examples that I’ve seen over the years that cause Rulemanager to report errors&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Invalid &lt;a href="http://rulemanager.wikispaces.com/Rules+and+Rule+Properties"&gt;Rule Properties&lt;/a&gt;. Such as paths that are invalid. &lt;/li&gt;

  &lt;li&gt;Invalid focus_type. Such as leaving the focus_type as zero (which means Case) when it should be for a different object (such as 192 for Bug/Change Request) &lt;/li&gt;

  &lt;li&gt;Business rule that calls a command line script/executable but that script/executable doesn’t exist. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Make sure you know when errors occur&lt;/h2&gt;

&lt;p&gt;When Rulemanager, for whatever reason, cannot handle a timebomb it changes the escalation time to be far into the future (January 1, 2999) Application administrators may be interested to know when this happens.&lt;/p&gt;

&lt;p&gt;Typically, these errors just end up in log files. Rulemanager can be configured to notify someone (such as an administrator) when a time bomb cannot be processed.&lt;/p&gt;

&lt;p&gt;Here’s how to set that up.&lt;/p&gt;

&lt;h3&gt;Dovetail Rulemanager: &lt;/h3&gt;

&lt;p&gt;&lt;a title="http://support.dovetailsoftware.com/selfservice/solutions/show/380" href="http://support.dovetailsoftware.com/selfservice/solutions/show/380"&gt;http://support.dovetailsoftware.com/selfservice/solutions/show/380&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Clarify Rulemanager on Windows: &lt;/h3&gt;

&lt;p&gt;Using the Configure Clarify Services application (SvcConfig.exe), set the Notify in Case of&amp;#160; Problem to a list of email addresses, to which an email message is forwarded if problems 
  &lt;br /&gt;occur.&lt;/p&gt;

&lt;h3&gt;Clarify Rulemanager on UNIX:&lt;/h3&gt;

&lt;p&gt;In the rulemansvc.env file, set the NOTIFY_LIST to a list of email addresses, separated by semicolons, to which an email message is forwarded if problems occur.&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;Unfortunately, almost every bad time_bomb issue will be slightly different. What’s more important here is the approach, as opposed to the specifics.&lt;/p&gt;

&lt;p&gt;Start with the Rulemanager log files! Normally they provide good information that will put you on the right path. Make sure you’re running at the highest log level (Verbose / Debug).&lt;/p&gt;

&lt;p&gt;Investigate each of the important fields of the time_bomb record, including its relations.&lt;/p&gt;

&lt;p&gt;Investigate the related act_entry, and its related user and related activity code.&lt;/p&gt;

&lt;p&gt;If this is a custom (user-defined) time_bomb, review your code that is creating these. It’s not uncommon for developers to create time_bombs that are invalid (because it can be tricky).&lt;/p&gt;

&lt;p&gt;Finally, rely on your &lt;a href="http://www.dovetailsoftware.com/clarify-help-desk-program"&gt;application support provider&lt;/a&gt;. That’s what you pay yearly maintenance fees for. &lt;/p&gt;

&lt;p&gt;Oh, and as I mentioned earlier, the &lt;a href="http://rulemanager.wikispaces.com/"&gt;Rulemanager Companion Wiki&lt;/a&gt; is a great resource for all things related to Rulemanager and Business Rules.&lt;/p&gt;

&lt;p&gt;Hope this helps.&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=CbM5Ff3VNdY:Rb4YlbgxGIE: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=CbM5Ff3VNdY:Rb4YlbgxGIE: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/CbM5Ff3VNdY" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/11/01/troubleshooting-bad-time-bombs#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/business-rules-1">business rules</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-6">Clarify 6</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-classic-client-0">Clarify Classic Client</category>
 <category domain="http://www.dovetailsoftware.com/tags/rulemanager-2">rulemanager</category>
 <category domain="http://www.dovetailsoftware.com/tags/time-bomb">Time Bomb</category>
 <pubDate>Thu, 01 Nov 2012 22:39:47 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1939 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/11/01/troubleshooting-bad-time-bombs</feedburner:origLink></item>
<item>
 <title>SchemaEditor and OneToOne relations : clearing up a bit of ambiguity</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/87wjr-hgEGo/schemaeditor-and-onetoone-relations-clearing-up-a-bit-of-ambiguity</link>
 <description>&lt;p&gt;Using &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/SchemaEditor"&gt;Dovetail SchemaEditor&lt;/a&gt; to add a new relation to your schema is super easy.&lt;/p&gt;  &lt;p&gt;For example, here’s my schema script for adding a new one-to-one relation between the modem table and the user table:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.dovetailsoftware.com/2006/10/SchemaScript.xsd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addRelation&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modem2user&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OneToOne&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modem&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;inverseRelationName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;user2modem&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;inverseTable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;user&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;What’s nice is that I only have to define the relation once in the schema file, as opposed to other tools (ddcomp, DD Editor, SchemaManager) where I would have to add the relation to the file in two places (as a relation under both the modem table and as a relation under the user table).&lt;/p&gt;

&lt;p&gt;But, there is a bit of ambiguity here – &lt;strong&gt;which side is the primary side (OTOP) and which side is the foreign side (OTOF)?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Answer&lt;/h2&gt;

&lt;p&gt;The foreign side will be on the &lt;em&gt;table/name&lt;/em&gt;, and the primary side will be &lt;em&gt;inverseTable/inverseRelationName&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;So in the example above, the modem2user is the OTOF, and user2modem is OTOP. &lt;/p&gt;

&lt;p&gt;This means that the physical column will be created on the primary side. In the example, the user table will get a column named user2modem, while no changes will be made to the modem table.&lt;/p&gt;

&lt;h2&gt;Schema Meta-data (ADP Tables)&lt;/h2&gt;

&lt;p&gt;Here’s what it looks like in BOLT (which reads it from the ADP tables):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/modem_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="modem" border="0" alt="modem" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/modem_thumb_1.png" width="848" height="772" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Notice that &lt;em&gt;modem2user&lt;/em&gt; is the &lt;em&gt;OTOF&lt;/em&gt; side of the relation. &lt;/p&gt;



&lt;h2&gt;Physical Tables&lt;/h2&gt;

&lt;p&gt;We can see that there’s now an actual &lt;em&gt;user2modem&lt;/em&gt; column on the user table:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/user_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="user_columns" border="0" alt="user_columns" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/user_columns_thumb.png" width="848" height="772" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;And that the modem table did not get any new columns:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/modem_columns_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="modem_columns" border="0" alt="modem_columns" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/modem_columns_thumb_1.png" width="837" height="511" /&gt;&lt;/a&gt; 

  &lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Other way ‘round&lt;/h2&gt;

&lt;p&gt;If you want to have the relation go the other way, i.e. you want the physical column to exist on the modem table, then simply sway how you define the relation, like so:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.dovetailsoftware.com/2006/10/SchemaScript.xsd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;addRelation&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;user2modem&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OneToOne&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;user&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;inverseRelationName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modem2user&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;inverseTable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modem&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;schemaScript&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;Hopefully this clears up any ambiguity about OneToOne relations using SchemaEditor. We’ll also be updating the SchemaEditor docs with this information as well.&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=87wjr-hgEGo:a7zzxk7tmpo: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=87wjr-hgEGo:a7zzxk7tmpo: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/87wjr-hgEGo" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/10/22/schemaeditor-and-onetoone-relations-clearing-up-a-bit-of-ambiguity#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-3">Clarify</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</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>Mon, 22 Oct 2012 16:27:30 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1936 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/10/22/schemaeditor-and-onetoone-relations-clearing-up-a-bit-of-ambiguity</feedburner:origLink></item>
<item>
 <title>File Uploads in Safari for iOS6 – useful in Dovetail Mobile</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/FUYTB2U2s-4/file-uploads-in-safari-for-ios6-%E2%80%93-useful-in-dovetail-mobile</link>
 <description>&lt;p&gt;Finally! Safari for iOS6 supports file uploads. Which means we can upload image or video files as attachments in &lt;a href="http://support.dovetailsoftware.com/selfservice/products/show/Dovetail%20Mobile%20Agent"&gt;Dovetail Mobile&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dovetailsoftware.com/sites/default/files/gsherman/file_upload.png"&gt;&lt;img class="mceItem" style="display: inline; border-width: 0px;" title="file_upload" src="http://www.dovetailsoftware.com/sites/default/files/gsherman/file_upload_thumb.png" border="0" alt="file_upload" width="274" height="484"&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;sweet!&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=FUYTB2U2s-4:2C71H_v6CxI: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=FUYTB2U2s-4:2C71H_v6CxI: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/FUYTB2U2s-4" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/10/04/file-uploads-in-safari-for-ios6-%E2%80%93-useful-in-dovetail-mobile#comments</comments>
 <pubDate>Thu, 04 Oct 2012 19:08:37 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1925 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/10/04/file-uploads-in-safari-for-ios6-%E2%80%93-useful-in-dovetail-mobile</feedburner:origLink></item>
<item>
 <title>Custom Events in Clarify/Dovetail: Change Priority</title>
 <link>http://feedproxy.google.com/~r/GarySherman/~3/aVeXe7Em6fo/custom-events-in-clarifydovetail-change-priority</link>
 <description>&lt;p&gt;I’ve talked in the past about how to create custom events in Clarify/Dovetail, and how to fire business rules based on these events.&lt;/p&gt;  &lt;p&gt;In short, code needs to be written that creates a custom activity log and time bomb. &lt;/p&gt;  &lt;p&gt;A recent webinar covered details on how to do this: &lt;a href="http://www.slideshare.net/gsherman/advanced-business-rules-part2"&gt;http://www.slideshare.net/gsherman/advanced-business-rules-part2&lt;/a&gt; (starting on slide #18) &lt;/p&gt;  &lt;p&gt;For additional info, take a look at the &amp;quot;User-defined Business Rule Events.doc&amp;quot; available on the Rulemanager wiki: &lt;a href="http://rulemanager.wikispaces.com/How-To"&gt;http://rulemanager.wikispaces.com/How-To&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you also want to create a custom act_entry record, you'll probably want a custom activity code. Here's an example: &lt;a href="https://gist.github.com/1042796"&gt;https://gist.github.com/1042796&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Change Priority&lt;/h2&gt;  &lt;p&gt;One of our customers recently wanted to do something similar, but for Change Priority of a case. They wanted to be able to fire a business rule when the priority of a case changes. They needed this to work in both Dovetail Agent and the Clarify Classic Client.&lt;/p&gt;  &lt;p&gt;Following the guidance I listed above, he got it all working, and was gracious enough to share his code.&lt;/p&gt;  &lt;p&gt;The code is all available on Github:&amp;#160; &lt;a href="https://gist.github.com/3691225"&gt;https://gist.github.com/3691225&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thanks for sharing Ken!&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=aVeXe7Em6fo:P7JdZU4k5k8: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=aVeXe7Em6fo:P7JdZU4k5k8: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/aVeXe7Em6fo" height="1" width="1"/&gt;</description>
 <comments>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/09/13/custom-events-in-clarifydovetail-change-priority#comments</comments>
 <category domain="http://www.dovetailsoftware.com/tags/business-rules-1">business rules</category>
 <category domain="http://www.dovetailsoftware.com/tags/clarify-amdocs">clarify amdocs</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/rulemanager-2">rulemanager</category>
 <pubDate>Thu, 13 Sep 2012 14:37:18 +0000</pubDate>
 <dc:creator>gsherman</dc:creator>
 <guid isPermaLink="false">1906 at http://www.dovetailsoftware.com</guid>
<feedburner:origLink>http://www.dovetailsoftware.com/blogs/gsherman/archive/2012/09/13/custom-events-in-clarifydovetail-change-priority</feedburner:origLink></item>
</channel>
</rss>
