<?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>Brutus Online</title>
	<atom:link href="http://www.brutusonline.nl/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.brutusonline.nl</link>
	<description>live vanuit Utrecht!</description>
	<lastBuildDate>Mon, 21 Dec 2009 17:26:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Remote Desktop fun</title>
		<link>http://www.brutusonline.nl/?p=456</link>
		<comments>http://www.brutusonline.nl/?p=456#comments</comments>
		<pubDate>Mon, 21 Dec 2009 17:26:43 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[Raarrrr]]></category>
		<category><![CDATA[Remote Desktop]]></category>
		<category><![CDATA[Virtual PC]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=456</guid>
		<description><![CDATA[For work I’m working from my Windows 7 machine, started up Windows XP in a Virtual PC, set up a VPN connection to a client, set up an RDP to a specific webserver, set up another RDP from there, to another webserver. Are you following me? Wherever it is where I am, this is what [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">F</span>or work I’m working from my Windows 7 machine, started up Windows XP in a Virtual PC, set up a VPN connection to a client, set up an RDP to a specific webserver, set up another RDP from there, to another webserver. Are you following me? Wherever it is where I am, this is what my bottom left-screen looks like :</p>
<p><a href="http://lh6.ggpht.com/_dhkT-YJsZkc/Sy-u7Hvmm7I/AAAAAAAAAyc/PzUt5HuplLc/rdpfun.jpg?imgmax=640"><img class="pie-img alignnone" style="margin: 10px;" src="http://lh6.ggpht.com/_dhkT-YJsZkc/Sy-u7Hvmm7I/AAAAAAAAAyc/PzUt5HuplLc/rdpfun.jpg?imgmax=160" alt="rdpfun.jpg" width="160" height="81" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=456</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 Insufficient Permissions with assigning records</title>
		<link>http://www.brutusonline.nl/?p=345</link>
		<comments>http://www.brutusonline.nl/?p=345#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:40:03 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[CRM]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[crm 4.0]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=345</guid>
		<description><![CDATA[Another short one for CRM 4.0&#8230; Today someone from Sales department tried to assign an entity (this time a Contact, previous time an Account) to someone else. In cleaning up and/or deviding contacts within the Sales team, this is a daily routine and common practice for our Sales people. The error that the Sales person [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">A</span>nother short one for CRM 4.0&#8230;</p>
<p>Today someone from Sales department tried to assign an entity (this time a Contact, previous time an Account) to someone else. In cleaning up and/or deviding contacts within the Sales team, this is a daily routine and common practice for our Sales people.</p>
<p>The error that the Sales person got had something to do with insufficient permissions on assigning an entity and that the role he/she was in, did not have enough permissions :</p>
<p><img style="margin:10px 10px 10px 10px;" class="pie-img alignnone" src="http://lh6.ggpht.com/_dhkT-YJsZkc/Skp9_2uQ7DI/AAAAAAAAAqQ/KRym-l8uO_M/InsufficientPermissions.gif?imgmax=512" alt="InsufficientPermissions.gif" width="512" height="236" /></p>
<p>My first thought was : bullshit!</p>
<p>In my search for an answer, I discovered some interesting facts&#8230; (and a sleezy solution of course! )</p>
<ul>
<li>The standaard role that the Sales person had, was enough to assign entity-records to himself or anyone else.</li>
<li>Even the CRM System Admin user could not assign the entity-record to someone.</li>
<li>Other entity-records are easily assigned to other people.</li>
</ul>
<h2>Solution</h2>
<p>This is just a temporary one (hopefully), until we install Update Roll Up #4 :</p>
<ol>
<li>Give the System Administrator securityrole to the CRM-user that got the &#8220;insufficient permissions&#8221; error.</li>
<li>Let the user assign the entity-record to the designated CRM-user.</li>
<li>Remove the System Administrator securityrole.</li>
</ol>
<p>That&#8217;s that! If there is anyone in CRM world that had this same problem, please leave a comment! I&#8217;m interested in a more&#8230; well&#8230; a better solution <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=345</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Language switch nl-NL -&gt; en-US</title>
		<link>http://www.brutusonline.nl/?p=423</link>
		<comments>http://www.brutusonline.nl/?p=423#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:16:14 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[Zonder rubriek]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=423</guid>
		<description><![CDATA[From this moment on, I intend to blog in English. This way&#8230; I can reach a larger public (or group of readers) English speakers don&#8217;t have to user Google translator anymore to read posts like a lot do with Crm 4.0 Plugin voor dummies I can freshen up my skills in talking another language than [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">F</span>rom this moment on, I intend to blog in English.</p>
<p>This way&#8230;</p>
<ul>
<li>I can reach a larger public (or group of readers)</li>
<li>English speakers don&#8217;t have to user Google translator anymore to read posts like a lot do with <a href="http://www.brutusonline.nl/?p=275" target="_blank">Crm 4.0 Plugin voor dummies</a> <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>I can freshen up my skills in talking another language than Dutch.</li>
<li>English sounds kinda cool&#8230;</li>
</ul>
<p>Maybe when I have some time off, I&#8217;ll translate my previous posts. Until then : happy <a href="http://translate.google.nl/translate?hl=nl&amp;sl=nl&amp;tl=en&amp;u=http://www.brutusonline.nl/%3Fp%3D275" target="_blank">google-translating</a> <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=423</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 Use Filtered Views in report projects</title>
		<link>http://www.brutusonline.nl/?p=401</link>
		<comments>http://www.brutusonline.nl/?p=401#comments</comments>
		<pubDate>Tue, 09 Jun 2009 20:29:48 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[CRM]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[crm 4.0]]></category>
		<category><![CDATA[visual studio 2005]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=401</guid>
		<description><![CDATA[Just a quick CRM 4.0 tip when you are working on Custom Reports in Visual Studio 2005. Use Filtered Views instead of Tables or Views, otherwise you will recieve errors when running the report after importing it : An error has occurred during report processing. Query execution failed for data set 'Test_Dataset' For more information [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">J</span>ust a quick CRM 4.0 tip when you are working on Custom Reports in Visual Studio 2005.</p>
<p><a href="http://lh5.ggpht.com/_dhkT-YJsZkc/Si7DPSWt6XI/AAAAAAAAAoo/VVUOSXrlTVY/Filtered%20views.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh5.ggpht.com/_dhkT-YJsZkc/Si7DPSWt6XI/AAAAAAAAAoo/VVUOSXrlTVY/Filtered%20views.JPG?imgmax=160" alt="Filtered views.JPG" width="160" height="98" /></a></p>
<p>Use Filtered Views instead of Tables or Views, otherwise you will recieve errors when running the report after importing it :</p>
<pre class="brush: diff;">
An error has occurred during report processing.
Query execution failed for data set 'Test_Dataset'
For more information about this error navigate to the report server on the local server machine, or enable remote errors
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=401</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 asp.net postbacks and viewstate</title>
		<link>http://www.brutusonline.nl/?p=393</link>
		<comments>http://www.brutusonline.nl/?p=393#comments</comments>
		<pubDate>Fri, 29 May 2009 15:21:46 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[crm 4.0]]></category>
		<category><![CDATA[viewstate]]></category>
		<category><![CDATA[visual studio 2005]]></category>
		<category><![CDATA[visual studio 2008]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=393</guid>
		<description><![CDATA[A little while ago, I was having trouble with postbacks and databound dropdownlists in a custom ASP.NET applicaion for CRM 4.0. After struggling for a day and sticking my head in the sand for a month, I picked up the problem for the last time. I was going to nail this sucker! Going back to [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">A</span> little while ago, I was having trouble with postbacks and databound dropdownlists in a custom ASP.NET applicaion for CRM 4.0. After struggling for a day and sticking my head in the sand for a month, I picked up the problem for the last time. I was going to nail this sucker!</p>
<p>Going back to basics and suddenly I started thinking : But what was the solution?</p>
<p>Viewstate in ASP.NET! So after some digging, some google I found my hero : <a title="Gustaf" href="http://gustafwesterlund.blogspot.com/2007/12/problems-with-viewstate-in-aspx-page.html" target="_blank">Gustaf Westerlund</a>.<br />
Add this line to your web.config of your custom ASP.NET application for CRM 4.0 and you are done :</p>
<pre class="brush: xml;">
&lt;pages enableViewState=&quot;true&quot; /&gt;
</pre>
<p>Shame on me for not seeing that in an earlier stage!</p>
<p>The viewstate in your web.config in the root of your CRM installation is set to false. That means that every site &#8220;beneath&#8221; that root level is taking over this viewstate setting&#8230; To false! So basically&#8230; Viewstate is evil! ASP.NET is scary!</p>
<p>Ow&#8230;yeah&#8230; and don&#8217;t forget to enable this property for your databound controls :</p>
<pre class="brush: xml;">
AppendDataBoundItems=&quot;True&quot;
</pre>
<p>Dit lost dus voor mij een berg problemen met databinding en postbacks op, misschien heeft die ene trouwe lezer van mijn blog er wat aan? <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>This is solving a lot of databinding and postback problems! Maybe I&#8217;m helping that one reader of my blog with this? <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS: Gustaf, thank you very much!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=393</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 Duplicate Detection in code</title>
		<link>http://www.brutusonline.nl/?p=376</link>
		<comments>http://www.brutusonline.nl/?p=376#comments</comments>
		<pubDate>Fri, 01 May 2009 21:35:27 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[crm 4.0]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=376</guid>
		<description><![CDATA[Duplicate detection in CRM 4.0 is a nice tooling for frontend-users and works like a charm, but what if you want to do this in code? The MSDN API is not telling me enough and google search isn&#8217;t much of a help at all. Therefore I posted some code which shows creation of a contact-record with duplicate [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">D</span>uplicate detection in CRM 4.0 is a nice tooling for frontend-users and works like a charm, but what if you want to do <a href="http://blogs.msdn.com/crm/archive/2008/01/17/crm-4-system-wide-duplicate-detection.aspx" target="_blank">this</a> in code? The <a href="http://msdn.microsoft.com/en-us/library/bb928892.aspx" target="_blank">MSDN API</a> is not telling me enough and <a href="http://www.google.nl/search?hl=nl&amp;rlz=1C1GGLS_nlNL321NL321&amp;q=crm+4.0+c%23+duplicate+detection&amp;btnG=Zoeken&amp;meta=" target="_blank">google search</a> isn&#8217;t much of a help at all.</p>
<p>Therefore I posted some code which shows creation of a contact-record with duplicate detection :</p>
<pre class="brush: csharp;">
contact eenContact = new contact();
eenContact.firstname = &quot;Bert-Jan&quot;;
eenContact.lastname = &quot;Diedering&quot;;
eenContact.address1_city = &quot;Utrecht&quot;;

TargetCreateContact target = new TargetCreateContact();
target.Contact = eenContact;

CreateRequest request = new CreateRequest();
request.Target = target;
request.OptionalParameters = new OptionalParameter[]
{
new CreateDuplicatesOptionalParameter {Value = false}
};

CreateResponse response = (CreateResponse)client.Execute(request);
</pre>
<p>Also read a few <a title="CreateDuplicatesOptionalParameter" href="http://msdn.microsoft.com/en-us/library/bb928894.aspx" target="_blank">words</a> about the OptionalParameter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=376</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log4net in een C# .NET project</title>
		<link>http://www.brutusonline.nl/?p=347</link>
		<comments>http://www.brutusonline.nl/?p=347#comments</comments>
		<pubDate>Mon, 27 Apr 2009 20:33:03 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[log4net]]></category>
		<category><![CDATA[visual studio 2005]]></category>
		<category><![CDATA[visual studio 2008]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=347</guid>
		<description><![CDATA[Iedere keer als ik log4net logging wil gebruiken in een project, vergeet ik weer hoe dat ook al weer moest. De apache site is er ook niet echt duidelijk over, of je moet in de SDK gaan zitten zoeken. Voorbeelden staan her en der verspreid. Vanwege de wens om enige consistentie te creeeren in mijn [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">I</span>edere keer als ik log4net logging wil gebruiken in een project, vergeet ik weer hoe dat ook al weer moest. De apache site is er ook niet echt duidelijk over, of je moet in de SDK gaan zitten zoeken. Voorbeelden staan her en der verspreid. Vanwege de wens om enige consistentie te creeeren in mijn manier van logging en omdat ik graag overzicht heb, post ik hier de stappen om logging aan te zetten in je .NET project.</p>
<ol>
<li>Allereerst moeten we natuurlijk de log4net dll downloaden : <a href="http://logging.apache.org/log4net/download.html" target="_blank">http://logging.apache.org/log4net/download.html</a></li>
<li>Dan leggen we een referentie naar de dll.</li>
<li>Dan deze code bovenin je classes die je van logging wilt voorzien :</li>
<pre class="brush: csharp;">private static ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name);</pre>
<p><em>(owja MethodBase.GetCurrentMethod zit in de Sytem.Reflection class en op deze manier hoef je niet iedere keer een naam in te voeren die de huidige class representeerd&#8230;)</em></p>
<li>Vervolgens in de Page_Load van een Webapplicatie of in de Main van je console of Winforms applicatie :</li>
<pre class="brush: csharp;">XmlConfigurator.Configure();</pre>
<li>Dan in de config-file (app.config of web.config) een configSection toevoegen :</li>
<pre class="brush: xml;">&lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler, log4net&quot; /&gt;</pre>
<li>Onderaan de config-file je log4net configuratie toevoegen :</li>
<pre class="brush: xml; collapse: true; light: false; toolbar: true;">
&lt;log4net&gt;
&lt;appender name=&quot;ColoredConsoleAppender&quot; type=&quot;log4net.Appender.ColoredConsoleAppender&quot;&gt;
&lt;mapping&gt;
&lt;level value=&quot;ERROR&quot; /&gt;
&lt;foreColor value=&quot;White&quot; /&gt;
&lt;backColor value=&quot;Red, HighIntensity&quot; /&gt;
&lt;/mapping&gt;
&lt;layout type=&quot;log4net.Layout.PatternLayout, log4net&quot;&gt;

&lt;param name=&quot;ConversionPattern&quot; value=&quot;%date [%thread] %-5level %logger [%property{NDC}] - %message%newline&quot; /&gt;
&lt;/layout&gt;
&lt;/appender&gt;

&lt;appender name=&quot;GeneralFileLog&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;       &lt;file value=&quot;BertusTool.log&quot; /&gt;       &lt;appendToFile value=&quot;true&quot; /&gt;       &lt;maximumFileSize value=&quot;10000KB&quot; /&gt;       &lt;rollingStyle value=&quot;Size&quot; /&gt;       &lt;maxSizeRollBackups value=&quot;5&quot; /&gt;       &lt;layout type=&quot;log4net.Layout.PatternLayout, log4net&quot;&gt;         &lt;param name=&quot;ConversionPattern&quot; value=&quot;%date [%thread] %-5level %logger [%property{NDC}] - %message%newline&quot; /&gt;       &lt;/layout&gt;     &lt;/appender&gt;

&lt;!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --&gt;
&lt;root&gt;
&lt;level value=&quot;INFO&quot;/&gt;
&lt;appender-ref ref=&quot;GeneralFileLog&quot; /&gt;
&lt;appender-ref ref=&quot;ColoredConsoleAppender&quot; /&gt;
&lt;/root&gt;
&lt;/log4net&gt;
</pre>
<p>De eerste appender zorgt ervoor dat er een console geopend wordt, waarin gelogd wordt. De laatste appender is een fileappender.</p>
<li>In je code kun je dan bijvoorbeeld zeggen :</li>
<pre class="brush: csharp;">logger.Error(&quot;Help!&quot;, ex);</pre>
<li>Voor meer informatie over andere appenders :</li>
<p><a href="http://logging.apache.org/log4net/release/config-examples.html" target="_self">http://logging.apache.org/log4net/release/config-examples.html</a></ol>
<p>Zo&#8230; dat vergeet ik niet zo snel meer <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span style="color: #ff0000;"><em>Edit : Een collega van me bij Sogyo kwam met de melding dat hij een errormelding kreeg op de log4net configuratie zoals hierboven beschreven. Na een onderzoek kwam ik tot de conclusie dat de SyntaxHighlighter de value in het conversionPattern foutief weergeeft. Ik heb het pattern vervangen door een simpele, die wel correct wordt weergegeven (bron : </em></span><a href="http://logging.apache.org/log4net/release/config-examples.html"><span style="color: #ff0000;"><em>http://logging.apache.org/log4net/release/config-examples.html</em></span></a><span style="color: #ff0000;"><em>)</em></span></p>
<p><span style="color: #ff0000;"><em>Edit2 : André Boonzaaijer heeft een <a title="Standard logging in C# / .NET" href="http://whiletrue.nl/blog/?p=108" target="_blank">sheet </a></em><em>voor als je wilt weten hoe je standaard framework logging wilt gebruiken</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=347</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Q-tec S100 upgraden naar Windows Mobile 6.1</title>
		<link>http://www.brutusonline.nl/?p=346</link>
		<comments>http://www.brutusonline.nl/?p=346#comments</comments>
		<pubDate>Mon, 20 Apr 2009 21:23:52 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[mda]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=346</guid>
		<description><![CDATA[Eindelijk hoor ik er ook bij want ik heb het gedurft : mijn eigen telefoon te flashen. Een collega gaf me deze link. Zelf had hij zijn oude HTC Magician telefoon (a.k.a. Q-tec S100, a.k.a. T-Mobile MDA Compact) geflasht met deze rom. Nadat hij een ongeveer een week heeft getest, ben ik nu ook een trotse bezitter [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">E</span>indelijk hoor ik er ook bij want ik heb het gedurft : mijn eigen telefoon te flashen. Een collega gaf me <a href="http://forum.xda-developers.com/showthread.php?t=490948" target="_blank">deze</a> link. Zelf had hij zijn oude HTC Magician telefoon (a.k.a. Q-tec S100, a.k.a. T-Mobile MDA Compact) geflasht met deze rom. Nadat hij een ongeveer een week heeft getest, ben ik nu ook een trotse bezitter van een telefoon met Windows Mobile 6.1. Wel even wennen en naar mijn idee is het een skin die op WME 6.1 lijkt, maar dat doet er allemaal niet toe. Een <a href="http://www.cotulla.pp.ru/magician.jpg" target="_blank">oud beestje</a> maar dan met een nieuw en krachtiger OS, net als zijn <a href="http://www.htc.com/nl/product/tytnii/overview.html" target="_blank">jongere</a> broers.</p>
<p><img class="alignnone" title="Windows Mobile 6.1" src="http://cotulla.pp.ru/img/romscrn_o1.PNG" alt="" width="720" height="384" /></p>
<p> </p>
<p>Hier zijn mijn bevindingen :</p>
<ol>
<li>De looks zijn perfect!</li>
<li>Alle opties van Windows Mobile 2003 zitten er in, met nog een aantal extra.</li>
<li>Af en toe doen de notification geluiden (gebeld worden, reminders, smsjes) het niet meer. Wat hiervan de oorzaak is weet ik nog niet.</li>
<li>Internet explorer 6! Nadeel is wel dat veel websites niet ontdekken dat het een mobile internet explorer is dus daarom wordt de gehele pagina gerenderd ipv de mobile versie.</li>
<li>Voordeel van IE6 is dat aangetoond wordt hoeveel kb er nog geladen moet worden.</li>
<li>Bovenin de titel balk wordt aangegeven hoeveel GPRS bereik je eigenlijk hebt. Was eerder niet zo&#8230;</li>
<li>Bij het openen van een text bericht wordt de gehele conversatie weergegeven.</li>
<li>Het scherm is te locken/unlocken.</li>
<li>Phone en Contacts knop worden onderin weergegeven.</li>
<li>Knoppen die eerder verstopt zaten onder het toetsenbord, zijn nu beschikbaar onderin het scherm.</li>
<li>Maar liefst 5 skins oftewel themes!</li>
<li>Rete snel (oftewel ietsje sneller dan voorheen met Windows Mobile 2003) en de snelheid is aan te passen <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Het flashen van de ROM kan ook vanaf Radio version 1.13.00 (proefondervindelijk ondervonden)</li>
<li>Internetinstellingen van T-mobile was binnen paar minuten gebeurd.</li>
</ol>
<p><span style="color: #ff0000;"><strong>* Mad Props (of kudos) voor een zekere Rus genaamd </strong></span><a href="http://www.cotulla.pp.ru/Magician.html" target="_blank"><span style="color: #ff0000;"><strong>Cotulla</strong></span></a><span style="color: #ff0000;"><strong> !!</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=346</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRM 4.0 plugin for dummies</title>
		<link>http://www.brutusonline.nl/?p=275</link>
		<comments>http://www.brutusonline.nl/?p=275#comments</comments>
		<pubDate>Wed, 01 Apr 2009 11:43:46 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[crm 4.0]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[scenario's]]></category>
		<category><![CDATA[sogyo]]></category>
		<category><![CDATA[visual studio 2005]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=275</guid>
		<description><![CDATA[Wanneer je op onderzoek gaat in de wereld van plugins voor Microsoft Dynamics CRM 4.0, dan komen er vragen boven. Wat moet er gebeuren om een plugin te kunnen maken/gebruiken. Wat is bijvoorbeeld het verschil tussen een workflow en een plugin? Wat is de inhoud van de context gevoelige objecten? Is debuggen mogelijk en zo [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">W</span>anneer je op onderzoek gaat in de wereld van plugins voor Microsoft Dynamics CRM 4.0, dan komen er vragen boven. Wat moet er gebeuren om een plugin te kunnen maken/gebruiken. Wat is bijvoorbeeld het verschil tussen een workflow en een plugin? Wat is de inhoud van de context gevoelige objecten? Is debuggen mogelijk en zo ja : hoe? Daar kan ik een heel mooi epistel over schrijven maar <a href="http://mscrmuk.blogspot.com/2008/06/differences-between-workflow-and.html" target="_blank">dat</a> <a href="http://www.sadev.co.za/node/153" target="_blank">kunnen</a> <a href="http://blogs.msdn.com/ukcrm/archive/2008/07/08/creating-a-debugger-visualizer-for-dynamic-entities.aspx" target="_blank">anderen</a> ook.</p>
<p>Deze vragen worden in deze post beantwoord aan de hand van een scenario, om een beeld te krijgen van een mogelijk doel van een plugin.</p>
<p><span id="more-275"></span></p>
<h2>Scenario</h2>
<p>Stel : De afdeling Finance krijgt een brief binnen met daarin de melding dat een bepaalde medewerker schade heeft gereden aan de lease-auto. De Finance medewerker wil hiervan de medewerker op de hoogte stellen door middel van een email, maar er niet teveel tijd aan besteden. De stappen die de Finance medewerker dus zal doorlopen zijn de volgende :</p>
<ol>
<li>Zoek de desbetreffende medewerker op in CRM.</li>
<li>Start een nieuwe email activiteit voor de medewerker.</li>
<li>Koppel eventueel een attachment aan de email.</li>
<li>Kies een template die overeenkomt met de soort brief.</li>
<li>Klik op Send.*</li>
</ol>
<p>* Dit zou ook in bulk mogelijk moeten zijn : bijvoorbeeld alle medewerkers emailen hoeveel vakantie dagen ze nog hebben of dat de urenstaat nog ingevuld moet worden.</p>
<p>Omdat het over Finance emails gaan, en omdat de inhoud niet aan andere gebruikers van CRM zichtbaar mag zijn, moeten de emails afgeschermt worden, maar wel onder een medewerker komen te hangen in een soort van berichtgeschiedenis.</p>
<h2>Het idee</h2>
<p>Wat uit dit scenario op te maken is,  is het volgende :</p>
<p>Voordat een email gecreeerd wordt aan de hand van een speciale Finance template, moet de betreffende persoon in het Regarding veld (dus niet de Recipient) vervangen worden door een Finance Dossier van die persoon. De email komt hierdoor dan niet onder de History van Activities van de persoon zelf. De email komt nu in de History van Activities van het Finance Dossier van die persoon. Waarom? Omdat niet iedere CRM gebruiker hoeft te zien dat een medewerker een boete heeft gereden of schade veroorzaakt aan een lease-auto. Deze informatie is namelijk alleen nuttig voor de afdeling Finance. Dus : het dossier moet afgeschermt worden. Dit kan met behulp van Security Roles setten voor gebruikers groepen. Voordat de email verzonden moet worden,</p>
<h2>Stap 1 : Het begin</h2>
<p>Men neme de <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=dd939ed9-87a5-4c13-b212-a922cc02b469&amp;displaylang=en" target="_blank">CRM 4.0 VPC</a> van Microsoft, open het meegeleverde Visual Studio 2005 en start een nieuw Class Library project.</p>
<ul>
<li>Hernoem Class1 naar FinanceDossierPlugin (of iets anders moois)</li>
<li>Leg een <a title="Reference" href="http://picasaweb.google.com/lh/photo/y7hVkDmuAd7B5TSfL0rKzA?feat=directlink" target="_blank">referentie</a> naar de Microsoft.Crm.Sdk.dll en de Microsoft.Crm.SdkTypeProxy.dll.</li>
<li>Voeg een paar usings toe :</li>
</ul>
<pre class="brush: csharp;">using Microsoft.Crm.Sdk;
using System.IO;
using Microsoft.Crm.Sdk.Query;</pre>
<ul>
<li>Implementeer de interface IPlugin met Shift+ALT+F10</li>
<li>Om ook te kunnen loggen :</li>
</ul>
<pre class="brush: csharp; smart-tabs: true; tab-size: 4;">using (TextWriter logger = TextWriter.Synchronized(File.AppendText(@&quot;C:\Program Files\Microsoft Dynamics CRM Server\Trace\FinancePlugin.txt&quot;)))  {
//plugin code
}</pre>
<ul>
<li>Een try&#8230; catch om de code heen om InvalidPluginExecutionException af te vangen :</li>
</ul>
<pre class="brush: csharp; smart-tabs: true; tab-size: 4;">try {

}
catch(Exception ex)
{
string logMessage = &quot;Exceptie in de Finance plugin: &quot;;
log.WriteLine(logMessage + ex.Message);
throw new InvalidPluginExecutionException(logMessage, ex);
}</pre>
<ul>
<li>Nu gaan we bepalen of we in de goede context zitten :</li>
</ul>
<pre class="brush: csharp; smart-tabs: true; tab-size: 4;">if (  context.InputParameters.Properties.Contains(ParameterName.Target) &amp;&amp;
context.InputParameters.Properties[ParameterName.Target] is Microsoft.Crm.Sdk.DynamicEntity
)
{
Microsoft.Crm.Sdk.DynamicEntity entity = (Microsoft.Crm.Sdk.DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
if (entity.Name != EntityName.email.ToString())
{
log.WriteLine(&quot;De entiteit in deze context is geen email maar &quot; + entity.Name);
return;
}
if (context.Stage != (int)Microsoft.Crm.Sdk.MessageProcessingStage.AfterMainOperationOutsideTransaction)
{
log.WriteLine(&quot;Plugin moet in post-stage runnen!&quot;);
throw new InvalidPluginExecutionException(&quot;Plugin moet in post-stage runnen!&quot;);
}
// Business Logic
}
else
{
log.WriteLine(&quot;Verkeerde context...&quot;);
return;
}</pre>
<p>In regels 1 t/m 4 kijken we of de Message wel een Create opdracht is. Aan de hand van de target kun je dat bepalen. In regel 7 t/m 11 kijken we of het een email bericht betreft. We willen natuurlijk een actie uitvoeren voordat de email verstuurd wordt. In regel 12 t/m 16 wordt gekeken of we daadwerkelijk wel in de post-stage zitten.</p>
<h2>Stap 2 : Business logica</h2>
<p>Nu de business logica. De email moet dus voordat deze verzonden wordt het regarding veld omgezet hebben naar een bij een medewerker behorend contactpersoon. Hiervoor hebben we het Id van de email nodig omdat hier aan een contactpersoon gekoppeld zit. Met het emailId kunnen we het contactId ophalen, die we daarna kunnen gebruiken om de bijbehorende Finance Dossier op te halen en die te koppelen aan het regardingobjectid van de email. Vervolgens moet de email geupdate worden. De email wordt namelijk voor het verzenden opgeslagen als Activity.</p>
<pre class="brush: csharp; smart-tabs: true; tab-size: 4;">ICrmService service = context.CreateCrmService(false);   Guid EmailID = Guid.Empty;
Guid ContactID = Guid.Empty;
Guid FinanceDossierID = Guid.Empty;

if (context.OutputParameters.Properties.Contains(ParameterName.Id))
{
EmailID = new Guid(context.OutputParameters.Properties[ParameterName.Id].ToString());
if (entity.Properties.Contains(&quot;regardingobjectid&quot;))
{
email deEmail = (email)service.Retrieve(EntityName.email.ToString(), EmailID, new AllColumns());
if(deEmail.regardingobjectid.type == EntityName.contact.ToString())
{
ContactID = deEmail.regardingobjectid.Value;
DynamicEntity financeDossier = RetrieveFinanceDossier(ContactID, service);
Key financeSleutel = financeDossier.Properties[&quot;new_financedossierid&quot;] as Key;
FinanceDossierID = financeSleutel.Value;
}
deEmail.regardingobjectid.type = &quot;new_financedossier&quot;;
deEmail.regardingobjectid.Value = FinanceDossierID;
service.Update(deEmail);
}
} </pre>
<p>In regel 1 halen we de context afhankelijke CrmService op. Deze gebruiken we in regel 11 om de huidige email op te halen met alle kolommen. Om de custom entiteit op te halen die new_financedossier heet, heb ik een method gemaakt die RetrieveFinanceDossier heet.</p>
<p>In regel 12 t/m 18 verkrijgen we het FinanceDossierId die we nodig hebben om in regel 19 t/m 20 te koppelen aan het regardingobjectid van de email. In regel 21 updaten we de email.<br />
Aan het einde van deze post-send executie van de plugin, wordt de geupdate email verstuurd. Maar voordat onze plugin uberhaubt iets gaat doen, moet deze uiteraard eerst gedeployed worden.</p>
<div>Hieronder de uitwerking van de method die in regel 15 is gebruikt om een Dynamic Entity terug te geven.</div>
<pre class="brush: csharp; smart-tabs: true; tab-size: 4;">private DynamicEntity RetrieveFinanceDossier(Guid ContactID, ICrmService service) {    ConditionExpression con = new ConditionExpression();
con.AttributeName = &quot;new_financedossierlookupid&quot;;
con.Operator = ConditionOperator.Equal;
con.Values = new string[] { ContactID.ToString() };
FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.And;
filter.AddCondition(con);
QueryExpression query = new QueryExpression();
query.EntityName = &quot;new_financedossier&quot;;
query.ColumnSet = new AllColumns();
query.Criteria = filter;
RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
retrieve.Query = query;
retrieve.ReturnDynamicEntities = true;
RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)service.Execute(retrieve);
if (retrieved.BusinessEntityCollection.BusinessEntities.Count == 1)
{
return (DynamicEntity)retrieved.BusinessEntityCollection.BusinessEntities[0];
}
else
{
return null;
}
}</pre>
<h2><strong>Stap 3 : Plugin deployen</strong></h2>
<p>Voordat de CRM server de dll slikt, moet deze eerst gesigned worden.</p>
<ul>
<li>Sign het project door met de rechtermuisknop op het project klikken, Properties te kiezen en vervolgens het tabblad Signing.</li>
<li>Vink “Sign the assembly” aan.</li>
<li>Klik in de dropdownbox op New..</li>
<li>Kies in de popup een naam voor de plugin keyfile.</li>
<li>Zet het vinkje “Protect my key file with a password” uit.</li>
<li>Klik op OK.</li>
<li>Build het project.</li>
</ul>
<p>Nu het project gesigned is, hebben we de PluginRegistrationTool nodig. Deze is standaard meegeleverd met de SDK, maar die moet je dan nog wel zelf builden. Pas wel op dat je de referentie naar de webservices aanpast, voordat je gaat builden. Wanneer de build succesvol is, is het aan te raden om de Plugin Registration tool als Tool in Visual Studio op te nemen :</p>
<ul>
<li>Klik op tools, External Tools.</li>
<li>Klik in de popup op Add, en vul een naam.</li>
<li>Zoek de zojuist gebuilde executable op bij Command.</li>
<li>Vink “Use Output window” aan.</li>
<li>Vink “Close on exit” uit.</li>
<li>Klik op OK.</li>
</ul>
<p>Start nu de geregistreerde Visual Studio tool. Om connectie te kunnen maken met je CRM server moet je een paar connectie gegevens invullen :</p>
<ul>
<li>Een label (voor meerdere connecties)</li>
<li>Discovery Server (meestal localhost)</li>
<li>Poort (op de CRM 4.0 VPC van Microsoft is dat standaard 5555)</li>
<li>Domain niet invullen</li>
<li>User Name = administrator (moet als Security Role in CRM in de groep “System Administrators”)</li>
<li>Klik op Connect</li>
<li>Voer een wachtwoord in.</li>
<li>Nu de CrmService Url en de MetaDataService Url in beeld zijn, klik op Connect.</li>
</ul>
<p>Hieronder een screenshot van de Plugin Registration Tool :</p>
<p><a href="http://lh4.ggpht.com/_dhkT-YJsZkc/Sdp2Yi9bQuI/AAAAAAAAAmo/a02ukr3gZ7E/plugin%20registration%20tool.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh4.ggpht.com/_dhkT-YJsZkc/Sdp2Yi9bQuI/AAAAAAAAAmo/a02ukr3gZ7E/plugin%20registration%20tool.JPG?imgmax=160" alt="plugin registration tool.JPG" width="160" height="79" /></a></p>
<p>Zoek nu je zojuist gebuilde assembly op en kies voor de optie Disk (voor het debuggen in het Stap 4)<br />
Klik op Register Selected Plugins, gevolgd door OK van de popup.</p>
<p><a href="http://lh6.ggpht.com/_dhkT-YJsZkc/Sdp2YQ7254I/AAAAAAAAAmY/mvgZ-NlUaq4/plugin%20registration%20tool%20from%20disk.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh6.ggpht.com/_dhkT-YJsZkc/Sdp2YQ7254I/AAAAAAAAAmY/mvgZ-NlUaq4/plugin%20registration%20tool%20from%20disk.JPG?imgmax=160" alt="plugin registration tool from disk.JPG" width="141" height="160" /></a></p>
<p>Nu ga we een Step toevoegen. Een step is een actie die uitgevoerd moet worden. Een image is een exacte kopie van deze step, maar is alleen nodig als je meerdere servers hebt waar CRM op draait.</p>
<ul>
<li>Klap de Assembly op en klik met de rechtermuisknop op de plugin en kies “Register New Step”.</li>
<li>Dit scherm gaat het om. Hier voeren we de Step gegevens in.</li>
</ul>
<p><a href="http://lh5.ggpht.com/_dhkT-YJsZkc/Sdp2YTZ1DNI/AAAAAAAAAmg/oWO_3m23iQo/plugin%20registration%20tool%20register%20new%20step.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh5.ggpht.com/_dhkT-YJsZkc/Sdp2YTZ1DNI/AAAAAAAAAmg/oWO_3m23iQo/plugin%20registration%20tool%20register%20new%20step.JPG?imgmax=160" alt="plugin registration tool register new step.JPG" width="160" height="86" /></a></p>
<ul>
<li>Voer bij message “Create” in. Dit omdat we voordat een email gecreeerd (en verstuurd wordt) deze stap uit moet voeren.</li>
<li>Voer bij Primary entity “email” in</li>
<li>Voer bij Secondary entity “none” in.</li>
<li>Klik op “Register New Step”</li>
</ul>
<p>De nieuwe stap staat in de treeview onder de assembly. Naast de Create message kun je ook nog andere messages (voor andere stappen of steps) afvangen zoals Update of Delete.<br />
Nu gaan we de plugin testen.</p>
<h2>Stap 4 : Testen</h2>
<p>Voor het testen gaan we in CRM gaan we naar de browser van de client en selecteren een medewerker.</p>
<ul>
<li>Open het scherm voor de medewerker.</li>
<li>Klik op “Send Email”</li>
<li>Kies nu een template uit die je eerder aangemaakt hebt en klik op OK.</li>
<li>Zoals je ziet in onderstaand screenshot is, staat er in het regarding veld de medewerker naar wie we de email gaan sturen. Deze wordt zometeen door de plugin gewijzigd in het bijbehorende Finance Dossier.</li>
</ul>
<p><a href="http://lh4.ggpht.com/_dhkT-YJsZkc/Sdp165d6OYI/AAAAAAAAAlw/lDS1-igplsY/email%20regarding%20medewerker.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh4.ggpht.com/_dhkT-YJsZkc/Sdp165d6OYI/AAAAAAAAAlw/lDS1-igplsY/email%20regarding%20medewerker.JPG?imgmax=160" alt="email regarding medewerker.JPG" width="160" height="104" /></a></p>
<ul>
<li>Klik nu op “Send” om de email te verzenden.</li>
</ul>
<p>Om te kijken of alles gelukt is, gaan we naar de medewerker zijn Finance Dossier en zien daar een email staan die verstuurd is, aan de hand van een template.<br />
Open de email en zie dat het regarding veld verander is van de medewerker zijn of haar bijbehorende Finance Dossier :</p>
<p><span style="text-decoration: underline;"><a href="http://lh6.ggpht.com/_dhkT-YJsZkc/Sdp17JtL81I/AAAAAAAAAl4/wuSF5MVgRC0/finance%20dossier%20gekoppeld.JPG?imgmax=640"><img class="pie-img alignnone" style="margin: 10px 10px 10px 10px;" src="http://lh6.ggpht.com/_dhkT-YJsZkc/Sdp17JtL81I/AAAAAAAAAl4/wuSF5MVgRC0/finance%20dossier%20gekoppeld.JPG?imgmax=160" alt="finance dossier gekoppeld.JPG" width="160" height="91" /></a></span></p>
<p>En zoals ze in die filmpjes van Channel9 en ASP.NET altijd zo mooi kunnen zeggen : “And there you have it&#8230;” .</p>
<h2>Opmerkingen</h2>
<p>Een paar opmerkingen betreft deze uitwerking :</p>
<ol>
<li>De code in dit artikel houdt geen rekening met de selectie van meerdere medewerkers.</li>
<li>Wanneer je een contactpersoon (medewerker) enkel selecteerd en vervolgens op de email knop klikt, een template kiest en “Send” kiest, wordt de email niet aan een Finance Dossier gekoppeld (lees : komt in de History van bijbehorend Finance Dossier te staan). De email wordt in dit geval aan de History van de persoon zelf gekoppeld.</li>
<li>Voor bulkmail naar meerdere contactpersonen (medewerkers) moet je je step anders configureren. Misschien behandel ik dit in een volgende post.</li>
</ol>
<h2>Tracing</h2>
<p>Indien je tracing aangezet hebt voor CRM, kun je naast onze eigen plugin-logfile (FinanceDossier.txt) ook andere logging vinden in de volgende map :</p>
<pre class="brush: jscript;">C:\Program Files\Microsoft Dynamics CRM Server\Trace\*.*</pre>
<h2>Debugging</h2>
<p>Het debuggen van je plugin word goed beschreven op <a title="Debug CRM by Robert John" href="http://www.sadev.co.za/content/how-debug-workflow-assemblies-and-plug-ins-mscrm-40" target="_blank">deze site</a> van Robert John.</p>
<p>Tijdens het debuggen is het handig om je Dynamic Entity objecten weer te kunnen geven. Net als de standaard Debugger Visualizers van Visual Studio kan dat als je de stappen van deze site van Simon Hutson uitvoerd.</p>
<h2>Tenslotte</h2>
<p>Mijn blogposts zijn persoonlijk en schrijf ik in eigen tijd. Ze beschrijven meestal onderzoeken die ik voor mijn werk doe, maar dat geeft niet per definitie aan hoe ik bij Sogyo te werk ga.<br />
Plugins worden door Microsoft tot op zekere hoogte ondersteund, maar je blijft altijd zelf verantwoordelijk voor je code.</p>
<p>Mocht je vragen hebben met betrekking tot deze post of heb je hulp nodig met andere aanverwante CRM activiteiten, dan hoor ik dat graag!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=275</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ReSharper rocks!?</title>
		<link>http://www.brutusonline.nl/?p=254</link>
		<comments>http://www.brutusonline.nl/?p=254#comments</comments>
		<pubDate>Tue, 24 Mar 2009 22:45:06 +0000</pubDate>
		<dc:creator>Bert-Jan Diedering</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[ReSharper]]></category>
		<category><![CDATA[sogyo]]></category>
		<category><![CDATA[visual studio 2005]]></category>
		<category><![CDATA[visual studio 2008]]></category>

		<guid isPermaLink="false">http://www.brutusonline.nl/?p=254</guid>
		<description><![CDATA[Tenminste&#8230; dat was het subject van een email die ik laatst kreeg. Die mail bevatte een screencast om aan te tonen dat Resharper toch wel een hele fijne tool is. Maar hoe fijn is ReSharper? Persoonlijk ben ik van mening dat je lui bent als je ReSharper gebruikt. Aan de andere kant, hoe vaak gebeurd [...]]]></description>
			<content:encoded><![CDATA[<p><span class="dropcap">T</span>enminste&#8230; dat was het subject van een email die ik laatst kreeg. Die mail bevatte een screencast om aan te tonen dat <a title="ReSharper van Jetbrains" href="http://www.jetbrains.com/resharper/" target="_blank">Resharper</a> toch wel een hele fijne tool is.</p>
<h2>Maar hoe fijn is ReSharper?</h2>
<p>Persoonlijk ben ik van mening dat je lui bent als je ReSharper gebruikt. Aan de andere kant, hoe vaak gebeurd het niet dat je even niet meer weet hoe je iets moet implementeren? Of hoe vaak gebeurd het niet dat je het gevoel hebt, hetzelfde stukje code in een ander project opnieuw aan het typen bent?</p>
<p>En hoe vaak is die <a title="discussie" href="http://www.scottcreynolds.com/archive/2007/09/12/a-quarter-of-resharper---the-good-and-the-bad.aspx" target="_blank">discussie </a>al niet gevoerd op internet? Martin Fowler heeft zelfs de <a title="refactoring tools" href="http://refactoring.com/tools.html" target="_self">Tools</a> pagina op zijn refactoring site al uitgeschakeld. Een beetje googlen en het lijkt <a href="http://blog.excastle.com/2007/03/02/resharper-day-30-rename-including-viral-rename/" target="_blank">of</a> <a href="http://winterdom.com/weblog/PermaLink,guid,17b061fb-47bb-4c6c-a59c-0c168e2a4bf0.aspx" target="_blank">iedereen</a> <a href="http://frazzleddad.blogspot.com/2005/06/resharper-great-tool.html" target="_blank">er</a> toch wel met veel plezier gebruik van maakt! Er zijn zelfs fanatiekelingen die het <a href="http://twitter.com/citizenparker/statuses/1343481900" target="_blank">twitteren</a>!</p>
<h2>Ouderwets</h2>
<p>Noem me ouderwets, maar ik ben tegen. Okay, onderstaande screencast is dan wel een leuk voorbeeld van een pluspunt van ReSharper&#8230; Maar dat wil nog niet zeggen dat ik ook lui ga worden! Liever klop ik zelf mijn code zodat ik weet wat ik maak, dan dat ik tv ga kijken en ondertussen een ingewikkelde applicatie schrijf&#8230; Of&#8230;</p>
<p><object width="907" height="562" data="http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/bootstrap.swf" type="application/x-shockwave-flash"><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="flashVars" value="thumb=http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/FirstFrame.jpg&amp;containerwidth=907&amp;containerheight=562&amp;content=http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/resharper.swf" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="allowScriptAccess" value="always" /><param name="base" value="http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/" /><param name="src" value="http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/bootstrap.swf" /><param name="flashvars" value="thumb=http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/FirstFrame.jpg&amp;containerwidth=907&amp;containerheight=562&amp;content=http://content.screencast.com/users/bjdiedering/folders/Default/media/884ce1d9-e06f-41ed-b353-db1ce7bd5ec7/resharper.swf" /><param name="allowfullscreen" value="true" /></object></p>
<p><span style="color: #ff0000;"><em>Let op : Ondanks dat ik van een resharpende collega deze screencast kreeg en dat ik het woord &#8220;lui&#8221; heb genoemd, wil dat niet zeggen dat mijn werkgever luie mensen in dienst heeft <img src='http://www.brutusonline.nl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brutusonline.nl/?feed=rss2&amp;p=254</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
