﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Brian Dukes</title>
    <description>This is the blog of Brian Dukes, a software developer at Engage Software with interest in Security and Design Patterns.</description>
    <link>http://www.engagesoftware.com/Blog/BlogId/11.aspx</link>
    <language>en-US</language>
    <managingEditor>bdukes@engagesoftware.com</managingEditor>
    <webMaster>support@engagesoftware.net</webMaster>
    <pubDate>Thu, 28 Aug 2008 08:38:32 GMT</pubDate>
    <lastBuildDate>Thu, 28 Aug 2008 08:38:32 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.3.0.16726</generator>
    <item>
      <title>Engage: Events Alpha.2 is released!</title>
      <description>We've released the next Alpha release of the Engage: Events module for DotNetNuke.  Try it out and let us know what you think and what you'd like to see from this module.  </description>
      <link>http://www.engagesoftware.com/Blog/EntryID/153.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/153.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=153</guid>
      <pubDate>Thu, 24 Jul 2008 16:04:34 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=153</trackback:ping>
    </item>
    <item>
      <title>Announcing the Alpha release of Engage: Events!</title>
      <description>We've been hard at work to create a new DotNetNuke module to manage your website's events.  Take a look and let us know where you want us to go with it.</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/152.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/152.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=152</guid>
      <pubDate>Tue, 15 Jul 2008 19:40:42 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=152</trackback:ping>
    </item>
    <item>
      <title>A DotNetNuke CSS Selector Skin Object</title>
      <description>On our DotNetNuke module demo site, we have a little selector (pictured above) in the upper right hand corner that lets you pick how wide you would like the site to appear.  This is based on a similar mechanism on the DNN site.  Folks have been asking about it, so feel free to register on our site and grab it for yourself (for free).</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/145.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/145.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=145</guid>
      <pubDate>Wed, 30 Apr 2008 20:38:00 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=145</trackback:ping>
    </item>
    <item>
      <title>Hierarchical checkbox selection with an Infragistics UltraWebGrid</title>
      <description>&lt;p class="MsoNormal"&gt;I was tasked yesterday with adjusting a hierarchical Infragistics WebGrid (2007.2, but I don’t expect that it’s substantially different in any other recent versions) so that when a checkbox was checked in a parent row that the children rows’ checkboxes were also checked.&lt;span style=""&gt;  &lt;/span&gt;This proved much more difficult than I expected, in part because I overlooked the client-side event that I needed to use.&lt;span style=""&gt;  &lt;/span&gt;After struggling with trying to figure out what server side or client side event would fire after a checkbox was checked, I finally found the AfterCellUpdate client side event.&lt;span style=""&gt;  &lt;/span&gt;There were a few other gotchas that cropped up along the way too, so I thought I’d share my final product for anyone else who might want this same behavior.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To wire up the event, you need to set the DisplayLayout.ClientSideEvents.AfterCellUpdateHandler property to the name of the JavaScript function that should handle that event (ugUnitTypes_AfterCellUpdate in my case).&lt;span style=""&gt;  &lt;/span&gt;If this isn’t exactly what you need, the &lt;a href="http://www.engagesoftware.com”" http:="" help.infragistics.com="" help="" netadvantage="" net="" clr2.0=""&gt;WebGrid CSOM topic&lt;/a&gt; in Infragistics’ help documentation was indispensible for traversing their particular brand of JavaScript jungle.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this helps you.&lt;style type="text/css"&gt; #out {font: normal 10pt Consolas,Courier,"Courier New",monospace; background: #f5f5f5;} .keyword {color:#0000ff;} .object {color:#ff00ff;} .literal {color:#cc9966;} .comment {color:#999999;}&lt;/style&gt;&lt;/p&gt;
&lt;pre class="javascript" style="border: 1px solid rgb(180, 208, 220); background-color: rgb(236, 248, 255);"&gt;&lt;div id="out"&gt;&lt;span class="keyword"&gt;function&lt;/span&gt; ugUnitTypes_AfterCellUpdate(gridName, cellId) { &lt;br /&gt;&lt;span class="keyword"&gt;  var&lt;/span&gt; cell = igtbl_getCellById(cellId); &lt;br /&gt;&lt;span class="keyword"&gt;  if&lt;/span&gt; (cell &amp;&amp; cell.Band.Index === 0 &amp;&amp; cell.Column.ColumnType === 3) { &lt;br /&gt;&lt;span class="keyword"&gt;    var&lt;/span&gt; parentValue = cell.getValue(); &lt;br /&gt;&lt;span class="keyword"&gt;    var&lt;/span&gt; children = cell.Row.getChildRows(); &lt;br /&gt;&lt;span class="keyword"&gt;    for&lt;/span&gt; (i = 0; i &lt; children.length; i++) { &lt;br /&gt;&lt;span class="keyword"&gt;      var&lt;/span&gt; childCell = igtbl_getRowById(children[i].id).getCellFromKey( &lt;span class="literal"&gt;'Selected'&lt;/span&gt; ); &lt;br /&gt;      childCell.setValue(parentValue); &lt;br /&gt;    } &lt;br /&gt;  } &lt;br /&gt;}&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/141.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/141.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=141</guid>
      <pubDate>Tue, 15 Apr 2008 16:40:25 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=141</trackback:ping>
    </item>
    <item>
      <title>Introducing Engage: Rotator 1.2</title>
      <description>Today marks the release of the next version of our content rotation module for DotNetNuke, Engage: Rotator.</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/137.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/137.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=137</guid>
      <pubDate>Wed, 19 Mar 2008 14:59:41 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=137</trackback:ping>
    </item>
    <item>
      <title>Announcing Engage: Employment 1.3</title>
      <description>&lt;p&gt;We at &lt;a mce_href="http://www.engagesoftware.com" href="http://www.engagesoftware.com"&gt;Engage Software&lt;/a&gt; have just released the latest update to our &lt;a href="http://www.dotnetnuke.com/DesktopModules/LinkExchange/Reciprocate.aspx?linkid=208"&gt;DotNetNuke&lt;/a&gt; Jobs Listing module, &lt;a mce_href="http://www.engagemodules.com/Modules/EngageEmployment.aspx" href="http://www.engagemodules.com/Modules/EngageEmployment.aspx"&gt;Engage: Employment&lt;/a&gt;, version 1.3.  This is a module you can use on your company's &lt;a href="http://www.dotnetnuke.com/DesktopModules/LinkExchange/Reciprocate.aspx?linkid=208"&gt;&lt;acronym title="DotNetNuke"&gt;DNN&lt;/acronym&gt;&lt;/a&gt; site to list the job openings you have available at your various locations, and accept and sort applications and applicants.&lt;/p&gt;
&lt;p&gt;In this version we have made significant enhancements to searching both within the module and through &lt;a href="http://www.dotnetnuke.com/DesktopModules/LinkExchange/Reciprocate.aspx?linkid=208"&gt;&lt;acronym title="DotNetNuke"&gt;DNN&lt;/acronym&gt;&lt;/a&gt;.  Searches return more relevant results and are now marked to show why they are relevant.  The module is also indexed by &lt;a href="http://www.dotnetnuke.com/DesktopModules/LinkExchange/Reciprocate.aspx?linkid=208"&gt;&lt;acronym title="DotNetNuke"&gt;DNN&lt;/acronym&gt;&lt;/a&gt;'s search indexer now, which incidentally also allows for the module to be syndicated through an &lt;acronym title="Really Simple Syndication"&gt;RSS&lt;/acronym&gt; feed.&lt;/p&gt;
&lt;p&gt;We also added the ability for applicants to return and update their application, including their resumé and cover letter, as well as their salary requirement and application message.&lt;/p&gt;
&lt;p&gt;Lastly we began the update to the administrative side of the module, rearranging the applications to be grouped by job opening.&lt;/p&gt;
&lt;p&gt;Feel free to check out this and all of our other modules at our demo site, &lt;a mce_href="http://demo.engagemodules.com" href="http://demo.engagemodules.com"&gt;http://demo.engagemodules.com&lt;/a&gt;, where you can feel free to try out all that the module has to offer and see if it will meet your needs.  We're very excited to be able to support the requests of our community with this new release and with our future plans for the module.&lt;/p&gt;</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/136.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/136.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=136</guid>
      <pubDate>Fri, 22 Feb 2008 17:01:21 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=136</trackback:ping>
    </item>
    <item>
      <title>Editing .SqlDataProvider scripts within Visual Studio</title>
      <description>&lt;p&gt;&lt;style type="text/css"&gt;



pre
{
background-color:#FCFBF8;
border-color:#CCCCCC;
border-style:solid;
border-width:1px 1px 1px 2px;
line-height:1.2em;
margin:1em auto;
overflow: auto;
*/ overflow-y: hidden;
padding:1em;
width:550px;
height: 45px;
}&lt;/style&gt;&lt;/p&gt;
&lt;p&gt;I had finally had it.  I was no longer accepting the lack of tool support while editing the .SqlDataProvider scripts for DotNetNuke modules.  I needed to figure out a way to make Visual Studio treat those files as if they ended with .sql instead of .SqlDataProvider so that it would give me syntax highlighting for my SQL scripts.  Finally, I found &lt;a href="http://www.garagegames.com/index.php?sec=mg&amp;mod=resource&amp;page=view&amp;qid=4196"&gt;an article&lt;/a&gt; about doing the same sort of thing for Torque files.  I don't have any idea what Torque is, but what I found there seemed to do the trick.&lt;/p&gt;
&lt;p&gt; NOTE: The below tip involves editing the registry.  No warranty is expressed or implied.  &lt;a href="http://en.wiktionary.org/wiki/your_mileage_may_vary"&gt;&lt;acronym title="Your Mileage May Vary"&gt;YMMV&lt;/acronym&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What I learned from the above linked article is that the file associations are controlled in the registry.  By simply adding a .sqldataprovider key to the correct location and giving it the same value as the .sql key, everything magically works as expected.&lt;/p&gt;
&lt;p&gt;The key to create is HKLM:\SOFTWARE\Microsoft\VisualStudio\&lt;version&gt;\Languages\File Extensions\.sqldataprovider where version is 7.1 for Visual Studio .NET 2003, 8.0 for Visual Studio 2005, etc.  Those are the two versions I updated, so those are the two I'm sure of.  You should be able to find other versions without too much trouble.  If you're into &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;PowerShell&lt;/a&gt; (I'm getting there), here are the four seperate commands to run in order to add this functionality to those two versions of Visual Studio.&lt;/p&gt;
&lt;p&gt;For Visual Studio .NET 2003&lt;/p&gt;
&lt;pre&gt;New-Item -Path 'HKLM:\SOFTWARE\Microsoft\VisualStudio\7.1\Languages\File Extensions\.sqldataprovider'&lt;br /&gt;set-itemproperty -Path 'HKLM:\SOFTWARE\Microsoft\VisualStudio\7.1\Languages\File Extensions\.sqldataprovider' -name "(default)" -value "{A5C4C661-62BB-11D1-9CFD-0000F81E818C}"&lt;/pre&gt;
&lt;p&gt; For Visual Studio 2005:&lt;/p&gt;
&lt;pre&gt;New-Item -Path 'HKLM:\SOFTWARE\Microsoft\VisualStudio\8.0\Languages\File Extensions\.sqldataprovider'&lt;br /&gt;set-itemproperty -Path 'HKLM:\SOFTWARE\Microsoft\VisualStudio\8.0\Languages\File Extensions\.sqldataprovider' -name "(default)" -value "{FA6E5E79-C8EE-4D37-B79A-5067F8BD5630}"&lt;/pre&gt;
&lt;p&gt;Hope it helps!&lt;/p&gt;</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/117.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/117.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=117</guid>
      <pubDate>Fri, 22 Feb 2008 17:00:47 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=117</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke and Browser-Independent Default Buttons</title>
      <description>Have you ever used the DefaultButton property on an ASP.NET Panel, only to find that it doesn't work in Firefox?  Here's an easy way to use DotNetNuke's ClientAPI to acheive the same result for more than just IE.</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/78.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/78.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=78</guid>
      <pubDate>Fri, 22 Feb 2008 16:57:07 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=78</trackback:ping>
    </item>
    <item>
      <title>Navigating With Environment Variables</title>
      <description>&lt;p&gt;As a developer, and specifically as a &lt;a href="http://weblogs.asp.net/controlpanel/blogs/www.dotnetnuke.com" mce_href="http://weblogs.asp.net/controlpanel/blogs/www.dotnetnuke.com"&gt;DotNetNuke&lt;/a&gt; developer, there are a number of directories that I have to navigate to regularly.  In particular with DotNetNuke, I'm going to C:\inetpub\wwwroot\DotNetNuke\Website\DesktopModules quite a bit.  So, instead of having to try to type that in all the time, or navigate through the folder structure, I've &lt;a href="http://support.microsoft.com/kb/310519/en-us" mce_href="http://support.microsoft.com/kb/310519/en-us"&gt;defined an environment variable&lt;/a&gt; "dm" that is defined as that path to my Desktop Modules folder.  I can just type %dm% into an explorer prompt and be there without any hassle.  I've also setup a %wwwroot% shortcut, though it gets used much less often.  It's a lot like keeping a shortcut around in your dock/quick launch toolbar, but you can also use it in dialogs.  Hopefully this can help you trim off a few more seconds/minutes of monotony throughout your day.&lt;/p&gt;
&lt;p&gt;What other solutions do y'all have for getting around to your often used files/folders?&lt;/p&gt;</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/129.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/129.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=129</guid>
      <pubDate>Tue, 29 Jan 2008 20:44:39 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=129</trackback:ping>
    </item>
    <item>
      <title>Engage: Employment 1.2 has been released!</title>
      <description>&lt;p&gt;We have released a major update for &lt;a href="http://www.engagemodules.com/Modules/EngageEmployment/tabid/71/Default.aspx"&gt;Engage: Employment&lt;/a&gt;, our DNN job listing module.  In version 1.2, we have added a number of new features and fixed all known bugs from version 1.1.&lt;/p&gt;
&lt;p&gt;The most exciting new feature for Employment is the addition of Job Groups, which will allow much more customization and flexibility when using the module.  You can now assign jobs into job groups, and then set up various modules to display and edit specific job groups.  Before now, there was no way to segregate your jobs, every module always showed every job.  Now, you can separate jobs between locations or categories, or any way that you want.  In addition, you can also assign different security permissions to each module to better control who gets to create and update various job listings on your site.&lt;/p&gt;
&lt;p&gt;Once you upgrade, you can add the Engage: Employment Job Group Admin module onto a page, and create the groups that you need and then assign your existing jobs into the groups.  After you assign a module to a specific group, every new job created from that module will automatically belong to that group, so it should be a pretty seamless experience in most cases, after the initial setup.&lt;/p&gt;
&lt;p&gt;In addition to job groups, we also added a number of user-requested features to the application process.  We have added cover letter and lead fields to help you collect more information from your applicants.  We also added an options page to the Job Details module that lets you determine which fields you want to display and require.  Also, we now allow anonymous users to apply for job listings, once that setting has been set.&lt;/p&gt;
&lt;p&gt;We've worked hard to make sure that this new release is something that will meet your needs and look good doing it.  We still have big plans for the future of this module, but are very pleased with where we've landed in version 1.2.&lt;/p&gt;</description>
      <link>http://www.engagesoftware.com/Blog/EntryID/126.aspx</link>
      <author>bdukes@engagesoftware.com</author>
      <comments>http://www.engagesoftware.com/Blog/EntryID/126.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.engagesoftware.com/Default.aspx?tabid=297&amp;EntryID=126</guid>
      <pubDate>Wed, 09 Jan 2008 22:44:21 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.engagesoftware.com/DesktopModules/Blog/Trackback.aspx?id=126</trackback:ping>
    </item>
  </channel>
</rss>