<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Richard Knudson&#039;s Dynamics CRM Trick Bag</title>
	<atom:link href="http://www.dynamicscrmtrickbag.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dynamicscrmtrickbag.com</link>
	<description>Building business value on Dynamics CRM</description>
	<lastBuildDate>Thu, 02 Sep 2010 13:18:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Many-to-Many Relationships the Old-Fashioned Way</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/09/02/many-to-many-relationships-manual/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/09/02/many-to-many-relationships-manual/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 13:11:56 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Customization]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/?p=2849</guid>
		<description><![CDATA[September 2, 2010 - Sometimes, old-fashioned is the way to go. This is often the case when it comes to many-to-many (or "N:N") relationships in Dynamics CRM. I've had a few questions lately about this, so I wrote up a summary that compares the two main approaches for doing this, and recorded a video on how to create old-fashioned ("manual") N:N's. Enjoy!]]></description>
			<content:encoded><![CDATA[<h2>Sometimes, Old-Fashioned is Best</h2>
<p>I&#8217;ve written a few times about many-to-many (&#8221;N-N&#8221; for short) relationships in Dynamics CRM. These come up all the time in business situations, for example, here are four:</p>
<ol>
<li>A person might be a director on many boards, and each board of directors can have many members.</li>
<li>An even might have many attendees, and any particular contact might attend multiple events.</li>
<li>Your firm might have many different product lines you&#8217;d like to market to accounts or contacts, and you might want to flag each potential customer to receive marketing materials about one or more of those product lines.</li>
<li>A church may have many parishioners, but any particular parishioner might hedge his bets a little and join a few different churches just in case.</li>
</ol>
<p>OK, enough already &#8212; you get the point.</p>
<p>There are two basic ways to model things like this in Dynamics CRM:</p>
<ul>
<li>Dynamics CRM 4 introduced a so-called &#8220;<strong>native&#8221; N:N relationship</strong>, where you simply add a custom N:N relationship between two entities directly. This is simple, it doesn&#8217;t matter which side of the N:N you create the relationship from, and I&#8217;ve covered it pretty thoroughly in <a href="http://www.dynamicscrmtrickbag.com/2008/09/01/entity-relationships-in-dynamics-crm-4/" target="_self">articles like this one</a>.</li>
<li>After a few recent questions from Trick Bag readers, it occurred to me that I&#8217;d somewhat neglected the alternative approach, the so-called &#8220;manual N:N&#8221;, which I refer to as old-fashioned since it&#8217;s been around forever or at least since Dynamics CRM 3.0 came out. Here&#8217;s some guidance on what to use when, and a video I recorded on the good old-fashioned manual approach.</li>
</ul>
<h2>Many-to-Many Relationships: Native or Manual?</h2>
<p>Like I said, native N:N&#8217;s are easy, but there are a couple of problems with them:</p>
<ul>
<li>When you associate two records using this approach, there&#8217;s no form to fill out &#8212; you just make a direct relationship between the two records. For example, if you had a custom &#8220;Board of Directors&#8221; entity with a native N:N to the contact entity, you could open the form for a board, click &#8220;Contacts&#8221; in the details section, and click Add Existing Contact.</li>
<li>What this means is that apart from the association between the two records, there&#8217;s no additional information. For example, you couldn&#8217;t track a board member&#8217;s specific position, the duration of their term and so forth.</li>
</ul>
<p>In fact, both of those points are symptoms of the same underlying problem: native N:N relationships don&#8217;t have a <em>junction</em>, or <em>intersection</em> entity to join them &#8212; all they have is the <em>relationship itself</em>. In addition to not being able to track any information <em>about</em> the relationship, this also means for example that you wouldn&#8217;t be able to import records: since there&#8217;s no intersection record, there&#8217;s nothing to import. It makes reporting problematic as well, since all you have to work with is the N:N relationship&#8230;and again, no additional information about the relationship.</p>
<p>The manual approach solves these problems, and it really isn&#8217;t much more complicated, apart from requiring the creation of the intersection entity. What you do is create custom 1:N relationships <em>from</em> the entities on each side of the N:N you need, <em>to</em> the intersection entity, and place the lookup fields on the intersection entity&#8217;s form.</p>
<p>Referring back to examples 1-4 above, here&#8217;s how I would do it in each case:</p>
<ol>
<li><strong>Manual</strong>. After creating the custom entity for &#8220;Boards&#8221;, create one for &#8220;Board Memberships&#8221;. Create 1:Ns from Contact to Board Membership and from Board to Board Membership. Give Board Membership attributes like &#8220;Term Duration&#8221;, &#8220;Member Type&#8221; and so forth.</li>
<li><strong>Manual</strong>. Two custom entities: Event and Registration. 1:Ns from Contact to Registration and from Event to Registration. Registration has attributes like &#8220;Status&#8221; (use Status Reason maybe), &#8220;Registration Fee&#8221;, &#8220;Special Dietary Preferences&#8221; and the like.</li>
<li><strong>Native</strong>. This one I&#8217;d do with the native approach. If all I care about is whether an account should receive marketing materials for specific business lines, it&#8217;s probably not necessary to track anything else about the &#8220;status&#8221; of their interest in those lines!</li>
<li><strong>Manual</strong>, definitely. 1:N from Contact to Affiliation (custom), 1:N from Church (custom) to Affiliation. Affiliation has fields like &#8220;Commitment Level&#8221;, possibly &#8220;Start&#8221; and &#8220;Stop&#8221; date fields and so forth.</li>
</ol>
<p>Here&#8217;s a video that illustrates how to create the manual variety of many-to-many relationsnhips:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Ad82SxU0QDA?fs=1&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/Ad82SxU0QDA?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/09/02/many-to-many-relationships-manual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRM 4 Workflow Timeouts: How-To</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/08/25/crm-4-workflow-timeouts-how-to/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/08/25/crm-4-workflow-timeouts-how-to/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 01:22:38 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Dynamics CRM Workflows]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/?p=2840</guid>
		<description><![CDATA[August 25, 2010 -- If you have a business process that needs to stop, wait for time to pass, and then do something when a date milestone is reached, there's only one way to do it: with the Timeout function. Unfortunately, it's a little hard to find, which is probably why this is one of the most frequently asked questions I get about workflows. Here's a video that demonstrates how to do it.]]></description>
			<content:encoded><![CDATA[<p>Sometimes you need a process to stop, wait for the clock to tick, and finally take some action when the system time reaches a milestone relative to a field on a record. A few examples:</p>
<ul>
<li>An opportunity goes past its estimated close date and it&#8217;s still open.</li>
<li>A case doesn&#8217;t get resolved.</li>
<li>A subscription gets close to its expiration date.</li>
</ul>
<p>In scenarios like these, what you need is a special workflow function, <em>Timeout</em>. This is one of those functions that performs an important function <em>precisely</em> as it&#8217;s intended to, does it well&#8230;and is unfortunately well-hidden. Trick Bag reader Dina Loukota prompted me to record a how-to video on this useful function, and here it is:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/M1-zSL792KU&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/M1-zSL792KU&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/08/25/crm-4-workflow-timeouts-how-to/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>High Noon for Salesforce and Dynamics CRM</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/08/25/high-noon-for-salesforce-and-dynamics-crm/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/08/25/high-noon-for-salesforce-and-dynamics-crm/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 12:31:57 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[CRM 2011]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/08/25/high-noon-for-salesforce-and-dynamics-crm/</guid>
		<description><![CDATA[August 25, 2010 -- Will the Upcoming Dynamics CRM 2011 Beta Challenge Salesforce? Did Duane Allman  play a mean slide guitar?]]></description>
			<content:encoded><![CDATA[<p>If you search Google or Bing for &#8220;Dynamics CRM 2011&#8243;, two of the top ten results are for different articles with the exact same title, <em>Will the Upcoming Dynamics CRM 2011 Beta Challenge Salesforce?</em></p>
<p>It turns out that <a href="http://forcemonkey.blogspot.com/2010/07/will-upcoming-dynamics-crm-2011-beta.html">this one</a>, written by Salesforce blogger JP Seabury (a.k.a. <a href="http://forcemonkey.blogspot.com/"><em>Forcemonkey</em></a>) is a rejoinder to <a href="http://www.cmswire.com/cms/web-engagement/will-the-upcoming-dynamics-crm-2011-beta-challenge-salesforce-008027.php">this one</a>, authored by David Roe on the <a href="http://www.cmswire.com/">CMSWire blog</a>. It&#8217;s an interesting exchange and you should read them both. But in the event you&#8217;re too busy, here&#8217;s my summary of and take on the discussion.</p>
<p>David Roe&#8217;s article is a good, concise summary of what we can expect to see in the upcoming upgrade of Dynamics CRM. And apart from the title and this comment – &#8220;<em>the new release due for public beta in September looks set to challenge Salesforce.com&#8217;s (<a href="http://www.cmswire.com/news/topic/salesforce.com">news</a>, <a href="http://www.salesforce.com">site</a>) dominance in this space</em>&#8221; – it&#8217;s hard to find another mention of Salesforce in the article.</p>
<p>Forcemonkey&#8217;s rejoinder is based on a rant from a Salesforce LinkedIn group. He starts with an extended quote from it, from which this is a typical comment:</p>
<p style="margin-left: 36pt"><em>I have a hard time believing MS will be able to challenge salesforce.com. The inherent difference that I see is Microsoft is still too concerned with maintaining control of the CRM through IT Departments and IT consultants…</em><span style="color:#333333; font-family:Arial; font-size:11pt"><br />
</span><em>The reason so many business users/departments now pay for their salesforce.com licenses and the support staff is that they want to quickly respond to changing business climate. They do not want to go through 2-4 weeks of CABs, written requests, funding allocation and final review while waiting to have the dropdown choices in one field change.<br />
</em></p>
<p>After declaring those and similar comments &#8220;spot on&#8221;, Forcemonkey adds his own comments, what I think he intended as some fair-and-balanced ones about how competition is good, Microsoft Office is a good product, and although there are signs Microsoft &#8220;gets it&#8221;, he concludes with &#8220;<em>Can they do it? Not soon enough.</em>&#8221;</p>
<p>At the risk of sounding like a geezer, Salesforce and its partisans ignore history at their own risk. At various points in the last fifteen years, you could have substituted &#8220;Sybase&#8221;, &#8220;Lotus 123&#8243;, or &#8220;Netscape&#8221; for &#8220;Salesforce&#8221;; and &#8220;SQL Server&#8221;, &#8220;Excel&#8221;, or &#8220;IE&#8221; for &#8220;Dynamics CRM&#8221; and made the same argument.</p>
<p><em>Will Dynamics CRM 2011 Challenge salesforce.com</em>? Are you kidding me? Dynamics CRM 2011 will definitely absolutely challenge Salesforce. In fact it already is and has been for some time. Here&#8217;s an <a href="http://www.dynamicscrmtrickbag.com/2009/08/18/gartner-2008/">article I wrote a year ago</a> summarizing Gartner&#8217;s CRM market share report analyzing changes <em>from 2007 to 2008</em>. I make the point in the article that market share studies should be taken with a grain of salt, but clearly the 4.0 release built momentum for Dynamics CRM. To me, the most important message from the Gartner study is that precisely two CRMs are gaining share from all the others. <strong>Over the next couple years, the CRM market will be a two-horse race.</strong></p>
<p><strong>Salesforce is a great product, no question about it.</strong> But like a lot of great products that carved out an early leadership position in a new market, it&#8217;s got vulnerabilities. In the past six months I&#8217;ve been involved in three CRM Online rollouts for clients, each of which started with a migration <em>from</em> Salesforce <em>to</em> Dynamics CRM. In each case the primary reason was price; customers telling they couldn&#8217;t justify paying Salesforce three or more times as much for functionality they could get from CRM Online. (The <a href="http://www.salesforce.com/crm/editions-pricing.jsp">Salesforce pricing model</a> is complicated. Microsoft&#8217;s is simple and I don&#8217;t need to link to a pricing page to tell you it&#8217;s $44/user per month.)</p>
<p>In fairness, <strong>Dynamics CRM currently comes up short in some important functional areas</strong>. For example, reports and analytics in the Salesforce professional edition are better than anything Dynamics CRM has out of the box. For some customers, features like that may even have justified the price delta. <strong>But that&#8217;s what upgrades are for</strong>, and from what we&#8217;ve seen so far, the next release of Dynamics CRM will address the most important feature gaps (e.g., dashboards), continue to build on the momentum of the xRM platform, and – I hope! – continue to be sold at the same simple pricing model.</p>
<p>And by the way, I&#8217;ll admit that I don&#8217;t really understand the quote I included above about Microsoft being &#8220;…<em>still too concerned with maintaining control of the CRM through IT Departments and IT consultants…</em>&#8220;, but partly I take it as a left-handed compliment, acknowledging Microsoft&#8217;s success in leveraging its enterprise relationships in selling Dynamics CRM through IT. Personally, I like IT departments, and I don&#8217;t think I know any – at least, not any that are rolling out Dynamics CRM – with a 4-week process required for a picklist option change. In this context, the IT departments I know like the same things about CRM that <em>business users/departments</em> do: It&#8217;s a good value and a great platform for quickly developing custom apps. Plus, unlike the competition, it gives you a choice in deployment models.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/08/25/high-noon-for-salesforce-and-dynamics-crm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top Industry Solutions for Dynamics CRM</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/08/22/top-20-dynamics-crm-industry-solutions/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/08/22/top-20-dynamics-crm-industry-solutions/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 21:43:38 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[CRM Add-Ons]]></category>
		<category><![CDATA[News You Can Use]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/08/22/top-20-dynamics-crm-industry-solutions/</guid>
		<description><![CDATA[August 22, 2010 - Lauren Carlson wrote an article recently that I liked a lot and recommend, "Dynamics CRM Industry Solutions: Our 20 Favorites". Check it out and let me know what you think. What's your favorite vertical?  ]]></description>
			<content:encoded><![CDATA[<p><span style="color:#4f81bd; font-size:12pt"><em>What&#8217;s Your Vertical?</em><br />
</span></p>
<p>I love lists. Rolling Stone&#8217;s list of the Beatles Top 100 songs, baseball statistics like the <a href="http://www.baseball-almanac.com/himenu.shtml">Top 100 Hitting Charts</a>, <a href="http://www.dynamicscrmtrickbag.com/2010/05/23/javascript-snippets-1/">Bridget&#8217;s list of things to know</a>, biggest cities, <a href="http://listverse.com/2010/08/12/10-us-towns-named-after-elements/">top 10 towns named after elements</a>,<a href="http://listverse.com/"> lists of lists</a> (those would be meta-lists, I believe)&#8230;they&#8217;re just so much fun to read, memorize, forget, and use as fodder for cocktail party conversation.</p>
<p><em>Building</em> lists, on the other hand, can be a lot of work. So I&#8217;m always grateful when somebody else takes the time to create a good one. And better yet when it&#8217;s about a CRM topic. For example, Lauren Carlson of the <a href="http://www.softwareadvice.com/crm/" target="_blank">Software Advice</a> Blog recently published an excellent article containing a list, <a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/"><span style="font-family:Verdana; font-size:10pt"><em>Microsoft Dynamics CRM Industry Solutions: Our  Favorites</em></span></a><span style="color:black; font-family:Verdana; font-size:10pt"><br />
</span></p>
<p>I provide a summary version next, but you should read <a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Lauren&#8217;s article</a>. She actually <em>researched</em> the industries, surveyed CRM ISVs to find out who had developed CRM add-ons for each vertical, and wrote excellent summaries of the ones she included.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup span="1">
<col style="width: 192px;" span="1"></col>
<col style="width: 114px;" span="1"></col>
<col style="width: 372px;" span="1"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Industry</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Vendor</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Application</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">1. Advertising</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">InterDyn</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">DynamicsADvantage</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">2. Agriculture</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Atrio Systems</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">CRM for Livestock</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">3. Automotive</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Quorum</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Exellerator auto dealer management system</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">4.Construction</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">KMS</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Project-CRM 4.0 for the construction industry</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">5. Distribution</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Infosys</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">CRM Wholesale Distribution System</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">6. Financial Services</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Galeforce</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Microsoft CRM for Financial Services</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">7. Healthcare</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">ePartners MD</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Dynamics CRM for Healthcare</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">8. Hospitality/Travel</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">IQubz</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Hospitality CRM</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">9. Insurance</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">VUE Software</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">IncentivePoint for insurance companies</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">10. Legal</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Client Profiles</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">CRM4Legal</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">11. Non-Profit</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Axem</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Vital DB CRM solution</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">12. Pharma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">ePartners</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">contact management and call center support</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">13. Public Sector</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Eskel Porter</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Public Records Tracker</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">14. Real Estate</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Ascendix</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">Real Estate Advantage</a></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">15. Retail</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Nodus Technologies</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><a href="http://www.softwareadvice.com/articles/crm/microsoft-dynamics-crm-industry-solutions-our-20-favorites-1082010/">CRM Charge for retail organizations</a></td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p>If you or your firm provides services around Dynamics CRM, you&#8217;re probably aware that Microsoft&#8217;s current big push is to &#8220;verticalize&#8221; its partner community. Lauren&#8217;s research is timely in this regard. At the risk of sounding like a cheesy Convergence pickup line, <em>what&#8217;s your vertical</em>?</p>
<p>Personally, my verticalization is still a work in progress. I want to service a vertical that is fast-growing, enjoys high margins, has not yet widely adopted CRM, and in which there is very little competition. I&#8217;m conducting an exhaustive search and I haven&#8217;t yet found just the right one. If you&#8217;ve already found the perfect vertical and want to share it with me, I promise I won&#8217;t tell anybody else. In the meantime, if you&#8217;re still searching like I am, here&#8217;s my own personally compiled meta-list of my favorite top 5 articles containing lists of the fastest growing industries:</p>
<ul>
<li>Kelly Services, <a href="http://www.kellyservices.us/web/us/services/en/pages/careertips_march2010_fastest_growing_industries.html"><em>Top 25 Fastest Growing Industries for 2010 to 2011</em></a></li>
<li>Career OneStop, <a href="http://www.acinet.org/indview1.asp?nodeid=45">Top 50 Fastest Growing Industries</a></li>
<li>Daily Finance, <a href="http://www.dailyfinance.com/story/investing/nine-for-the-10s-fast-growing-industries-for-the-next-decade/19299228/">Nine for the &#8217;10s: Fast-Growing Industries for the Next Decade</a></li>
<li>Bureau of Labor Statistics, <a href="http://www.bls.gov/emp/ep_table_203.htm">Fastest Growing…and Fastest Declining</a></li>
<li>Fortune Magazine, <a href="http://money.cnn.com/magazines/fortune/fortune500/2009/performers/industries/fastgrowers/">Top 52 Fastest Growing Industries (Profits)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/08/22/top-20-dynamics-crm-industry-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamics CRM 2011: The “Wait or Build” Decision</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/08/06/crm2011-waitorbuild/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/08/06/crm2011-waitorbuild/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 18:52:01 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[CRM 2011]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/08/06/dynamics-crm-2011-the-%e2%80%9cwait-or-build%e2%80%9d-decision/</guid>
		<description><![CDATA[August 6, 2010 - For the next few months, those of us who build on the CRM platform will have what I think of as the “wait or build” decision: If you need to do something that’s going to be significantly easier in CRM 2011, do you wait a few more months until you can get it (more or less) out of the box? Or do you swallow hard and build it now? Based on what I've seen so far, here are a few of my recommendations for the "wait" category.]]></description>
			<content:encoded><![CDATA[<p>How would you describe your feelings about an impending upgrade for an application you use a lot and depend on?</p>
<ul style="A">
<li>A. a necessary evil</li>
<li>B. more exciting than Christmas</li>
<li>C. somewhere in between</li>
</ul>
<p>Based on traffic and on the responses I&#8217;ve received since posting <a title="Taking the Covers off CRM 2011" href="http://www.dynamicscrmtrickbag.com/2010/07/25/taking-the-covers-off-crm-2011/"><span style="color: blue; text-decoration: underline;"><em>Taking the Covers off Dynamics CRM 2011</em></span></a>, my guess is a lot of users and customizers of Dynamics CRM lean towards &#8220;B&#8221;. That&#8217;s not surprising to me: when you use an application as a solution platform, new features can have a huge impact, saving you hours of development time or allowing you to build solutions that simply weren&#8217;t possible with the previous version.</p>
<p>For the next few months, those of us who build on the CRM platform will have what I think of as the <strong>&#8220;wait or build&#8221;</strong> decision: If you need to do something that&#8217;s going to be significantly easier in CRM 2011, do you wait a few more months until you can get it (more or less) out of the box? Or do you swallow hard and build it now?</p>
<p>Based on what we can see in the video linked to in the article, here are a few of my recommendations for the &#8220;might wanna wait&#8221; category:</p>
<p> </p>
<ul>
<li>
<div><strong>Need dashboards, KPIs, visualization?</strong>  If you&#8217;re using CRM Online you&#8217;ve already got a<a title="crm dashboards" href="http://www.dynamicscrmtrickbag.com/2009/11/13/nov_su_chartdesigner/" target="_self"> sneak preview of what dashboards can <em>look</em> like in CRM</a>. The problem with the current CRM Online implementation is that they&#8217;re implemented as &#8220;personalizations&#8221;: every individual user must configure his or her own dashboards, and there&#8217;s no way to centrally build and deploy dashboards for users. In my experience, the people with the skills to <em>build</em> dashboards are generally NOT the people who <em>need</em> dashboards, and vice versa. Up until now if you wanted BI in CRM you needed to build it yourself or buy an add-on. The add-on vendors will always find a way to add value&#8230;but they&#8217;re going to have to work a little harder starting with 2011, since it looks like we&#8217;ll have dashboards worthy of the name in the product.</div>
</li>
<li>
<div><strong>Find yourself coding around limitations in CRM Online?</strong> For me, this is a HUGE one: my production CRM is CRM Online. Overall, I love Microsoft&#8217;s cloud CRM. Only problem is, the architectural limitations around <em>extending</em> CRM Online generally means that I can&#8217;t do most of the really cool stuff I want to do: No plug-ins, no server-based ASP.NET applications, no custom SSRS reports, most add-ons don&#8217;t work with it. (<a title="extending crm" href="http://www.dynamicscrmtrickbag.com/category/formscript/" target="_self">Here&#8217;s an article</a> where I discuss the issue&#8230;) The promise in 2011 is that we&#8217;ll finally get parity between the deployment options in terms of how we can extend the application. Like I said: HUGE.</div>
</li>
<li>
<div><strong>Want easy integration with SharePoint document libraries?</strong> If you never <span style="color:#666666; font-family:Arial; font-size:10pt"><em>quite</em></span> got all that IFRAME code figured out, you aren&#8217;t alone&#8230;and you don&#8217;t have long to wait for an out of the box solution. It looks like a nice baseline IFRAME-style integration will be included, where you&#8217;ll have the option of <em>letting CRM create a document library for you</em> – say, for an account record.</div>
</li>
<li>
<div><strong>Building CRM add-on apps?</strong> Assuming you can still find function gaps to fill, <span style="color:#666666; font-family:Arial; font-size:10pt"><em>deploying</em></span> your add-ons will get a lot easier than it is now, especially with 2011&#8217;s &#8220;managed solution&#8221; concept. This is going to be a significant shift in the way we develop and deploy solutions on the XRM platform, I think just as much for enterprise developers as for ISVs.</div>
</li>
<li>
<div><strong>Need an audit trail of changes to CRM records</strong>? Currently, there&#8217;s no record-level auditing built in to CRM. There are plenty of ways to build DIY auditing (for example, the approach I discussed <a title="DIY record auditing in crm 4" href="http://www.dynamicscrmtrickbag.com/2009/05/14/delete_audit/" target="_self">in this article&#8230;</a>), but starting in CRM 2011 it looks like we won&#8217;t have to resort to that approach any more, since auditing looks to be built right in.</div>
</li>
<li>
<div><strong>Need to measure salespeople&#8217;s performance against goals?</strong> It looks like this is going to be built in as well, which is good, since I don&#8217;t know anybody who ever quite figured out the mysterious connection between Fiscal Year Settings and sales quotas in CRMs 3 and 4.</div>
</li>
<li>
<div><strong>Jumping through hoops trying to implement security at the field level</strong>? Martin Jaeger reminded me I missed this one. True field-level security should be in CRM 2011, so this should be in the &#8220;wait&#8221; category. Thanks Martin!</div>
</li>
<li>
<div><strong>Need more than one form for an entity</strong>? I almost forgot this one. It&#8217;s a big one, though, so if you find yourself wrassling with code like the kind I discussed<a title="role-tailored forms" href="http://www.dynamicscrmtrickbag.com/2010/07/06/useful-form-scripts-5/" target="_self"> in this article</a>&#8230;well, you might want to wait.   </div>
</li>
<li>
<div><strong>Need filtered lookups?</strong> Nathan Vanderhoof pointed out this one: &#8220;Depending on your skill level and the urgency of your users requirements might want to wait for Filtered Lookups as well.&#8221; Well said. Thanks Nathan!</div>
</li>
<li>
<div><strong>Recycling the &#8220;Fax&#8221; and &#8220;Letter&#8221; activities getting tiresome?</strong> As Jdz points out in his comment below, the ability to create true custom activities will open up some good possibilities. Obviously we have a lot to learn about <strong>how</strong> these will be implemented (will they synch to Outlook? will we be able to create 1:N relationships from activities to other entities?), but having them in the first place is a good start! </div>
</li>
</ul>
<p>Also, Andrew Wolfe raises a good point in his comment below: will some of these new features only be available in certain versions, <em>a la</em> the <a title="salesforce pricing model" href="http://www.salesforce.com/crm/ep-sales.jsp?r=http://www.salesforce.com/chatter/editions-pricing.jsp">salesforce.com pricing model</a>? My guess (a.k.a. &#8220;editorial opinion&#8221;) is that few if any of these features will be version dependent. That would be inconsistent with the traditional Dynamics CRM approach, and it would be very unpopular with the developer community Microsoft needs to fill up the <a title="MS Dynamics Marketplace" href="http://crm.dynamics.com/DynamicsMarketplace/landing.aspx">Dynamics Marketplace</a> with cool downloadable apps that take advantage of these sweet features.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/08/06/crm2011-waitorbuild/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pithy Maxims for Dynamics CRM 4 Power-Users and Customizers</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/08/02/pithy-maxims-for-dynamics-crm-4/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/08/02/pithy-maxims-for-dynamics-crm-4/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 17:45:40 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Tips, Tricks, Q&A]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/08/02/pithy-maxims-for-dynamics-crm-4-power-users-and-customizers/</guid>
		<description><![CDATA[August 2, 2010 - When it comes to maxims, the pithier the better, I always say. Most of the CRM 4 maxims in this article fail the truly pithy test, but I hope they make up for it in usefulness. Let me know what you think.]]></description>
			<content:encoded><![CDATA[<p>When it comes to maxims, the pithier the better, I always say. Most of the following maxims for CRM 4 fail the truly pithy test, but I hope they make up for it in usefulness. Let me know what you think.</p>
<h2>Power-User &amp; Configuration Topics</h2>
<ul>
<li>
<div>Business Units and Users can never be deleted, but they can be disabled.</div>
</li>
<li>
<div>Teams cannot be disabled. Mysteriously, they can only be deleted through the &#8220;Bulk Delete&#8221; feature available on the Teams <strong>More Actions</strong> menu.</div>
</li>
<li>
<div><strong>Disabling users</strong> has no impact on any records they own.</div>
</li>
<li>
<div>Most record types (accounts, contacts, opportunities…) must always be assigned to a user.</div>
</li>
<li>
<div>Some record types (cases and activities) can be &#8220;assigned&#8221; to a queue. That&#8217;s a loose usage of the word &#8220;assigned&#8221;, since they are never really owned by a queue: these user-owned records are always owned by a user.</div>
</li>
<li>
<div>Although it <strong>seems like you should be able to assign a record to a team, you can&#8217;t</strong>. Records can be <em>shared </em>out to a team (in which case they&#8217;re shared with every member on the team and you &#8220;un-share&#8221; by removing members from the team.)</div>
</li>
<li>
<div>If <strong>assigning records to teams</strong> seems like it would be useful, you&#8217;re going to like <strong>Dynamics CRM 2011 </strong>since that&#8217;s going to be a new feature. Similar issue for CRM queues: in CRM 2011 <strong>look for any record type to be &#8220;place-able&#8221; into a queue</strong>, rather than only activities and cases as in CRM 4.</div>
<p> </li>
</ul>
<h2>Entity Relationships and All That</h2>
<ul>
<li>
<div><strong>A 1:N from A to B and a 1:N from C to B is an N:N from A to</strong> C. Plus, B has a form, status and attributes. This is referred to as a &#8220;manual&#8221; N:N, in contrast to the &#8220;native&#8221; N:N that debuted in CRM 4.</div>
<p>Example: 1:N from Contact to Registration, 1:N from Event to Registration. Here&#8217;s an article I wrote that <a href="http://www.dynamicscrmtrickbag.com/2010/01/18/many-to-many-relationships/">contrasts the native and manual approaches to creating N:N relationships</a>.</li>
<li>
<div><strong>Advanced Find</strong> can <em>filter</em> on values from a child record, but child record <em>columns</em> can&#8217;t be included in view.</div>
<p>Example: If you just want to know which accounts you&#8217;ve done business with, create an Advanced Find view on account and filter on which accounts have closed opportunities. But you can&#8217;t add columns from those closed opportunity records to the view.</li>
<li>
<div><strong>Advanced Find</strong> can filter on values from parent record, and CAN include columns from the parent record in view.</div>
<p>Example: If you create an Advanced Find view on opportunities, you can include columns from both opportunities and their parent account records in the view.</li>
<li>
<div><strong>Report Wizard</strong> can filter on child records, and CAN include child record columns in report.</div>
</li>
<li>
<div><strong>Workflows</strong> know about values in primary entity of workflow plus parent record records, plus any records created by workflow.</div>
<p> </li>
</ul>
<h2>Entity Customizations</h2>
<ul>
<li>
<div><strong>Quick Find and Lookup views </strong>should usually be customized, and should usually be the same.</div>
</li>
<li>
<div><strong>Status</strong> can never be customized. <strong>Status Reason </strong>can and usually <em>should</em> be customized. For a handy reference of default status and status reason values for all Dynamics CRM entities, read <a href="http://rc.crm.dynamics.com/rc/regcont/en_us/op/articles/statestatus.aspx">this excellent article</a>.</div>
</li>
<li>
<div>You <strong>can never delete system attributes</strong>, but you can delete custom attributes, if they aren&#8217;t on published forms or reports.</div>
</li>
<li>
<div>You can change<strong> icons </strong>for custom entities but not for system entities.</div>
</li>
<li>
<div><strong>Quick &amp; Easy Lead customizations:</strong></div>
<ul>
<li>Change requirement level of default Company attribute to &#8220;no constraint&#8221;, and change its Label to &#8220;New Account&#8221;.</li>
<li>Create a new N:1 relationship to Account, call it &#8220;Existing Account&#8221;, and place it on the Lead form.</li>
</ul>
<p style="margin-left: 18pt">I discussed these and related customizations <a href="http://www.dynamicscrmtrickbag.com/2009/07/15/three-step-program/">in this article</a>.</p>
</li>
<li>
<div><strong>Quick &amp; Easy Opportunity customizations:</strong></div>
<ul>
<li>Add a custom N:1 from opportunity to contact, call it &#8220;Primary Contact&#8221; and add it to the opportunity form.</li>
<li>Change the Display Label of the &#8220;Potential Customer&#8221; field to &#8220;Account&#8221;.</li>
<li>If you don&#8217;t use the product catalog, change the &#8220;Revenue&#8221; field (schema name &#8220;isrevenuesystemcalculated&#8221;) so that its default value is &#8220;User Provided&#8221;.</li>
<li>If your organization uses multiple currencies, add the &#8220;Est. Revenue (Base)&#8221; and &#8220;Exchange Rate&#8221; attributes to Opportunity form.</li>
</ul>
<p style="margin-left: 18pt">I discussed these and related customizations <a href="http://www.dynamicscrmtrickbag.com/2010/03/22/common-customizations-on-the-crm-opportunity-entity/">in this article</a>.</p>
</li>
<li>
<div><strong>Default relationship behavior for accounts: reassigning account record reassigns ALL child records</strong>, even closed transactions and activities. If you rely on closed opportunities for sales history reports, this means that reassigning accounts can change history. You can fix that by customizing the <strong>Parental 1:N from Account to Opportunity to Configurable Cascading</strong>, &#8220;Cascade Active&#8221;: open the account customization UI, click on &#8220;1:N Relationships&#8221;, and sort the view by the &#8220;Related Entity&#8221; column. You&#8217;ll see two relationships to Opportunity, the one you want to customize is the Parental one.</div>
</li>
<li>
<div>You only get <strong>one form per entity in CRM 4</strong>, but you can work around it with some relatively straightforward code I described <a href="http://www.dynamicscrmtrickbag.com/2010/07/06/useful-form-scripts-5/">in this article</a>. Or if you prefer, you can wait for <strong>Dynamics CRM 2011</strong> which will include this as an important new feature.</div>
</li>
<li>
<div><strong>Privileges are assigned at the record level in CRM 4</strong>, so although you can hide fields on forms based on security roles, you can&#8217;t really lock them down. Look for real field-level security to be included as another important new feature in <strong>CRM 2011.</strong></div>
<p style="margin-left: 18pt"> </p>
</li>
</ul>
<h2>Workflows</h2>
<ul>
<li>
<div>Creating an Opportunity Product can trigger a workflow, but <strong>a workflow can&#8217;t create an Opportunity Product</strong>. Same for Quote, Order and Invoice Products.</div>
</li>
<li><strong>On Demand Workflow </strong>tip part 1: Can you run one? Depends mainly on your security role&#8217;s read privilege on the workflow entity.</li>
<li>
<div>On Demand Workflow tip part 2: If you can run it, will it work? Depends on the rest of your security role.</div>
<p>Here&#8217;s an article I wrote about <a href="http://www.dynamicscrmtrickbag.com/2010/04/18/on-demand-workflows-and-security-roles/">on demand workflows and security roles</a>.</li>
<li>
<div><strong>Automatic workflows</strong> are different than on demand ones (and not just because they&#8217;re automatic!). With these, the question is which users will trigger them, and the answer depends mainly on the Scope of the workflow.</div>
<p>Here&#8217;s an article I wrote attempting to clarify the issue of <a href="http://www.dynamicscrmtrickbag.com/2010/04/21/automatic-workflows-security-and-scope/">automatic workflows, security and scope</a>.</li>
</ul>
<div>One big limitation of workflows in Dynamics CRM 4 is that they <strong>don&#8217;t allow for user interaction</strong>. Dynamics CRM 2011 workflows – sorry, <em>processes</em>! – do not have this limitation.</div>
<h2>Scripting and Extending </h2>
<ul>
<li><strong>If you need to hide tabs on a form</strong>, you can set the style.display property equal to &#8216;none&#8217;, or the style.visibility property equal to &#8216;hidden&#8217;.  Use the style.display = &#8216;none&#8217; approach if you don&#8217;t want visible gaps where your hidden tabs are! Example: <strong>tab2.Tab.style.display = &#8216;none&#8217;</strong> will hide the third tab (zero-based counting, remember) and move the fourth tab over a notch.</li>
<li><strong>Are you deploying ASP.NET apps in the ISV folder on your CRM server</strong>? Your code can reference the CRM APIs via web services, or directly by adding references to the Microsoft.CRM.Sdk and Microsoft.CRM.SdkTypeProxy assemblies. If you add direct references to the assembly files, you do not need to compile your ASP.NET app: just copy the aspx and aspx.cs files to the right folder under /ISV. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/08/02/pithy-maxims-for-dynamics-crm-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking the Covers off Dynamics CRM 2011</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/07/25/taking-the-covers-off-crm-2011/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/07/25/taking-the-covers-off-crm-2011/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 19:24:25 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[CRM 2011]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/?p=2737</guid>
		<description><![CDATA[Fresh from the recent Microsoft Worldwide Partner Conference, here's Bryan Nielson's presentation on what's new in the next release of Dynamics CRM, interspersed with demos by Andrew Bybee. Some of the new features in the transition from CRM 3.0 to 4.0 had a significant impact on development and customization techniques, and how we allocated our time to most efficiently utilize the new features. With the rapid growth of the XRM platform this will be an even bigger deal this time around, and this video is the most substantive sneak preview.  ]]></description>
			<content:encoded><![CDATA[<h2>Dynamics CRM 2011</h2>
<p><em>Pronounced &#8220;twenty-eleven&#8221;</em><br />
Fresh from the recent Microsoft Worldwide Partner Conference, here&#8217;s Bryan Nielson&#8217;s presentation on what&#8217;s new in the next release of Dynamics CRM, interspersed with demos by Andrew Bybee.</p>
<table border="0" cellpadding="12">
<tbody>
<tr>
<td> The first demo is about some of the new features for users and starts at the 8 minute mark. The second demo focuses on new features for customizers and developers, and starts at 29 minutes.</td>
<td style="text-align: right;" bgcolor="lightblue"><em>I&#8217;ll add coverage on all these sweet new features when I rev my <a href="http://www.dynamicscrmtrickbag.com/dynamics-crm-essentials/">CRM Essentials training classes</a> for 2011. No need to wait, though: if you take any of the 4.0 classes in the meantime, you can take the corresponding 2011 class for free when it comes out. </td>
</tr>
</tbody>
</table>
<p>Here are my RBIs (&#8221;Richard&#8217;s Big Items&#8221;) from the demos &amp; presentation:</p>
<h2>Applications</h2>
<p>Lots of new goodness in the <strong>Outlook client:</strong></p>
<ul>
<li>More &#8220;context&#8221;. For example, the Outlook preview pane will be &#8220;CRM-aware&#8221;, presenting things like related records for a tracked e-mail or appointment, without having to open the tracked record&#8217;s form.</li>
<li>Convert a tracked e-mail to an Opportunity, Case or Lead&#8230;from the Outlook ribbon, without having to open the form. This will be a nice time-saver.</li>
<li>When replying to an e-mail in Outlook, you can access a Dynamics CRM e-mail template directly from the Outlook ribbon, and you can do an in-place search of the CRM knowledge base and insert an article.</li>
<li>And&#8230;you can even attach CRM sales literature to an e-mail directly from Outlook! Seeing as how you can&#8217;t even attach sales literature to an e-mail at all in 4.0, this is going to be a nice feature and for lots of organizations may justify using sales literature (from what I can tell the single least-used feature in Dynamics CRM 4.0.)  </li>
</ul>
<p><strong>Dashboards and Views:</strong></p>
<ul>
<li>Lots of improvements to KPIs and Dashboards. Perhaps most importantly, it looks like we&#8217;ll be able to centrally deploy dashboards to users. (Currently, the CRM Online implementation requires every user to create their own).  In the demo at the 15:18 mark, you can see several dashboards available as &#8220;system dashboards&#8221;, which indicates we will be able to create them the same we can now a system view, as a schema customization.  </li>
<li>It looks like improvements to views will fix a lot of their current shortcomings. Check out the video at about the 21-minute mark to see improved sorting and grouping of data within views. Andrew doesn&#8217;t actually <em>show</em> creating group subtotals, but if that doesn&#8217;t make it into the product I&#8217;ll scratch my eyes out.</li>
</ul>
<p> </p>
<h2>Customization and Development</h2>
<ul>
<li>A &#8220;<strong>solution</strong>&#8220; is a new concept, described as a <em>portfolio</em> of customizations, configurations, extensions and the like. So rather than manually exporting and then importing collections of customizations, as at present, solutions will let us package them up as pre-defined&#8230;well, solutions. (described at the 32 minute mark)</li>
<li>It appears that <strong>extensions</strong> (Plug-ins, for example) be part of what can be in a solution, and that they will be <strong>supported for all deployment models</strong>, including CRM Online. Including the cloud version of Dynamics CRM as a full-fledged development platform, on par with on-premise for extensions like custom workflow actions, plug-ins and ASP.NET development will definitely add credibility to the message that Microsoft&#8217;s &#8220;all in&#8221; when it comes to cloud computing. Check out how comprehensive the solution concept is at about the 33 minute mark in the video! </li>
<li>Apparently<strong> &#8220;workflows&#8221; become &#8220;processes&#8221;</strong> in 2011, but more importantly they can do some important new things! Go to the 35 minute mark to take a look at these things:
<ul>
<li><strong>Prompt and Response</strong> construct lets you add a synchronous user experience to workflows &#8212; sorry, <em>processes</em>! &#8212; to store the user responses, and to branch depending on the responses.</li>
<li><strong>New workflow Actions</strong> sound interesting: Query CRM Data, Assign Value, plus a couple of others that sound like they&#8217;re related to Prompt and Response.</li>
</ul>
</li>
<li><strong>Custom Activity Types</strong>. Nice. Discussed at 40 minutes.</li>
<li>The concept of <strong><em>managed</em> v. <em>unmanaged</em> solutions</strong>.  Unmanaged solutions sound like what we have now (exporting and importing customizations) &#8212; Managed solutions are for scenarios when you want to lock down a release, and don&#8217;t want code or customizations exposed or changed. (42 minutes)</li>
<li><strong>Field-level security</strong>. Yay! (44 minutes) <br />
  </li>
</ul>
<p>The embedded video requires Silverlight and a few people have told me they can&#8217;t play it &#8212; here&#8217;s the link to the site just in case: <a href="http://digitalwpc.com/Videos/AllVideos/Permalink/f9625bd7-7009-4bed-ab7a-c3fbb548d6ac">http://digitalwpc.com/Videos/AllVideos/Permalink/f9625bd7-7009-4bed-ab7a-c3fbb548d6ac</a></p>
<p><object type="application/x-silverlight" data="data:application/x-silverlight," width="410" height="306" ><param name="source" value="http://www.microsoft.com/showcase/silverlight/player/1/player-en.xap" /><param name="initParams" value="Culture=en-US,Uuid=f9625bd7-7009-4bed-ab7a-c3fbb548d6ac,Autoplay=False,MarketingOverlayText=Visit this video&apos;s Web site,ShowMarketingOverlay=true,ShowMenu=True,Tabs=Embed;Email;Share;Info,MiscControls=FullScreen;Detached,VideoUrl=http://digitalwpc.com/Videos/AllVideos/Permalink/f9625bd7-7009-4bed-ab7a-c3fbb548d6ac,Mode=Player" /><param name="enableHtmlAccess" value="true" /><param name="allowHtmlPopupwindow" value="true" /><param name="background" value="#FF000000" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;" onmousedown="javascript:new Image().src = 'http://m.webtrends.com/ dcsygm2gb10000kf9xm7kfvub_9p1t/dcs.gif?dcsdat=' + new Date().getTime() + '&#038;dcssip=www.microsoft.com&#038;dcsuri=' + window.location.href + '&#038;WT.tz=-8&#038;WT.bh=16&#038;WT.ul={0}&#038;WT.cd=32&#038;WT.jo=Yes&#038;WT.ti=&#038;WT.js=Yes&#038;WT.jv=1.5&#038;WT.fi=Yes&#038;WT.fv=10.0&#038;WT.sli=Not%20Installed&#038;WT.slv=Version%20Unavailable&#038;WT.dl=1&#038;WT.seg_1=Not%20Logged%20In&#038;WT.vt_f_a=2&#038;WT.vt_f=2&#038;WT.vt_nvr1=2&#038;WT.vt_nvr2=2&#038;WT.vt_nvr3=2&#038;WT.vt_nvr4=2&#038;vp_site=Embedded&#038;wtEvtSrc=' + window.location.href + '&#038;vp_sli=Embedded'"><img src="http://img.microsoft.com/showcase/silverlight/player/1/img/en-US/install.gif" alt="Get Microsoft Silverlight" style="border-style: none"/><noscript>
<div><img alt="DCSIMG" id="DCSIMG" width="1" height="1" src="http://m.webtrends.com/ dcsygm2gb10000kf9xm7kfvub_9p1t/njs.gif?dcsuri=/nojavascript&amp;WT.js=No"/></div>
<p></noscript></a></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/07/25/taking-the-covers-off-crm-2011/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Customizing, Extending and All That</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/07/14/customizing-extending/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/07/14/customizing-extending/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 16:56:11 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Form Script]]></category>
		<category><![CDATA[Training and Certification]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/07/14/customizing-extending-and-all-that/</guid>
		<description><![CDATA[The terms "customizing" and "extending" are code-words  for "getting Dynamics CRM to do more stuff than it does out of the box". They're actually pretty well-defined concepts, however, and here's my attempt at summarizing the concepts and clarifying what we mean by extending Dynamics CRM.   ]]></description>
			<content:encoded><![CDATA[<h2>Customizing</h2>
<p>In Dynamics CRM lingo, the word &#8220;customizing&#8221; is conventionally used to refer to &#8220;schema&#8221; customizations: customizations to forms and views, entities and attributes, relationships, and the like. These are &#8220;schema&#8221; customizations since the changes you make are actual changes to the database schema, and are stored as metadata in the SQL database. These are, for the most part, no-code customizations, and the amazing mileage you can get out of them is a big reason for Dynamics CRM&#8217;s exploding popularity as a customization platform.</p>
<h2>Extending</h2>
<p>While schema customizations have many advantages, they also have some limitations. These can be overcome by more advanced techniques supported by the Dynamics CRM architecture and generally referred to as &#8220;extensions&#8221;. Specifically, these include:</p>
<ul>
<li>Programming with the Dynamics CRM API</li>
<li>Customizing the CRM UI with SiteMap and ISV.Config</li>
<li>Developing ASP.NET applications that integrate with Dynamics CRM</li>
<li>Building and deploying &#8220;Plug-ins&#8221;</li>
<li>Building custom workflow activities</li>
</ul>
<p>These extend Dynamics CRM in a number of ways. First and most important, they let you build extra functionality. For example, if you wanted to build a custom CRM front-end with a richer GUI than the standard CRM web forms offer, you can develop an ASP.NET application that reads and writes to Dynamics CRM via supported web services. Or if you have a requirement that custom business logic execute <em>before</em> a Dynamics CRM record is deleted, that&#8217;s something a custom Plug-in can do. Another way in which these techniques extend CRM is that they generally are <em>NOT</em> stored as metadata in the SQL Server database. Plug-ins and custom workflow activities get compiled and their assemblies get deployed onto your CRM server. ASP.NET applications are copied onto your CRM server, by convention to a special folder (&#8221;ISV&#8221;, for &#8220;independent software developer&#8221;) underneath IIS (specifically, under &#8220;inetpub&#8221;).</p>
<p>Extensions are more complex to develop, they require professional development experience and tools (.NET and Visual Studio being by far the most common), and the fact that they&#8217;re deployed as external files means you don&#8217;t have the convenient all-in-one-place deployment model of a pure schema-customization approach. And by the way, this last point – that they&#8217;re deployed as external files – has up to now meant they are also <strong>not available for CRM Online,</strong> since you can&#8217;t just copy your DLLs up to Microsoft&#8217;s big IIS in the cloud!</p>
<p>But in return for some increased complexity of development and deployment…you get a lot of cool customization possibilities. These are the main topics I cover in my new <a title="Extending Dynamics CRM" href="http://www.dynamicscrmtrickbag.com/dynamics-crm-essentials/crm-training-extending-dynamics-crm/" target="_self">Extending Dynamics CRM one-day live online class</a>, and I&#8217;ll lay them out in a little more detail in the following table:</p>
<h3>
<table style="border-collapse:collapse" border="0">
<colgroup span="1">
<col style="width: 140px;" span="1"></col>
<col style="width: 218px;" span="1"></col>
<col style="width: 280px;" span="1"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Extension Approach</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">What it&#8217;s for, how it works</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Examples</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">API programming</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Through compiled code or form script, use a web service such as &#8220;CrmService&#8221;, which exposes methods such as &#8220;Create&#8221;, &#8220;Delete&#8221; and &#8220;RetrieveMultiple&#8221; (you can probably guess what those methods do!)</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<ul>
<li>Custom dashboards</li>
<li>Retrieving and summarizing information for related entities</li>
<li>Programmatically changing the schema (adding entities, attributes, etc.)</li>
</ul>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">SiteMap and ISV.Config</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Customize two XML files, SiteMap for the left navigation area, ISV.Config to customize the built-in form and grid toolbars, and menus</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<ul>
<li>Customize SiteMap to augment or replace the standard &#8220;Resource Center&#8221; with your own pages</li>
<li>Modify ISV.Config to add custom buttons to the Case or Opportunity forms, which in turn can run code with custom business logic</li>
</ul>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">ASP.NET application development</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Build and deploy custom ASP.NET web applications</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<ul>
<li>Create standalone CRM front-end applications for a richer form experience, or as client &#8220;portal&#8221; applications for external access</li>
<li>Create applications to be consumed by an IFRAME on a CRM form, for example custom grids, KPIs and so forth</li>
</ul>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Plug-ins</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Server-based DLLs to implement event-based custom business logic and processing. Complete event pipeline supports both pre- and post-event processing.</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<ul>
<li>Unlike form script, these are not dependent on a form being loaded, so can guarantee code execution regardless of how a record is created, modified or deleted.</li>
<li>Unlike the native web UI workflow designer, Plug-ins can fire <em>before</em> a record is deleted or saved, so give you more granular control.</li>
</ul>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Custom workflow activities</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">Server-based DLLs to add custom actions to the native web UI workflow designer. Similar to Plug-ins, except designed for use by workflow designers, rather than as event-driven business logic.</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">These are good for situations when you, as a coder, need to make custom functionality available to people who use the Dynamics CRM workflow designer to build workflows. Do your workflow designers want to calculate aggregate statistics on child records and store them into fields on the parent record? A custom workflow activity can do things like that.</td>
</tr>
</tbody>
</table>
</h3>
<h2>Certification Options</h2>
<p>If you&#8217;re interested in Dynamics CRM certification, you&#8217;ll find a pragmatic distinction between these two concepts expressed in the following two exam prep pages, courtesy of Microsoft Learning:</p>
<ul>
<li><a title="Exam 631" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=MB2-631#tab2" target="_blank">CRM 4.0 Customization and Configuration</a></li>
<li><a title="Exam 634" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=MB2-634#tab2" target="_blank">CRM 4.0 Extending Microsoft Dynamics CRM</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/07/14/customizing-extending/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Useful Form Scripts #5: Role-Tailored Forms</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/07/06/useful-form-scripts-5/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/07/06/useful-form-scripts-5/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 11:18:11 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Form Script]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/?p=2686</guid>
		<description><![CDATA[July 6, 2010 - Dynamics CRM entities can have one form only, which seems limiting at first. But you can still create a custom view of a form based on a user's security role and other factors. This article demonstrates a role-tailored opportunity form and includes copy &#038; pastable JavaScript and instructions. ]]></description>
			<content:encoded><![CDATA[<h2>The Problem: (Only) One Form per Entity</h2>
<table border="0" cellpadding="12">
<tbody>
<tr>
<td>There are lots of ways you can customize Dynamics CRM 4.0. For example, you can add custom attributes to system entities, you can add custom entities, you can customize relationships between entities, you can customize forms and views, and you can add custom views.</td>
<td style="text-align: right;" bgcolor="lightblue"><em>Topics like the one in this article &#8212; plus ASP.NET development, Plug-Ins and more &#8212; are covered in my one-day live online training class, <a href="http://www.dynamicscrmtrickbag.com/dynamics-crm-essentials/crm-training-extending-dynamics-crm/?img_campaignid=09f08a05-5d76-df11-a611-001f29ca908c">Extending Dynamics CRM</a></td>
</tr>
</tbody>
</table>
<p><strong>But you cannot add custom forms</strong>: every customizable entity in Dynamics CRM has one form which you can customize, but you can’t add a new form.  This one-form-per-entity rule seems restrictive, especially if you’re new to CRM and moving over from a platform without that limitation.</p>
<p>While it’s true you can only create one form per entity, it’s <em>not</em> true that all users must see the same <em>version</em> of the form. With the technique I describe here, you can create a role-tailored experience for your users, which can be an important contributor to user satisfaction, user adoption, and overall CRM success.</p>
<p>Here are a couple scenarios that might call for role-tailored Dynamics CRM forms:</p>
<ul>
<li>In a sales scenario, an outside rep might be the rainmaker, playing golf, doing deals, no need or time for lots of details. The outside rep might be paired with a cube-bound inside rep, who really <em>does </em>need the detail, some of which can be expressed on a more complex form for the opportunity entity.</li>
<li>In a service scenario, it might go the other way: a level 1 case is handled by a junior service rep, who handles the simpler cases and escalates the complicated ones to a manager. Escalated cases tend to be more complex, and the manager might require a more detailed form experience when working with service cases.</li>
</ul>
<h2>The Solution: Dynamic Forms Based on Security Roles</h2>
<p>I wrote briefly about this problem in an earlier article but I didn&#8217;t include the entire code listing. Partly because a few readers asked me for a full sample, and partly because I wanted it for my own reference, here&#8217;s a complete listing and a more complete explanation.</p>
<p> JavaScript can be run on a form’s OnLoad event, it can check to see which user’s loading the form, and it can present a dynamically tailored form to a user or group of users. It can also check the current state of the record – the value of certain fields, for example – and incorporate <em>that</em> information to tailor a form appropriately. In the example I’ll show here, an important feature is the WhoAmI method of the CrmService web service. You can use it to query the security role of the current user, and provided you can use security roles to drive the form experience, this technique can work pretty well.</p>
<p>The following code can go in the OnLoad event of an un-customized Opportunity form. (I&#8217;ll list and explain it in three separate sections, but if you want to copy it to the clipboard and try it yourself, remember that the way I wrote it, all three sections need to be pasted, successively, into the OnLoad event of Opportunity.)</p>
<h3>Section 1: test for user&#8217;s security roles and show appropriate version of form:</h3>
<p>This section calls the UserHasRole function, which is in section 2.</p>
<pre>if (UserHasRole("Outside Sales")) {
    //hide default Administration and Notes tabs:
    crmForm.all.tab1Tab.style.visibility = "hidden";
    crmForm.all.tab2Tab.style.visibility = "hidden";
    //hide default probability, price list, rating and currency fields
    crmForm.all.closeprobability_c.style.visibility = "hidden";
    crmForm.all.closeprobability_d.style.visibility = "hidden";
    crmForm.all.pricelevelid_c.style.visibility = "hidden";
    crmForm.all.pricelevelid_d.style.visibility = "hidden";
    crmForm.all.opportunityratingcode_c.style.visibility = "hidden";
    crmForm.all.opportunityratingcode_d.style.visibility = "hidden";
    crmForm.all.transactioncurrencyid_c.style.visibility = "hidden";
    crmForm.all.transactioncurrencyid_d.style.visibility = "hidden";
}</pre>
<h3>Section 2: The UserHasRole function</h3>
<p>This convenient wrapper function and the one in the next section are taken, unchanged, from Jim Wang&#8217;s excellent article, <a title="Jim Wang's article on security roles" href="http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html" target="_blank">Check current user&#8217;s security role using JavaScript</a>.</p>
<pre>function UserHasRole(roleName) {
    //get Current User Roles, oXml is an object
    var oXml = GetCurrentUserRoles();
    if (oXml != null) {
        //select the node text
        var roles = oXml.selectNodes("//BusinessEntity/q1:name");
        if (roles != null) {
            for (i = 0; i &lt; roles.length; i++) {
                if (roles[i].text == roleName) {
                    //return true if user has this role
                    return true;
                }
            }
        }
    }
    //otherwise return false
    return false;
}</pre>
<h3>Section 3: GetCurrentUserRoles</h3>
<p>This part does the heavy lifting. It constructs a SOAP message in the form of a big honkin&#8217; text string &#8212; that&#8217;s the xml variable &#8212; that eventually gets passed through to the RetrieveMultiple method of the CrmService web service and returns the result. To really understand what&#8217;s going on in here, use the Visual Studio debugging technique I described in <a title="Form Scripts #3" href="http://www.dynamicscrmtrickbag.com/2010/06/11/useful-form-scripts-3/" target="_self">Useful Form Scripts #3</a>.</p>
<pre>function GetCurrentUserRoles() {
    var xml = "" +
 "&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;" +
 "&lt;soap:Envelope xmlns:soap=\"<a href="http://schemas.xmlsoap.org/soap/envelope/\">http://schemas.xmlsoap.org/soap/envelope/\</a>" xmlns:xsi=\"<a href="http://www.w3.org/2001/XMLSchema-instance\">http://www.w3.org/2001/XMLSchema-instance\</a>" xmlns:xsd=\"<a href="http://www.w3.org/2001/XMLSchema\">http://www.w3.org/2001/XMLSchema\</a>"&gt;" +
 GenerateAuthenticationHeader() +
 " &lt;soap:Body&gt;" +
 " &lt;RetrieveMultiple xmlns=\"<a href="http://schemas.microsoft.com/crm/2007/WebServices\">http://schemas.microsoft.com/crm/2007/WebServices\</a>"&gt;" +
 " &lt;query xmlns:q1=\"<a href="http://schemas.microsoft.com/crm/2006/Query\">http://schemas.microsoft.com/crm/2006/Query\</a>" xsi:type=\"q1:QueryExpression\"&gt;" +
 " &lt;q1:EntityName&gt;role&lt;/q1:EntityName&gt;" +
 " &lt;q1:ColumnSet xsi:type=\"q1:ColumnSet\"&gt;" +
 " &lt;q1:Attributes&gt;" +
 " &lt;q1:Attribute&gt;name&lt;/q1:Attribute&gt;" +
 " &lt;/q1:Attributes&gt;" +
 " &lt;/q1:ColumnSet&gt;" +
 " &lt;q1:Distinct&gt;false&lt;/q1:Distinct&gt;" +
 " &lt;q1:LinkEntities&gt;" +
 " &lt;q1:LinkEntity&gt;" +
 " &lt;q1:LinkFromAttributeName&gt;roleid&lt;/q1:LinkFromAttributeName&gt;" +
 " &lt;q1:LinkFromEntityName&gt;role&lt;/q1:LinkFromEntityName&gt;" +
 " &lt;q1:LinkToEntityName&gt;systemuserroles&lt;/q1:LinkToEntityName&gt;" +
 " &lt;q1:LinkToAttributeName&gt;roleid&lt;/q1:LinkToAttributeName&gt;" +
 " &lt;q1:JoinOperator&gt;Inner&lt;/q1:JoinOperator&gt;" +
 " &lt;q1:LinkEntities&gt;" +
 " &lt;q1:LinkEntity&gt;" +
 " &lt;q1:LinkFromAttributeName&gt;systemuserid&lt;/q1:LinkFromAttributeName&gt;" +
 " &lt;q1:LinkFromEntityName&gt;systemuserroles&lt;/q1:LinkFromEntityName&gt;" +
 " &lt;q1:LinkToEntityName&gt;systemuser&lt;/q1:LinkToEntityName&gt;" +
 " &lt;q1:LinkToAttributeName&gt;systemuserid&lt;/q1:LinkToAttributeName&gt;" +
 " &lt;q1:JoinOperator&gt;Inner&lt;/q1:JoinOperator&gt;" +
 " &lt;q1:LinkCriteria&gt;" +
 " &lt;q1:FilterOperator&gt;And&lt;/q1:FilterOperator&gt;" +
 " &lt;q1:Conditions&gt;" +
 " &lt;q1:Condition&gt;" +
 " &lt;q1:AttributeName&gt;systemuserid&lt;/q1:AttributeName&gt;" +
 " &lt;q1:Operator&gt;EqualUserId&lt;/q1:Operator&gt;" +
 " &lt;/q1:Condition&gt;" +
 " &lt;/q1:Conditions&gt;" +
 " &lt;/q1:LinkCriteria&gt;" +
 " &lt;/q1:LinkEntity&gt;" +
 " &lt;/q1:LinkEntities&gt;" +
 " &lt;/q1:LinkEntity&gt;" +
 " &lt;/q1:LinkEntities&gt;" +
 " &lt;/query&gt;" +
 " &lt;/RetrieveMultiple&gt;" +
 " &lt;/soap:Body&gt;" +
 "&lt;/soap:Envelope&gt;" +
 "";</pre>
<pre>    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");</pre>
<pre>    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xmlHttpRequest.setRequestHeader("SOAPAction", " <a href="http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple">http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple</a>");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);</pre>
<pre>    var resultXml = xmlHttpRequest.responseXML;
    return (resultXml);
}</pre>
<h2>How it Works</h2>
<p>It&#8217;s easiest to test this if you&#8217;re running CRM as a system administrator &#8212; or more precisely, if one of the security roles assigned to your user account is the &#8220;System Administrator&#8221; role. You can test it yourself by following these steps:</p>
<p>1. Start by copying the code blocks in each of those three sections, one after the other, into the OnLoad event code of Opportunity. Make sure the &#8220;Event is enabled&#8221; checkbox is selected, then publish the customizations.</p>
<p>2. Add a custom security role, &#8220;Outside Sales&#8221;. If you&#8217;re in the System Administrator role, it doesn&#8217;t even matter if this custom role has any permissions or not &#8212; all that matters for the purpose of testing this code is that you&#8217;re assigned to a role with that name. Open an existing or a new opportunity &#8211; should be the same experience either way &#8212; and you should see the simplified version of the form:</p>
<p><img class="alignnone size-full wp-image-2706" title="RoleTailored2" src="http://www.dynamicscrmtrickbag.com/wp-content/uploads/2010/07/RoleTailored2.PNG" alt="RoleTailored2" width="689" height="343" /></p>
<p>3. Next, open up your user form and remove that role. The next time you open the opportunity form you&#8217;ll see the &#8220;normal&#8221; opportunity form&#8230;or whatever version of it you&#8217;d normally see:</p>
<p><img class="alignnone size-full wp-image-2707" title="RoleTailored1" src="http://www.dynamicscrmtrickbag.com/wp-content/uploads/2010/07/RoleTailored1.PNG" alt="RoleTailored1" width="694" height="346" /></p>
<p> Remember: the code specifically refers to the Price List, Rating, and Probability fields, so if you&#8217;re working with an already-customized version of the form you&#8217;ll need to tweak it a little bit.  </p>
<p>This example is somewhat simplistic and not intended as an exercise in best-practice CRM form design, but it does illustrate some interesting points:</p>
<ul>
<li>You don&#8217;t really<em> have to</em> display the <strong>Administration</strong> and <strong>Notes</strong> tabs &#8212; you can save a record fine without them, since all the required fields have default values filled in.</li>
<li>Hiding fields is a little hinky:
<pre>crmForm.all.opportunityratingcode_c.style.visibility = "hidden";</pre>
<p>hides the label of the opportunityratingcode field, and</p>
<pre>crmForm.all.opportunityratingcode_c.style.visibility = "hidden";</pre>
<p>hides the data. Plus, whereas when you hide a section the sections underenath it move up so there&#8217;s no holes on the form, that isn&#8217;t the case with fields. There are certainly other ways to do this, but worst case you could create separate sections with no labels to contain fields you wanted to hide, and then just hide the sections.<br />
 </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/07/06/useful-form-scripts-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Intelligent Data Updates with Workflows</title>
		<link>http://www.dynamicscrmtrickbag.com/2010/07/06/intelligent-data-updates/</link>
		<comments>http://www.dynamicscrmtrickbag.com/2010/07/06/intelligent-data-updates/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 10:50:44 +0000</pubDate>
		<dc:creator>Richard Knudson</dc:creator>
				<category><![CDATA[Dynamics CRM Workflows]]></category>

		<guid isPermaLink="false">http://www.dynamicscrmtrickbag.com/2010/07/06/intelligent-data-updates-with-workflows/</guid>
		<description><![CDATA[July 6, 2010 - People usually think "process" when they think "workflows", but Dynamics CRM workflows can be helpful in lots of little ways that add up to big time savings. Here are some examples of a utility workflow to perform "intelligent data updates" when bulk edit or other techniques can't do the job. ]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="12">
<tbody>
<tr>
<td>Processes are to workflows what quarterbacks are to football: they get all the glory. But just as hardcore football fan appreciates the toil of guards and tackles, so a CRM geek appreciates the useful little things workflows can help with. There&#8217;s a class of workflows I think of as &#8220;utility&#8221; workflows you can use to do things like:</td>
<td style="text-align: right;" bgcolor="lightblue"><em>Need to learn about workflows in Dynamics CRM? Consider my one-day live online class, <a href="http://www.dynamicscrmtrickbag.com/dynamics-crm-essentials/crm-training-building-dynamics-crm-workflows/?img_campaignid=09f08a05-5d76-df11-a611-001f29ca908c" target="_self">Building Workflows in Dynamics CRM</a>, which also includes a copy of my book on the topic.</em></td>
</tr>
</tbody>
</table>
<ul>
<li>Make copies of – or &#8220;clone&#8221; &#8212; records, saving precious data entry time.</li>
<li>Set default values on new records.</li>
<li>Reassign child records based on attributes of the parent.</li>
</ul>
<p>Another example is the topic of this article: performing intelligent data updates with workflows.</p>
<h1>Bulk Edit vs. Intelligent Data Updates</h1>
<p>Many record types have a &#8220;bulk edit&#8221; feature, where you can select multiple records and then select <strong>Edit</strong> from the <strong>More Actions</strong> menu. In the bulk edit form you&#8217;ll see, any change you make will be applied to all selected records. This can save you a lot of time compared to making changes one record at a time, and it always surprises me how few people know about the bulk edit feature. But here are at least two scenarios where it doesn&#8217;t work:</p>
<ol>
<li>Some record types don&#8217;t support bulk edit. Suppose you wanted to apply a change to all of your user records at the same time (for example, changing their e-mail access configuration from Outlook to E-Mail Router). You might select a bunch of user records, select the <strong>More Actions</strong> menu…and be disappointed to see that bulk edit isn&#8217;t supported for user records.</li>
<li>Bulk edit can only apply the same change to all records, so it won&#8217;t help you if you want to apply some logic to changes (for example, suppose you want to update account records, changing the value of the Territory field based on the value of the state or zip code fields)</li>
</ol>
<p>In scenarios like these you can use an on demand workflow. For example, suppose you want to update user records according to these two rules:</p>
<ul>
<li>All users will be configured for the E-Mail Router.</li>
<li>The value of the Territory field will be assigned according to the current value of the Site field.</li>
</ul>
<p>Here&#8217;s an on demand workflow that performs both of these. The first action is an Update that gets performed for all records; next, a conditional block checks the value of the Site field, and updates the Territory field with appropriate values.</p>
<p><img src="http://www.dynamicscrmtrickbag.com/wp-content/uploads/2010/07/070610_1050_Intelligent1.png" alt="" /></p>
<h1>To clear out a field, use the &#8220;Clear&#8221; operator.</h1>
<p>On a related note, what if you want to make the same change to multiple records, but the change is to <em>clear</em> the value of a field? For example, suppose that after running the workflow in the previous example, you discover that you&#8217;ve caused a big uproar because it turns out the sales manager assigns users manually to territories and it&#8217;s not always neatly determined by the value of the Site field (darn it!) and you just want to clear it out. Once again, bulk edit can&#8217;t help you here, since all it can do is <em>put a value into </em>a field. Fortunately, Dynamics CRM workflows have a &#8220;Clear&#8221; operator you can use for this purpose. It&#8217;s in the Dynamic Values area of the workflow design environment in the Operator drop-down list. For text fields the two values are Set to (the default) and Clear. Here&#8217;s how you fix the problem you caused in the first example:</p>
<p><img src="http://www.dynamicscrmtrickbag.com/wp-content/uploads/2010/07/070610_1050_Intelligent2.png" alt="" /></p>
<h1>So…what did we learn?</h1>
<ul>
<li>If you want to make the same change to a group of records and can&#8217;t use bulk edit, you can get the same result with an on demand workflow.</li>
<li>On demand workflows have the added benefit that they can apply conditional logic when updating data.</li>
<li>Another thing workflows can do that you cannot do at all using the UI (e.g., bulk edit) is clear fields with the <strong>Clear</strong> operator.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dynamicscrmtrickbag.com/2010/07/06/intelligent-data-updates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
