<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.codesmithtools.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Jeff Gonzalez</title><subtitle type="html" /><id>http://community.codesmithtools.com/blogs/jgonzalez/atom.aspx</id><link rel="alternate" type="text/html" href="http://community.codesmithtools.com/blogs/jgonzalez/default.aspx" /><link rel="self" type="application/atom+xml" href="http://community.codesmithtools.com/blogs/jgonzalez/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2007-03-25T20:31:00Z</updated><entry><title>Tips &amp; Tricks: CodeSmith Maps</title><link rel="alternate" type="text/html" href="/blogs/jgonzalez/archive/2007/06/09/tips-amp-tricks-codesmith-maps.aspx" /><id>/blogs/jgonzalez/archive/2007/06/09/tips-amp-tricks-codesmith-maps.aspx</id><published>2007-06-10T04:01:00Z</published><updated>2007-06-10T04:01:00Z</updated><content type="html">&lt;div&gt;CodeSmith Maps allow developers to reduce the amount of plumbing code in their templates and increase the readability and re usability at the same time. Maps provide a named dictionary like semantic to template development.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;While developing templates, a common scenario developers face is accessing a lookup list based on some sort of information. A common example is a mapping between CLR data types and SQL Server data types. Before CodeSmith maps, this functionality would have been accomplished by writing a method with a switch/Select Case statement.&lt;br /&gt;&lt;br /&gt;Before CodeSmith Maps, your template code might contain methods like this:&lt;br /&gt;&lt;br /&gt;
&lt;div style="PADDING-RIGHT:0pt;PADDING-LEFT:0pt;FONT-SIZE:10pt;FLOAT:left;PADDING-BOTTOM:0pt;MARGIN:0pt;WIDTH:30px;PADDING-TOP:0pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;,Courier,monospace;TEXT-ALIGN:right;"&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;4&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;5&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;6&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;7&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;8&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;9&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;10&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;11&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;13&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;14&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;15&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;16&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;17&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;18&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;19&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;20&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;21&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;22&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;23&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;24&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;25&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="FONT-SIZE:10pt;MARGIN:0pt 35px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;,Courier,monospace;"&gt;
&lt;div style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;,Courier,monospace;"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;String&amp;nbsp;GetFrameworkType(ColumnSchema&amp;nbsp;column&lt;img style="VERTICAL-ALIGN:bottom;" alt="wrap glyph" src="http://www.zedilabs.com/wrapglyph.png" /&gt;&lt;br /&gt;)&amp;nbsp; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;switch&lt;/span&gt;(column.DataType)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.AnsiString:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.AnsiStringFixedLength: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.String: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.StringFixedLength:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="quotedstring"&gt;&amp;quot;String&amp;quot;&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.Binary: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="quotedstring"&gt;&amp;quot;Byte[]&amp;quot;&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.Boolean:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="quotedstring"&gt;&amp;quot;Boolean&amp;quot;&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.Byte:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="quotedstring"&gt;&amp;quot;Byte&amp;quot;&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.Currency: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.Decimal: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;DbType.VarNumeric:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="quotedstring"&gt;&amp;quot;Decimal&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CodeSmith Map files allow us to create named Maps using the new Map Editor like this:&lt;br /&gt;&lt;img src="http://community.codesmithtools.com/photos/tutorials/images/24225/original.aspx" alt="" /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Once we have saved this mapping file (using the .csmap extension), we can reference it in our template using &lt;span&gt;&amp;nbsp;&lt;/span&gt;the Map directive.&lt;span&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;lt;%@ Map &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name=&amp;quot;SqlToClrTypes&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src=&amp;quot;Sql-System.csmap&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=&amp;quot;A Mapping of SQL Server data types to .NET Framework data types&amp;quot; %&amp;gt;&lt;br /&gt;&lt;br /&gt;BigInt:&amp;lt;%=SqlToClrTypes[&amp;quot;bigint&amp;quot;]%&amp;gt;&lt;br /&gt;Binary:&amp;lt;%=SqlToClrTypes[&amp;quot;binary&amp;quot;]%&amp;gt;&lt;br /&gt;Bit:&amp;lt;%=SqlToClrTypes[&amp;quot;bit&amp;quot;]%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code would result in the following output:&lt;br /&gt;BigInt:System.Int64&lt;br /&gt;Binary:System.Object&lt;br /&gt;Bit:System.Boolean&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Another scenario might involve mapping .NET Framework types to specific server control types.&lt;span&gt;&amp;nbsp; &lt;/span&gt;For example, on one project you might be required to use the standard ASP.NET server controls such as TextBox, DropDownList, or Menu, but another project might require ASP.NET Ajax controls.&lt;span&gt;&amp;nbsp; &lt;/span&gt;CodeSmith Maps allow you to write the code for your interface pages one time, but interchange mapping references to produce different results.&lt;span&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;There are countless scenarios where CodeSmith Maps can drastically reduce the amount of effort needed during template development.&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.codesmithtools.com/aggbug.aspx?PostID=25107" width="1" height="1"&gt;</content><author><name>shannon</name><uri>http://community.codesmithtools.com/members/shannon/default.aspx</uri></author><category term="Tips &amp;amp; Tricks" scheme="http://community.codesmithtools.com/blogs/jgonzalez/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx" /></entry><entry><title>My new-new job</title><link rel="alternate" type="text/html" href="/blogs/jgonzalez/archive/2007/03/25/my-new-new-job.aspx" /><id>/blogs/jgonzalez/archive/2007/03/25/my-new-new-job.aspx</id><published>2007-03-26T01:31:00Z</published><updated>2007-03-26T01:31:00Z</updated><content type="html">I almost forgot...I start my new job tomorrow. It is at a little place you might have heard of... CodeSmith Tools ! Eric and I have been wanting to work together for awhile now, but the timing always seemed off. I am excited to be working there, not only do I get to sponge knowledge off Eric&amp;#39;s greatness, but we are in the same offices as Telligent, so I should be working in the vicinity of some really smart people. I also am getting reunited with my boss from my last job, Shannon (still no blog...(&lt;a href="http://community.codesmithtools.com/blogs/jgonzalez/archive/2007/03/25/my-new-new-job.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.codesmithtools.com/aggbug.aspx?PostID=25052" width="1" height="1"&gt;</content><author><name>Anonymous</name><uri>http://community.codesmithtools.com/members/Anonymous/default.aspx</uri></author><category term="new job" scheme="http://community.codesmithtools.com/blogs/jgonzalez/archive/tags/new+job/default.aspx" /><category term="codesmith" scheme="http://community.codesmithtools.com/blogs/jgonzalez/archive/tags/codesmith/default.aspx" /></entry></feed>