<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Christian's Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/cabeln/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/cabeln/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-03-24T10:31:00Z</updated><entry><title>Announcement: Treemap Business Data Visualization available on PartnerSource and CustomerSource</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/12/05/announcement-treemap-business-data-visualization-available-on-partnersource-and-customersource.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/12/05/announcement-treemap-business-data-visualization-available-on-partnersource-and-customersource.aspx</id><published>2009-12-05T10:48:00Z</published><updated>2009-12-05T10:48:00Z</updated><content type="html">&lt;P&gt;Christmas is near and I am proud to have a colorful present for the Dynamics NAV community. &lt;/P&gt;
&lt;P&gt;The “Treemap Business Data Visualization for Microsoft Dynamics NAV 2009 SP1 – Partner Community Edition” is available for download &lt;A href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/BusinessDataVisualization_NAV2009" target=_blank mce_href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/BusinessDataVisualization_NAV2009"&gt;here on PartnerSource&lt;/A&gt; and &lt;A href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm" target=_blank mce_href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm"&gt;on CustomerSource&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://www.cooldudette.net/BlogFiles/AnnouncementTreemapBusinessDataVisualiza_94F4/image_thumb.png" width=624 height=363&gt;&lt;/P&gt;
&lt;H1&gt;For the restless reader (“in a few words”)&lt;/H1&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=10 width=801&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=10 align=middle&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png"&gt;&lt;IMG title=GoldenCaller border=0 alt=GoldenCaller src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png" width=134 height=134 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=789&gt;
&lt;P&gt;“Treemap Business Data Visualization for Microsoft Dynamics NAV 2009 SP1 – Partner Community Edition” is available for download &lt;A href="https://mbs.microsoft.com/Cms/Templates/document/General.aspx?NRMODE=Published&amp;amp;NRNODEGUID=%7b68881783-5AC9-4124-95FE-D067F9626974%7d&amp;amp;NRORIGINALURL=%2fpartnersource%2fdeployment%2fresources%2fproductreleases%2fBusinessDataVisualization_NAV2009&amp;amp;NRCACHEHINT=Guest" target=_blank&gt;here on PartnerSource&lt;/A&gt; and also &lt;A href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm" mce_href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm"&gt;on CustomerSource&lt;/A&gt;.&lt;/P&gt;You will find a whitepaper that explains how to quickly setup a demo integration that comes with the Add-in. Then it will dive into using the Add-in in custom application scenarios. (Excepts from the high level overview are contained in this post.) &lt;BR&gt;&lt;BR&gt;From the same page on PartnerSource and CustomerSource you may access a packaged Control Add-in with all client side libraries, server side application objects and components.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;Please review the&amp;nbsp;&lt;A href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/BusinessDataVisualization_NAV2009" target=_blank mce_href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/BusinessDataVisualization_NAV2009"&gt;landing page on PartnerSource&lt;/A&gt;, &lt;A href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm" target=_blank mce_href="https://mbs.microsoft.com/customersource/documentation/setupguides/BusinessDataVisualization_NAV2009.htm"&gt;on CustomerSource&lt;/A&gt;&amp;nbsp;or use the links below to&amp;nbsp;download the deliverables right away.&lt;BR&gt;
&lt;TABLE width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="https://mbs.microsoft.com/downloads/partner/Nav/whitepapers/PartnerCommunityEdition_TreemapBusinessDataVisualization_NAV09.pdf" target=_blank&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" border=0 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt; Download the &lt;STRONG&gt;whitepaper&lt;/STRONG&gt; from PartnerSource&lt;/A&gt;&amp;nbsp;or &lt;A href="https://mbs.microsoft.com/downloads/customer/NAV/Whitepapers/PartnerCommunityEdition_TreemapBusinessDataVisualization_NAV09.pdf" target=_blank mce_href="https://mbs.microsoft.com/downloads/customer/NAV/Whitepapers/PartnerCommunityEdition_TreemapBusinessDataVisualization_NAV09.pdf"&gt;here from CustomerSource&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="https://mbs.microsoft.com/downloads/partner/Nav/whitepapers/PartnerCommunityEdition_TreemapBusinessDataVisualization_NAV09.pdf" target=_blank&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt;&lt;/A&gt;&lt;A href="https://mbs.microsoft.com/downloads/partner/Nav/Product/TreemapBusinessDataVisualizationforMicrosoftDynamicsNAV_ver_1_0_6_PartnerCommunityEdition.zip" target=_blank&gt;Download the &lt;STRONG&gt;complete package&lt;/STRONG&gt; from PartnerSource&lt;/A&gt;&amp;nbsp;or &lt;A href="https://mbs.microsoft.com/downloads/customer/NAV/2009/TreemapBusinessDataVisualizationforMicrosoftDynamicsNAV_ver_1_0_6_PartnerCommunityEdition.zip" target=_blank mce_href="https://mbs.microsoft.com/downloads/customer/NAV/2009/TreemapBusinessDataVisualizationforMicrosoftDynamicsNAV_ver_1_0_6_PartnerCommunityEdition.zip"&gt;here from CustomerSource&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;As some of you know, I am driving for extensibility options in Dynamics NAV, which will bring even richer and tailored UI to Dynamics NAV users and at the same time open new business opportunities for our partners.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H4&gt;BUSINESS DATA VISUALIZATIONS&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;&lt;/EM&gt;This is the framework that should help to become a player in this business domain. Business Data Visualizations are characterized by five simple pillars. &lt;/P&gt;
&lt;H5&gt;Picture your business (delivers mental models).&lt;/H5&gt;
&lt;P&gt;Visualizations provide a mental model for business data and data dependencies. It can be characterized by the saying, “A picture is worth a thousand words.” By seeing a visual representation of data and data dependencies, even nonexpert users can more easily understand business data.&lt;/P&gt;
&lt;H5&gt;Understand your business; know state and trends (provides insight).&lt;/H5&gt;
&lt;P&gt;Visualizations are an entry point for understanding the current state of a business and trends. Users can drill down and filter data to provide intuitive, &lt;I&gt;ad hoc&lt;/I&gt; analysis.&lt;/P&gt;
&lt;H5&gt;Know how to act (identifies actionable tasks).&lt;/H5&gt;
&lt;P&gt;Users can find items of interest and outliers in business data that are based on certain objectives or measures. Those outliers can be converted into high-priority actionable tasks and possible actions.&lt;/P&gt;
&lt;H5&gt;Act wisely (provides decision support, problem solvers, and optimization).&lt;/H5&gt;
&lt;P&gt;Problem solvers and optimizers help users decide on a strategy. They can provide suggestions for an action strategy that can lead to an optimal result for one or more objectives.&lt;/P&gt;
&lt;H5&gt;Understand consequences (visualizes consequences before acting).&lt;/H5&gt;
&lt;P&gt;Visualizations help users understand the impact of actions before they are committed. Visualizers can account for dependencies, predict the outcome of actions, and provide visualizations to users.&lt;/P&gt;
&lt;H4&gt;THE &lt;A title=_Toc247476420 name=_Toc247476420&gt;&lt;/A&gt;TREEMAP BUSINESS DATA VISUALIZATION&lt;/H4&gt;
&lt;P&gt;This is the first release of a Business Data Visualization that covers a few of the pillars above.&lt;/P&gt;
&lt;P&gt;The Treemap visualization focuses on providing insight into business data. Users look at business data from different perspectives. In a Treemap visualization, a &lt;I&gt;perspective&lt;/I&gt; is composed of two measurements, which define the appearance of size and color for each data element. The brain can efficiently process large sets of data based on size and color, which makes the Treemap visualization very effective.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.cooldudette.net/BlogFiles/AnnouncementTreemapBusinessDataVisualiza_94F4/image.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=image border=0 alt=image align=left src="http://www.cooldudette.net/BlogFiles/AnnouncementTreemapBusinessDataVisualiza_94F4/image_thumb_3.png" width=309 height=287&gt;&lt;/A&gt;The Treemap visualization is complemented with visual filtering on top of a data histogram for each selected measurement. The histogram provides an overview of how many data items appear in the range of values that is defined by the full measurement value range. Users can then use intuitive range filtering to adjust the upper or lower boundary of the range of values from which data objects are visualized.&lt;/P&gt;
&lt;P&gt;With visual filtering, users can see data items disappear or appear dynamically and transition smoothly in size and color. The brain can follow and keep track of dynamic changes for a large number of visual elements simultaneously, which makes the visualization even more effective.&lt;/P&gt;
&lt;P&gt;Users can use these visual tools to better understand a set of business objects with the range of values of multiple measurements in one picture. Users can then discover unexpected correspondences and also validate that data follows presumed correspondences.&lt;/P&gt;
&lt;P&gt;The Treemap visualization also helps identify actionable items and answers to questions, such as which business data items fall out of typical procedures? Which data items are the most important ones to act on? Where does an action have the most impact?&lt;/P&gt;
&lt;P&gt;These questions can frequently be answered by looking at outliers in presumed correspondences of measurements for a business situation. These business data items typically do not follow the presumed correspondences and anticipated flow of data. &lt;/P&gt;
&lt;P&gt;The Treemap visualization provides direct access to relevant UI pages so that users can act on the business data object behind a Treemap field.&lt;/P&gt;
&lt;HR&gt;

&lt;P&gt;The &lt;EM&gt;Partner Community Edition&lt;/EM&gt; of the &lt;EM&gt;Treemap Business Data Visualization for Microsoft Dynamics NAV&lt;/EM&gt; is an unsupported release. Nevertheless, you may integrate it into Microsoft Dynamics NAV 2009 SP1 customer projects and add-on solutions. &lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9932939" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Announcements" scheme="http://blogs.msdn.com/cabeln/archive/tags/Announcements/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /><category term="Visualizations" scheme="http://blogs.msdn.com/cabeln/archive/tags/Visualizations/default.aspx" /><category term="Business Data Visualizations" scheme="http://blogs.msdn.com/cabeln/archive/tags/Business+Data+Visualizations/default.aspx" /></entry><entry><title>Resources for my DynamicsNAV Client Extensibility sessions at Directions 09 in Austin, Tx</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/11/16/resources-to-my-add-in-sessions-at-directions-09-in-austin-tx.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/11/16/resources-to-my-add-in-sessions-at-directions-09-in-austin-tx.aspx</id><published>2009-11-16T18:58:00Z</published><updated>2009-11-16T18:58:00Z</updated><content type="html">&lt;P&gt;This morning I have arrived back from &lt;A href="http://www.cronususa.com/" target=_blank&gt;Directions 2009&lt;/A&gt; in Austin, Texas. Directions was a fantastic conference with a great setup at a incredibly beautiful location. The program was packed with great sessions and I had lots of networking and feedback from partners on Client Extensibility for the RoleTailored client. &lt;/P&gt;
&lt;P&gt;I have learned a lot from our partners, for example about licensing requirements that partners have in order to run a viable business on “Business Data Visualizations”. A big Thank You for all the feedback and inspiration! &lt;/P&gt;
&lt;H2&gt;For the restless reader (“in a few words”)&lt;/H2&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width=831&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=10 align=middle&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png"&gt;&lt;IMG title=GoldenCaller border=0 alt=GoldenCaller src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png" width=134 height=134 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;/TD&gt;
&lt;TD vAlign=top width=819&gt;
&lt;P&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;&lt;EM&gt;Download the presentations an supporting material on Client Extensibility:&lt;/EM&gt; &lt;BR&gt;&lt;BR&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:d478209e-a68b-4eb5-815b-1eb495fe197f class=wlWriterEditableSmartContent&gt;
&lt;P&gt;Download presentation D115: &lt;A title="Presentation: Client Extensibility - Introduction" href="http://www.cooldudette.net/BlogFiles/D115.zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/D115.zip"&gt;Client Extensibility - Introduction, How to use Add-ins&lt;/A&gt;&lt;BR&gt;Download presentation D116: &lt;A title="Presentation: Client Extensibility - Creating AddIns" href="http://www.cooldudette.net/BlogFiles/D116.zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/D116.zip"&gt;Client Extensibility - How to create Add-ins&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(!!!) Download template installer: &lt;/STRONG&gt;&lt;A title="Visual Studio Templates for DynamicsNAV Add-ins" href="http://www.cooldudette.net/BlogFiles/DynamicsNAVAddInTemplateAddInStarterPack.zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/DynamicsNAVAddInTemplateAddInStarterPack.zip"&gt;&lt;STRONG&gt;Visual Studio Templates for DynamicsNAV Add-ins&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;It was my great pleasure that I had been invited to present two sessions about client extensibility on the last day of the conference – the &lt;EM&gt;Deep Dive day&lt;/EM&gt;. And because I have been given this honor by our partners I brought “presents” for our partners. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;The first session (introduction)&lt;/STRONG&gt;&lt;/U&gt; started the general concept of extensibility in different places of NAV and I mentioned samples where the different extensibility mechanisms can be used together. The focus was of course what the Add-in concept is all about, and how it plays together with the other extensibility models (like client side&amp;nbsp; &amp;amp; server side COM and exposed Web services). Then I went through three different categories of Add-ins: Value fields, Content renderer based on a value and “Business Data Visualizations”. For each of the categories I showed several Add-ins live. Special feature was of course my &lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/PreloadedwithAddinsDynamicsNAV2009SP1VPC_E2AA/image_2.png" target=_blank&gt;TreeMap control Add-in for Dynamics NAV&lt;/A&gt;. Then I talked about how to use Add-ins in page metadata, connect to data and integrate with application code. &lt;/P&gt;
&lt;P&gt;In a (I believe) cool demo I showed how to take the TreeMap control that I had shown previously in the demo of an “Analysis place” for Customers and use it in a similar place for Sales Orders, connect it to data and triggers. Finally I demoed how to enable on-the-fly client distribution (see also &lt;A href="http://blogs.msdn.com/freddyk/archive/2009/09/19/auto-deployment-of-client-side-components.aspx" target=_blank&gt;Freddy’s blog&lt;/A&gt;) for related material. &lt;/P&gt;
&lt;P&gt;The last part was about the impact of the Add-in concept on the current business with NAV and sketches out a framework for new business opportunities: “Business Data Visualizations”. The present was the announcement of the near availability of the TreeMap control.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;In the second session (how to create Add-Ins)&lt;/U&gt;&lt;/STRONG&gt; I began with a new page, and loaded it with with Add-ins. Then I looked at a Visual Studio solutions which contains the code of all the Add-ins – the Add-In Workshop. With the help of these code samples I walked through the different aspects of the Add-in API and pointed out the typical steps you take when you create a new one. &lt;/P&gt;
&lt;P&gt;Initially I had planned to do a &lt;EM&gt;deep-see-dive&lt;/EM&gt; on the classes and interfaces of the Add-in API. But on my flight to Directions I really got scared – scared, because this approach would have simply produced confusion and not have shown how simple it actually is to create an Add-in. So I decided instead to provide a diving suite for the second &lt;EM&gt;Deep Dive&lt;/EM&gt; session.&lt;/P&gt;
&lt;P&gt;Instead of spending the flight with watching movies, I wrote a set of Visual Studio projects and item templates that once will be part of a guided Visual Studio Starter Pack for Dynamics NAV RoleTailored client Add-Ins. Right now it contains two project templates (one for a Control Add-in project base on WinForms and one based on WPF). It also contains 6 Add-in class templates for typical Control Add-in interfacing scenarios. One of the Add-in class templates is tailored to WPF “Business Data Visualizations” and is actually based on the code I used to implement the TreeMap Add-in.&lt;/P&gt;
&lt;P&gt;In another (I believe) cool Demo I created a new Business Data Visualization Add-in for a WPF map control of the US states, featuring heat-map visualization. I took me only a few minutes to build this new Add-in with the help of my Visual Studio templates – including hosting it in a RoleCenter page and a quick debugging demo. &lt;/P&gt;
&lt;P&gt;As you can imagine, the present for the audience in this session was this Visual Studio template package. Quite a number of attendees queued up to get a copy of the template installer on their USB stick right away. And you can download it also here.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Aside to all the other great sessions we had lots of fun too …&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.cooldudette.net/BlogFiles/P1040031.jpg" mce_href="http://www.cooldudette.net/BlogFiles/P1040031.jpg"&gt;&lt;IMG style="WIDTH: 644px; HEIGHT: 366px" title=P1040031 border=0 alt=P1040031 src="http://www.cooldudette.net/BlogFiles/P1040031_thumb.jpg" width=644 height=366 mce_src="http://www.cooldudette.net/BlogFiles/P1040031_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;The C/Siders&lt;/EM&gt; live on the shore of Colorado river, together with great food and drinks, and the great spirit our our wonderful partner community …&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923090" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/cabeln/archive/tags/Visual+Studio/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>Add-ins for the RoleTailored client of Dynamics NAV 2009 SP1 (part2)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/10/14/add-ins-for-the-roletailored-client-of-dynamics-nav-2009-sp1-part2.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/10/14/add-ins-for-the-roletailored-client-of-dynamics-nav-2009-sp1-part2.aspx</id><published>2009-10-14T13:28:00Z</published><updated>2009-10-14T13:28:00Z</updated><content type="html">&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Yesterday afternoon, a colleague from Italy send me an IM asking for help on a customer scenario. The customer wants his users to see a strong warning sign attached to the item availability in the Item FactBox. The warning shall only be shown if the availability drops under a certain level. He had already experimented with the new &lt;A href="http://msdn.microsoft.com/en-us/library/dd983743.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983743.aspx"&gt;Style&lt;/A&gt; property on NAV fields in SP1. He was able to show conditional formatting on the item availability field. But what the customer really wants is a more visual indication – yeah, a screaming warning icon!&lt;/P&gt;
&lt;P&gt;On my way home in the train (public transport is just great for such tasks) I could not stop me from creating two little Add-ins as samples for that purpose. And because these two Add-ins nicely continue on the topics I have covered in &lt;A href="http://blogs.msdn.com/cabeln/archive/2009/05/06/add-ins-for-the-roletailored-client-of-microsoft-dynamicsnav-2009-sp1-part1.aspx" target=_blank mce_href="http://blogs.msdn.com/cabeln/archive/2009/05/06/add-ins-for-the-roletailored-client-of-microsoft-dynamicsnav-2009-sp1-part1.aspx"&gt;part1&lt;/A&gt;, I decided to share this with you.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#0000ff size=5 face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H1&gt;For the restless reader (“in a few words”)&lt;/H1&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=10 align=middle&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png"&gt;&lt;IMG title=GoldenCaller border=0 alt=GoldenCaller src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png" width=134 height=134 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P&gt;&lt;U&gt;A Control Add-in may listen to its context (“context binding”)&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The context for a control Add-in is provided through the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.aspx"&gt;&lt;EM&gt;Site&lt;/EM&gt;&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;The &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.style.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.style.aspx"&gt;&lt;EM&gt;Style&lt;/EM&gt;&lt;/A&gt; is one of the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite_properties.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite_properties.aspx"&gt;properties&lt;/A&gt; of the &lt;EM&gt;Site&lt;/EM&gt;, and the respective &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.stylechanged.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.stylechanged.aspx"&gt;change event&lt;/A&gt; is also available. &lt;/LI&gt;
&lt;LI&gt;An Add-in can listen to changes in the context (Site) and reflect it in its visual appearance. I call this “context binding”. &lt;/LI&gt;&lt;/UL&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=520&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=298&gt;
&lt;P&gt;And the result might look like this: &lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=220&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb.png" width=285 height=68 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb.png"&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Combine simple data binding with context binding&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A control Add-in inherits the data binding of the field through the source expression in page designer. &lt;/LI&gt;
&lt;LI&gt;By implementing the properties &lt;A href="http://msdn.microsoft.com/en-us/library/dd983747.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983747.aspx"&gt;Value&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd983746.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983746.aspx"&gt;HasValueChanged&lt;/A&gt; it participates in data binding. &lt;/LI&gt;
&lt;LI&gt;
&lt;DIV id=codeSnippetWrapper&gt;An Add-in can combine data binding with context binding for maximum data awareness. &lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV id=codeSnippetWrapper&gt;And it might trigger custom events in business logic, for example an advanced lookup.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=534&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=229&gt;And the result might look like this:&lt;/TD&gt;
&lt;TD vAlign=top width=303&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/Screen2_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/Screen2_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Screen2 border=0 alt=Screen2 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/Screen2_thumb.png" width=303 height=67 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/Screen2_thumb.png"&gt;&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;A title="Download source code" href="http://www.cooldudette.net/BlogFiles/Sample%202%20(Availability%20Warning).zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/Sample%202%20(Availability%20Warning).zip"&gt;Download the full source code project here&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;A train ride on the “Notification Icon Add-in”&lt;/H1&gt;
&lt;H1&gt;&lt;/H1&gt;
&lt;H3&gt;First stop – “Vedbæk”: Check the requirements Requirements&lt;/H3&gt;
&lt;P&gt;The requirements for these Add-ins have been given to me:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Used to show a notification icon in a FactBox. &lt;/LI&gt;
&lt;LI&gt;Show the standard field title &lt;/LI&gt;
&lt;LI&gt;Add-in number 1: If a certain condition as defined in Business Logic fulfilled then show a LARGE notification icon. Otherwise, show no icon. &lt;/LI&gt;
&lt;LI&gt;Add-in number 2: Render nicely in the flow of other fields, render the value aligned with other values, support the same field click and DrillDown capabilities as standard fields. If a certain condition as defined in Business Logic fulfilled then show a notification icon in front of the value. Otherwise, show no icon. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Let translate those requirements into the world of Add-ins:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;FactBoxes are read-only. Therefore I will only need to implement read-only data binding. And I only need to provide rendering support for the icon and a value for number 2. – a PictureBox and a Label control will do. &lt;/LI&gt;
&lt;LI&gt;A field title is shown be default unless we actively suppress them in code by implementing the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.allowcaptioncontrol.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.allowcaptioncontrol.aspx"&gt;AllowCaptionControl&lt;/A&gt; and making it return false. Therefore nothing needed here. &lt;/LI&gt;
&lt;LI&gt;Of course, a couple of icons are needed in the Add-in resources - not problem either.&amp;nbsp; &lt;BR&gt;However, we need a mechanism that communicates the condition. In a second version of the Add-in, we also want to show the value. Therefore, we reserve data binding for for the value and utilize the &lt;A href="http://msdn.microsoft.com/en-us/library/dd983743.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983743.aspx"&gt;Style&lt;/A&gt; property of the field for the warning condition. &lt;BR&gt;(A field can be bound through the &lt;A href="http://social.msdn.microsoft.com/Search/sv-SE?query=StyleExpr" target=_blank mce_href="http://social.msdn.microsoft.com/Search/sv-SE?query=StyleExpr"&gt;StyleExpr&lt;/A&gt; field property to a Boolean variable which decides whether the Style as specified in the Style field property will be applied or not. The Add-in subscribes to the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.stylechanged.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.stylechanged.aspx"&gt;StyleChanged&lt;/A&gt; event and shows one of the notification icons based on the style it sees. Nothing simpler than that…) &lt;/LI&gt;
&lt;LI&gt;For the last requirement we need to adjust the height of the control properly, align the controls nicely to the right, be sure that we draw the value in blue and finally switch underlined on and off as the mouse hovers in and out of the field. Moreover, we should not forget to set the “Hand” cursor and listen to the click event plus trigger C/AL code. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;That should be doable in one train ride. Let’s code it!&lt;/P&gt;
&lt;H3&gt;Next stop – “Kokkedal”: Build a simple Notification Add-in with “context binding”&lt;/H3&gt;
&lt;P&gt;A read only Add-in showing a right aligned Icon from the resources, based on the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.style.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.icontroladdinsite.style.aspx"&gt;Style&lt;/A&gt; property of the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.site.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.site.aspx"&gt;Site&lt;/A&gt; - nothing simpler than that.&lt;/P&gt;
&lt;P&gt;What is worth to mention here is the use of a Panel control as the layout container, which I return as the Add-in control. In the Panel I can easily dock the icon to the right such that it appears nicely aligned under the other values in the Factbox. A PictureBox control renders the Icon, and the Add-in must specify a proper maximum and minimum size. &lt;/P&gt;
&lt;P&gt;The “context binding” is achieved by overriding the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.onstylechanged.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.winformscontroladdinbase.onstylechanged.aspx"&gt;OnStyleChanged&lt;/A&gt; method which already delivers the new style. Please note: if the variable to which the NAV field property &lt;EM&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd983802.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983802.aspx"&gt;StyleExpr&lt;/A&gt;&lt;/EM&gt; is bound to is &lt;EM&gt;false&lt;/EM&gt;, then the Style will be “None”, otherwise it is the value of NAV field property &lt;EM&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd983743.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd983743.aspx"&gt;Style&lt;/A&gt;.&lt;/EM&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;[ControlAddInExport(&lt;SPAN class=str&gt;"SampleControl_NotificationIcon"&lt;/SPAN&gt;)]
[Description(&lt;SPAN class=str&gt;"Notification icon based on Style property"&lt;/SPAN&gt;)]
&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; MyNotificationIconAddIn : WinFormsControlAddInBase
{
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; PictureBox _picture;

    &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; System.Windows.Forms.Control CreateControl()
    {
        Panel panel = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Panel();
        Bitmap icon = StaticPicturHelper.StyleToPicture(Style.Attention);
        panel.MinimumSize = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Size(icon.Size.Width, icon.Size.Height);
        panel.MaximumSize = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Size(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt;.MaxValue, icon.Size.Height);

        _picture = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PictureBox();
        _picture.Visible = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
        _picture.SizeMode = PictureBoxSizeMode.AutoSize;
        _picture.Dock = DockStyle.Right;
        _picture.Parent = panel;
        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; panel;
    }

    &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; OnStyleChanged(Style style)
    {
        _picture.Visible = (style != Style.None);
        _picture.Image = StaticPicturHelper.StyleToPicture(style);
        &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.OnStyleChanged(style);
    }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;DIV&gt;Now, that was easy – wasn’t it? Take a look at the Add-in Project in the download for this blog post. This also contains a modified “Sales Line FactBox” 9087 with little integration code.&lt;/DIV&gt;
&lt;H3&gt;Next stop – “Humlebæk”: Show the value, read only data binding and click with drill down&lt;/H3&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now I want to show also the value for Availability in a similar way as a standard field does. I shall look and behave like a link, with mouse over effect and all that. As mentioned above, I just need to add a Label into the layout container and handle the mouse events.&lt;/P&gt;
&lt;P&gt;More interesting is the data binding. I decide for a different base class (&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.aspx"&gt;StringControlAddInBase&lt;/A&gt;), which has some support already built in, override the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.value.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.value.aspx"&gt;Value&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.hasvaluechanged.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.dynamics.framework.ui.extensibility.winforms.stringcontroladdinbase.hasvaluechanged.aspx"&gt;HasValueChanged&lt;/A&gt; properties, and reroute the value that arrives at the Add-in to the Label control.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_3.png" width=819 height=419 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And what about the click event? A mouse click event handler for all the controls (Panel, Label &amp;amp; Picture) triggers the ControlAddIn trigger in the Business logic on Page 9087, which in turn asks for the Drill down.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DoOnMouseClick(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, MouseEventArgs e)
{
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.RaiseControlAddInEvent(0, &lt;SPAN class=str&gt;""&lt;/SPAN&gt;);
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The ControlAddIn event allows me to send a message ID with text data. But for this Add-in I really don’t need any discriminator for different events, therefore I can specify whatever parameters here.&lt;/P&gt;
&lt;P&gt;And this is the code that handles the event in the server side business logic. It is the standard code that executes drill down on availability.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_10.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_4.png" width=606 height=61 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_4.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Last stop – “Helsingør”:&amp;nbsp; Integration&lt;/H3&gt;
&lt;P&gt;It is time to utilize the Add-ins on the “Sales Line FactBox”. As usual, I copy the Add-in library to the Add-ins directory of the RoleTailored client and register them once with the &lt;A href="http://blogs.msdn.com/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx" target=_blank mce_href="http://blogs.msdn.com/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx"&gt;Registration Tool&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In Page 9087 (“Sales Line FactBox”) I add a new field at the bottom for the simple Warning notification field and specify the first Add-in in the Control Add-in Property. The existing “Availability” field gets the second Control Add-in configured. Both fields get “&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_1.png" width=796 height=294 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The variable “styleActive” is declared as a global Page variable and reflects is set by the business code for each record based on the item availability.&lt;/P&gt;
&lt;P&gt;The fob files 9087.fob / .txt in the download material contain all changes for your review.&lt;/P&gt;
&lt;H3&gt;Ferry ride home and Wrap Up&lt;/H3&gt;
&lt;P&gt;The last ride home on the ferry gives me time to write up this little document package the project files so I can make them available to my colleague in Italy and to you through this blog post. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 5px 0px 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_5.png" width=306 height=187 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddinsfortheRoleTailoredclientofDynamics_B3DA/image_thumb_5.png"&gt;&lt;/A&gt;I hope this information is somewhat useful and gives you a little more insight into Control Add-ins for the RoleTailored client in Dynamics NAV 2009 (SP1). &lt;/P&gt;
&lt;P&gt;&lt;A title="Download source code" href="http://www.cooldudette.net/BlogFiles/Sample%202%20(Availability%20Warning).zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/Sample%202%20(Availability%20Warning).zip"&gt;You can download the project here.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And what have I learned from this small exercise? There are a few improvements needed for the future of our Add-in model in Dynamics NAV: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;An Add-in should be able to find out about the sizing of a standard field. Look at the distance between the fields “Availability:”, “Substitutions:” an “Sales Prices:” and you know what I mean. &lt;/LI&gt;
&lt;LI&gt;An Add-in should be able to trigger the default behavior for &lt;EM&gt;Lookup&lt;/EM&gt;, &lt;EM&gt;Drilldown&lt;/EM&gt; and &lt;EM&gt;Assist Edit&lt;/EM&gt; such that it does not need to raise the ControlAddIn trigger for the same purpose and force the Business Logic developer to move respective code. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;However, do not worry about changes in the future now. We have one important design goal for the Add-in framework: Existing Add-ins shall be usable without changes in later releases of the NAV product. &lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Ps: If you have other suggestions for useful control Add-ins, don’t hesitate to contact me – I have a train ride and a ferry home every day ;-)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907135" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term=".Net Framework" scheme="http://blogs.msdn.com/cabeln/archive/tags/.Net+Framework/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>Preloaded with Add-ins: Dynamics NAV 2009 SP1 VPC available</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/09/22/preloaded-with-add-ins-dynamics-nav-2009-sp1-vpc-available.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/09/22/preloaded-with-add-ins-dynamics-nav-2009-sp1-vpc-available.aspx</id><published>2009-09-22T13:52:00Z</published><updated>2009-09-22T13:52:00Z</updated><content type="html">&lt;P&gt;A Virtual PC image of Dynamics NAV 2009 SP1 is available for partners on Microsoft Partner Source! This image is already loaded with a number of cool Add-ins.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/PreloadedwithAddinsDynamicsNAV2009SP1VPC_E2AA/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/PreloadedwithAddinsDynamicsNAV2009SP1VPC_E2AA/image_thumb.png" width=244 height=209&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Dynamics NAV Partners: &lt;A title="Download VPC of Dynamics NAV 2009 SP1" href="https://mbs.microsoft.com/partnersource/deployment/methodology/vpc/nav2009SP1.htm" target=_blank mce_href="https://mbs.microsoft.com/partnersource/deployment/methodology/vpc/nav2009SP1.htm"&gt;Go get it&lt;/A&gt;, and check it out! &lt;/P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: en-us; mso-fareast-language: en-us; mso-bidi-language: ar-sa"&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898014" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author></entry><entry><title>How to: Debugging of Add-ins</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/09/22/how-to-debugging-of-add-ins.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/09/22/how-to-debugging-of-add-ins.aspx</id><published>2009-09-22T08:52:00Z</published><updated>2009-09-22T08:52:00Z</updated><content type="html">&lt;P&gt;Recently I was giving a presentation about Client Add-ins and it turned out that the audience had already seen all available material about Add-ins. So what could I show instead? &lt;I&gt;Live programming&lt;/I&gt; of a new Add-in was what I came up with. The Add-in should be a traffic-lights type of state indicator. This is a control that shows one of three images based the value that arrives trough data binding. &lt;/P&gt;
&lt;P&gt;Of course, what happened when I tried to run the RoleTailored client with the first build of the new Add-in – it failed from an exception thrown by faulty code in the Add-in.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png"&gt;&lt;IMG style="WIDTH: 42px; HEIGHT: 50px" title=Idea border=0 hspace=10 alt=Idea align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png" width=42 height=50 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please note: The Add-in is responsible for catching and handling any exception, which might occur in its code execution.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In order not to lose the rest of goodwill of my audience, I had to deliver a piece of information, which would nicely camouflage my blunder. I decided on showing debugging of an Add-in the NAV RoleTailored client.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/HowtoDebuggingofAddins_9826/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/HowtoDebuggingofAddins_9826/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=clip_image004 border=0 hspace=12 alt=clip_image004 align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/HowtoDebuggingofAddins_9826/clip_image004_thumb.jpg" width=244 height=213 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/HowtoDebuggingofAddins_9826/clip_image004_thumb.jpg"&gt;&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;Debugging of an Add-in in the client is very simple. After the client has started up all you need to do is to attach the Visual Studio to the process of the RoleTailored client.&lt;/P&gt;
&lt;P&gt;For debugging compile your project with the “Debug” solution configuration. &lt;/P&gt;
&lt;P&gt;Before you open the page that contains your Add-in attach Visual Studio to the process “Microsoft.Dynamics.Nav.Client.exe”. &lt;/P&gt;
&lt;P&gt;Now you can monitor the program flow in your Add-in code. Go ahead and set breakpoints in the implementation of CreateControl or in your implementation of the IObjectControlAddInDefinition interface. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 42px; HEIGHT: 50px" title=Idea border=0 hspace=10 alt=Idea align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png" width=42 height=50 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;You think it is too cumbersome to attach the debugger from Visual Studio each time you run the client? &lt;BR&gt;Then consider adding the following code line in the CreateControl method:&lt;/P&gt;
&lt;P class=csharpcode mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=alt&gt;System.Diagnostics.Debugger.Launch();&lt;/PRE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;STYLE type=text/css&gt;
















.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;This will fire up a dialog where you can pick the instance Visual Studio and for debugging and already breaks at that code line. Remember to remove this line, when you are done with debugging ;-) &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;After I had found the typo in my Add-in code with the help of debugging, I then could conclude the session just is time. So debugging of Add-ins while running in the RoleTailored client is a helpful thing. Give it a try!&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9897911" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/cabeln/archive/tags/Visual+Studio/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>“Hot Topic” recording on Client Extensibility available for Dynamics NAV partners!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/09/02/hot-topic-recording-on-client-extensibility-available-for-dynamic-nav-partners.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/09/02/hot-topic-recording-on-client-extensibility-available-for-dynamic-nav-partners.aspx</id><published>2009-09-02T21:05:00Z</published><updated>2009-09-02T21:05:00Z</updated><content type="html">&lt;P&gt;Yesterday I have recorded a “Hot Topic” on Client Extensibility and the creation of Add-Ins. Feel free to review the content &lt;A title='"Hot Topic" recording on Client Extensibility' href="https://training.partner.microsoft.com/plc/details.aspx?publisher=12&amp;amp;delivery=269574" target=_blank mce_href="https://training.partner.microsoft.com/plc/details.aspx?publisher=12&amp;amp;delivery=269574"&gt;here&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://training.partner.microsoft.com/plc/details.aspx?publisher=12&amp;amp;delivery=269574" mce_href="https://training.partner.microsoft.com/plc/details.aspx?publisher=12&amp;amp;delivery=269574"&gt;https://training.partner.microsoft.com/plc/details.aspx?publisher=12&amp;amp;delivery=269574&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Now after Dynamics NAV 20009 SP1 has been released to partners,&amp;nbsp;it time to start experimenting with this exciting feature.&lt;BR&gt;I hope this 1 hour presentation will give you a good jump start into the subject of Client Extensibility and Add-ins for the Role Tailored client.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Snr Program Manager &lt;BR&gt;Microsoft DynamicsNAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890581" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/cabeln/archive/tags/Visual+Studio/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>Registration tool for Dynamics NAV RoleTailored client Add-ins</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx</id><published>2009-06-08T22:45:00Z</published><updated>2009-06-08T22:45:00Z</updated><content type="html">&lt;P&gt;(Please note: “&lt;STRONG&gt;&lt;EM&gt;Add-ins&lt;/EM&gt;&lt;/STRONG&gt;” are supported with SP1 for Dynamics NAV 2009.)&lt;/P&gt;
&lt;P&gt;In my last blog post on “&lt;STRONG&gt;&lt;EM&gt;Add-ins&lt;/EM&gt;&lt;/STRONG&gt;” for the RoleTailored client of Dynamics NAV 2009 I have shown a very simple Add-in – no support data binding, no events. But already this one requires proper registration in the database, before it can be used for development and at runtime in your Dynamics NAV business application.&lt;/P&gt;
&lt;P&gt;Before going into further samples for Client Extensibility with data binding and events I think it is a good idea to explain the concept of this registration in a little more detail. And even better: provide a tool for point-and-click registration for Add-ins.&lt;/P&gt;
&lt;H1&gt;For the restless reader (“in a few words”)&lt;/H1&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=10 align=middle&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=GoldenCaller_2 border=0 alt=GoldenCaller_2 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/GoldenCaller_2_3.png" width=134 height=134 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/GoldenCaller_2_3.png"&gt; &lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P&gt;&lt;U&gt;Add-in registration basics&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;An Add-in must be registered in the “&lt;STRONG&gt;&lt;EM&gt;Client Add-in&lt;/EM&gt;&lt;/STRONG&gt;” table (2000000069) with at least its &lt;EM&gt;name&lt;/EM&gt; and the &lt;EM&gt;public key token&lt;/EM&gt; of its signature. &lt;/LI&gt;
&lt;LI&gt;Optional: The file &lt;EM&gt;version&lt;/EM&gt; of the Add-in assembly &lt;/LI&gt;
&lt;LI&gt;Optional: A &lt;EM&gt;description&lt;/EM&gt; text &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;The registration tool&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The Add-in registration tool analyzes Add-in libraries, discovers Add-ins and inserts / updates the registered information in the Client Add-ins table. &lt;/LI&gt;
&lt;LI&gt;It provides a form in classic client which shows the list of registered Add-ins and provides a point-and-click type of file selection. &lt;/LI&gt;
&lt;LI&gt;And you can download it from &lt;A href="http://www.cooldudette.net/BlogFiles/AddInImporter.zip" mce_href="http://www.cooldudette.net/BlogFiles/AddInImporter.zip"&gt;here&lt;/A&gt;. &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;&lt;EM&gt;Name&lt;/EM&gt; of the Add-in &lt;/H4&gt;
&lt;P&gt;This was the name thas had been specified as the parameter to the ControlAddIn Attribute. In this sample “SampleControl_InkEdit”.&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;P&gt;[ControlAddInExport(&lt;SPAN style="COLOR: #006080"&gt;"SampleControl_InkEdit"&lt;/SPAN&gt;)]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; IMyInkEditControlAddInDefinition : IObjectControlAddInDefinition&lt;BR&gt;{ }&lt;BR&gt;&lt;BR&gt;[ControlAddInExport]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyInkEditContolAddIn : WinFormsControlAddInBase, IMyInkEditControlAddInDefinition&lt;BR&gt;{&lt;BR&gt;...&lt;BR&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;or simply:&lt;/DIV&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;[ControlAddInExport(&lt;SPAN style="COLOR: #006080"&gt;"SampleControl_InkEdit"&lt;/SPAN&gt;)]&lt;BR&gt;[Description(&lt;SPAN style="COLOR: #006080"&gt;"Edit and displays TabletPC ink"&lt;/SPAN&gt;)]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyInkEditContolAddIn : WinFormsControlAddInBase, IObjectControlAddInDefinition&lt;BR&gt;{&lt;BR&gt;...&lt;BR&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=65&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Arrow60 border=0 alt=Arrow60 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png" width=60 height=19 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png"&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="100%"&gt;
&lt;DIV&gt;With the registration tool you don’t need to look up the Add-in names in the documentation that came with it or in the source files of your Add-in projects. It will discover the names of all Add-ins in the libraries you register automatically.&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;The Public Key Token&lt;/H4&gt;
&lt;DIV&gt;The requirements of signed assemblies allows Dynamics NAV to indentify exactly the assembly for an Add-in, regardless of the existence of other assemblies with the same name from other vendors. Please note: assemblies with the same name can very well reside in different subdirectories of the Add-ins directory. It also assures that only the assembly that has been signed by the same vendor like the one used for registration will be accepted at runtime. &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;The key pair for signing had been created with the Visual Studio project settings dialog or by using the &lt;A href="http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx" mce_href="http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx"&gt;signing tool&lt;/A&gt; manually to create a key pair and perhaps even for the actual signing in dedicated signing procedures. &lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;But how do you get a hand on the public key token for an Add-in assembly you have received?&lt;/DIV&gt;
&lt;P&gt;sn.exe -T &amp;lt;assembly&amp;gt; is the answer to this.&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=65&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Arrow60 border=0 alt=Arrow60 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png" width=60 height=19 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png"&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="100%"&gt;
&lt;DIV&gt;With the registration tool you don’t need to analyze the assembly to get the public key token. It will find it for you and add the key automatically upon registration.&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;The Version of the Add-in assembly&lt;/H4&gt;
&lt;P&gt;The assembly version of the dll file an Add-ins can be found is optional information. This will be very useful, as soon as several versions of Add-ins exist and need to be supported in the same NAV installation. &lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=65&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Arrow60 border=0 alt=Arrow60 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png" width=60 height=19 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png"&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="100%"&gt;
&lt;DIV&gt;With the registration tool you don’t need to analyze the assembly to get the version. It will find and add the version information automatically upon registration.&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;The Description&lt;/H4&gt;
&lt;P&gt;Now, this information is again optional and only useful for the developer for a better understand what a certain Add-in in the table is good for. At runtime this description is not used at all.&lt;/P&gt;
&lt;P&gt;But where is it specified?&lt;/P&gt;
&lt;P&gt;If an Add-in developer wants to manifest a description together with his Add-in implementation, the Description attribute is the right choice - as in the sample code below:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;[ControlAddInExport(&lt;SPAN style="COLOR: #006080"&gt;"SampleControl_InkEdit"&lt;/SPAN&gt;)]&lt;BR&gt;[Description(&lt;SPAN style="COLOR: #006080"&gt;"Edit and displays TabletPC ink"&lt;/SPAN&gt;)]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyInkEditContolAddIn : WinFormsControlAddInBase, IObjectControlAddInDefinition&lt;BR&gt;{&lt;BR&gt;...&lt;BR&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=65&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Arrow60 border=0 alt=Arrow60 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png" width=60 height=19 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/Arrow60_3.png"&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="100%"&gt;
&lt;DIV&gt;And of course, the registration tool will discover the description and add it automatically into the table upon registration.&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;The Registration Tool&lt;/H4&gt;
&lt;P&gt;The Add-in registration tool adds point-and-click registration to the classic client. Is is composed out of a COM object that executes the assembly analysis Form 10000 which represents the user interface below. Codeunit 10000 is used internally to executes the COM object and update relevant registrations in the Client Add-in table.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=RegistrationTool-ScreenShot2 border=0 alt=RegistrationTool-ScreenShot2 src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/RegistrationTool-ScreenShot2_3.png" width=798 height=661 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/RegistrationtoolforDynamicsNAVRoleTailor_7B1E/RegistrationTool-ScreenShot2_3.png"&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.cooldudette.net/BlogFiles/AddInImporter.zip" mce_href="http://www.cooldudette.net/BlogFiles/AddInImporter.zip"&gt;You can download the Registration tool here.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;I hope this is somewhat helpful to you.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9710728" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>Add-Ins for the RoleTailored client of Microsoft Dynamics NAV 2009 SP1 (part1)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/05/06/add-ins-for-the-roletailored-client-of-microsoft-dynamicsnav-2009-sp1-part1.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/05/06/add-ins-for-the-roletailored-client-of-microsoft-dynamicsnav-2009-sp1-part1.aspx</id><published>2009-05-06T10:59:00Z</published><updated>2009-05-06T10:59:00Z</updated><content type="html">&lt;P&gt;(updated: &lt;A title="Download source code" href="http://www.cooldudette.net/BlogFiles/Sample%201%20(StaticPicture).zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/Sample 1 (StaticPicture).zip"&gt;Sample project download&lt;/A&gt;: Sept 09)&amp;nbsp;&lt;/P&gt;
&lt;P&gt;(updated to SP1 CTP2 and release API: 07.June09)&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Extensibility&lt;/STRONG&gt;&lt;/EM&gt; for the RoleTailored client also called “&lt;STRONG&gt;&lt;EM&gt;Add-ins&lt;/EM&gt;&lt;/STRONG&gt;”, is the feature which I personally love most in our SP1 release of Microsoft DynamicsNav 2009. Starting with this service pack partners have the possibility to add custom controls to the IU of the RoleTailored client. &lt;/P&gt;
&lt;P&gt;These controls can be anything - from a static logo picture (not read from the database), to an edit control with rich formatting, to a web browser control pointing to sites relevant for the user or his role or to advanced data visualizations. These controls are truly hosted within the pages of the RoleTailored client and treated with the same respect as the build-in controls.&lt;/P&gt;
&lt;P&gt;In this post I want to introduce the concept of Add-ins for the RoleTailored client and show the most basic code sample.&lt;/P&gt;
&lt;P&gt;(We will have a few minor changes to the Interface when we release, and I will update my posts when it comes out.)&lt;/P&gt;
&lt;H1&gt;For the restless reader (“in a few words”)&lt;/H1&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=10 align=middle&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=GoldenCaller border=0 alt=GoldenCaller src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png" width=134 height=134 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/GoldenCaller_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P&gt;&lt;U&gt;Using a control Add-in&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Control Add-ins are contained in assemblies. &lt;/LI&gt;
&lt;LI&gt;Add-in assemblies must be placed in the “Add-ins” directory of the RoleTailored client. &lt;/LI&gt;
&lt;LI&gt;Each Add-in must be registered in the C/Side development environment with at least its name and public key token. &lt;/LI&gt;
&lt;LI&gt;For any field on a page the property &lt;FONT color=#0000ff face="Courier New"&gt;ControlAddIn&lt;/FONT&gt; can be used to specify a custom control. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;Creating a simple control Add-In&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Create a .NET class library &lt;/LI&gt;
&lt;LI&gt;
&lt;DIV id=codeSnippetWrapper&gt;Declare a class of a certain base class add apply a certain attribute with a name for your Add-In:&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; HEIGHT: 46px; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;[ControlAddInExport("MyFirstAddIn")]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyControlAddIn : WinFormsControlAddInBase&lt;BR&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;Implement the method: 
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; HEIGHT: 16px; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt; System.Windows.Forms.Control CreateControl()&lt;/PRE&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;A title="Download source code" href="http://www.cooldudette.net/BlogFiles/Sample%201%20(StaticPicture).zip" target=_blank mce_href="http://www.cooldudette.net/BlogFiles/Sample 1 (StaticPicture).zip"&gt;Download source code here&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;The concept of Add-ins&lt;/H1&gt;
&lt;P&gt;Add-ins are contained in a DLL file, which must be a managed assembly. They are discoverable artifacts, which follow certain standards. An Add-in is the provider of a control that can be rendered and hosted in the layout of the UI of the RoleTailored client. Controls from an Add-in can only be used on pages and not on forms for the Classic client.&lt;/P&gt;
&lt;H2&gt;How to to utilize existing Add-Ins&lt;/H2&gt;
&lt;P&gt;The C/Side development environment must be made aware of an Add-In. All Add-Ins must be registered in &lt;FONT color=#0000ff face="Courier New"&gt;Table 2000000069&lt;/FONT&gt; (“Client Add-In”). The required information, such as the Control Add-in Name and Public Key Token, are typically delivered by the provider of an Add-in.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/ClientAddInTable_4.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/ClientAddInTable_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=ClientAddInTable border=0 alt=ClientAddInTable src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/ClientAddInTable_thumb_1.png" width=560 height=175 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/ClientAddInTable_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In an upcoming blog post I will make a tool available that allows you to select one or more assemblies and register all contained Add-ins.&lt;/P&gt;
&lt;P&gt;The property &lt;FONT color=#0000ff face="Courier New"&gt;ControlAddIn&lt;/FONT&gt; of a field on a page must set in order to select a certain Control Add-in. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/DevTool_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/DevTool_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=DevTool border=0 alt=DevTool src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/DevTool_thumb.png" width=953 height=208 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/DevTool_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Control Add-ins are supported for stand alone fields on a page. Please note the exception: Fields in a repeater are not supported yet. &lt;/P&gt;
&lt;H2&gt;How to write an Add-in&lt;/H2&gt;
&lt;H3&gt;For the Add-in developer: What essentially is an Add-in?&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;An Add-in is essentially composed by an &lt;A href="http://msdn.microsoft.com/en-us/library/87d83y5b.aspx" mce_href="http://msdn.microsoft.com/en-us/library/87d83y5b.aspx"&gt;interface&lt;/A&gt; which tells the RoleTailored client how it should communicate with the client. And a &lt;A href="http://msdn.microsoft.com/en-us/library/0b0thckt.aspx" mce_href="http://msdn.microsoft.com/en-us/library/0b0thckt.aspx"&gt;class&lt;/A&gt; which implements the interface. Both the interface and the class declaration must be equipped with certain &lt;A href="http://msdn.microsoft.com/en-us/library/system.attribute.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.attribute.aspx"&gt;attributes&lt;/A&gt; by which they will be discovered in an assembly. &lt;/LI&gt;
&lt;LI&gt;The assembly, which is a compiled Add-in library, must be placed in the “Add-ins” subdirectory of the program directory of the RoleTailored client (something like: c:\Program Files\Microsoft Dynamics NAV\60\RoleTailored client\Add-Ins). Also referenced assemblies might need to be copied there. &lt;/LI&gt;
&lt;LI&gt;The Add-in class works as a factory. It will instantiate a WinForms control and deliver an instance to the RoleTailored client. The control can really be any you can think off: a standard WinForms control , a 3rd party control, or a control you have developed yourself. &lt;/LI&gt;
&lt;LI&gt;The Add-in class will provide the plumbing between the control and the RoleTailored client. This includes routing back and forth of a value to show or edit, setting sizing and other layout options and firing a trigger in C/AL code. The Add-in class has access to a set of tools which allow it to further interact with the environment it is running in. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;But don’t worry, so much about all the options right now. In this post i will begin with a basic sample and you will see how simple it really is to create an utilize an Add-In.&lt;/P&gt;
&lt;H3&gt;So, which tools do I need to create an Add-in?&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Any version of Microsoft Visual Studio 2005/2008 is good. For example &lt;A href="http://www.microsoft.com/express/default.aspx" mce_href="http://www.microsoft.com/express/default.aspx"&gt;Visual Studio Express for C#&lt;/A&gt; (which is a free &lt;A href="http://www.microsoft.com/express/download/" mce_href="http://www.microsoft.com/express/download/"&gt;download&lt;/A&gt;) &lt;/LI&gt;
&lt;LI&gt;The library &lt;FONT size=2 face="Courier New"&gt;Microsoft.Dynamics.Framework.UI.Extensibility.dll&lt;FONT face="Trebuchet MS"&gt;. &lt;/FONT&gt;&lt;/FONT&gt;You will typically find the library in the program directory of the RoleTailored client (something like: c:\Program Files\Microsoft Dynamics NAV\60\RoleTailored client). &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;H2&gt;The first Add-in Sample &lt;/H2&gt;
&lt;H3&gt;1. Create a project for an Add-in&lt;/H3&gt;
&lt;P&gt;My first Add-in sample is a simple static picture control. The special characteristic is that picture data has been embedded into the control instead of having to retrieve it through data binding from a table on the server. This could be used for a static Logo. Instead of embedding the data into the picture, the control could load pictures from a local store or a Web Service instead – but this out of scope of my goal for this blog post.&lt;/P&gt;
&lt;P&gt;I start by creating a class library in Visual Studio. In Solution Explorer add a reference to the library above. Then, in the Project settings I create a new signature file. If I had created Add-ins before, I might choose to use the same signature for all and select an existing signature file from another project. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb.png" width=640 height=402 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=Idea border=0 alt=Idea align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png" width=42 height=50 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Please note: It is required that Add-in libraries are strong signed. This requires that all referenced libraries are also strong signed. This is not an issue for any of the .NET Framework libraries. But you might find 3rd party libraries that have not been signed. You can sign those yourself with the &lt;A href="http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx" mce_href="http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx"&gt;signing tool&lt;/A&gt; of the .NET Framework. &lt;/P&gt;
&lt;H3&gt;2. Add a code unit for the interface and implementing class of an Add-in &lt;/H3&gt;
&lt;P&gt;Now I add one code unit to the project. In it I declare a public class with the &lt;FONT color=#0000ff face="Courier New"&gt;[&lt;FONT size=2&gt;ControlAddInExport("&lt;EM&gt;name&lt;/EM&gt;")&lt;/FONT&gt;]&lt;/FONT&gt; Attribute. The chosen namespace and the name of the class do not matter as far as how the Add-in is exposed. However, is the &lt;EM&gt;name&lt;/EM&gt; you have chosen is essential for the&lt;FONT color=#0000ff face="Courier New"&gt;ControlAddInExport&lt;/FONT&gt; attribute. This name together with the Public Key Token of the assembly signature will be used at runtime to identify the Control Add-in. &lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; System.Windows.Forms;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; Microsoft.Dynamics.Framework.UI.Extensibility;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt; Microsoft.Dynamics.Framework.UI.Extensibility.WinForms;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; AddInSamples&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;    [ControlAddInExport(&lt;SPAN style="COLOR: #006080"&gt;"SampleControl1_StaticPicture"&lt;/SPAN&gt;)]&lt;BR&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyStaticPictureControlAddIn : WinFormsControlAddInBase&lt;BR&gt;    {     &lt;BR&gt;    }&lt;BR&gt;}&lt;/PRE&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;The class is derived from one of the Control Add-in base classes for the &lt;EM&gt;WinForms&lt;/EM&gt; Display Target – which represents the RoleTailored client. These base classes can all be found in the namespace: &lt;FONT color=#0000ff face="Courier New"&gt;Microsoft.Dynamics.Framework.UI.Extensibility.WinForms&lt;/FONT&gt; &lt;BR&gt;Because my picture control Add-in does not show any data from the backend server and does not communicate with it, I have chosen the base class &lt;FONT color=#0000ff face="Courier New"&gt;WinFormsControlAddInBase&lt;/FONT&gt;, which has no pre-built support for any of these behaviors.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;In follow-up posts we will see how other base classes and interface can be used to declare the way an Add-in communicates with the RoleTailored client. Interfaces will play a much stronger role when it comes to Add-ins for multiple display targets and custom methods, properties and events – in future releases.&lt;/DIV&gt;
&lt;H3&gt;3. Implement the Add-in interface&lt;/H3&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next I need to provide an implementation for the abstract method CreateControl. This is the place where I instantiate a &lt;FONT color=#0000ff face="Courier New"&gt;PictureBox&lt;/FONT&gt; control and load it with an image, that I had added to a resource file in the project.&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;P&gt;[ControlAddInExport(&lt;SPAN style="COLOR: #006080"&gt;"SampleControl1_StaticPicture"&lt;/SPAN&gt;)]&lt;BR&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; MyStaticPictureControlAddIn : WinFormsControlAddInBase&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt; System.Windows.Forms.Control CreateControl()&lt;BR&gt;    {&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;P&gt;&lt;BR&gt;        PictureBox pic = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; PictureBox();&lt;BR&gt;        pic.Image = StaticPictureResources.Logo;&lt;BR&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; pic;&lt;BR&gt;    }&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;After compilation of my project I already have a fully functional Add-in. But we still need to fine-tune it a bit until it looks good:&lt;/P&gt;
&lt;DIV&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_15.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_15.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb_6.png" width=240 height=177 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb_6.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/DIV&gt;
&lt;H3&gt;4. Add special sizing and preventing the field title&lt;/H3&gt;
&lt;P&gt;Two modifications should be applied: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;This control should never have a field title &lt;/LI&gt;
&lt;LI&gt;This control should always be sized to the picture content &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Modification 1 is achieved by overriding the virtual property &lt;FONT color=#0000ff face="Courier New"&gt;AllowCaptionControl&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; HEIGHT: 38px; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; AllowCaptionControl&lt;BR&gt;{ get { &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;; } }&lt;BR&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Modification 2 is done by setting the &lt;FONT color=#0000ff face="Courier New"&gt;MinimumSize&lt;/FONT&gt; and &lt;FONT color=#0000ff face="Courier New"&gt;MaximumSize&lt;/FONT&gt; of the &lt;FONT color=#0000ff face="Courier New"&gt;PictureBox&lt;/FONT&gt; control.&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; HEIGHT: 120px; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt; System.Windows.Forms.Control CreateControl()&lt;BR&gt;{&lt;BR&gt;    PictureBox pic = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; PictureBox();&lt;BR&gt;    pic.Image = StaticPictureResources.World;&lt;BR&gt;    &lt;SPAN style="COLOR: #ff0000"&gt;pic.MinimumSize = pic.MaximumSize = pic.Image.Size;&lt;/SPAN&gt;&lt;BR&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; pic;&lt;BR&gt;}&lt;BR&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Perfect ! Now we have a static picture, by default without a title and sized to the original size of the embedded picture.&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_25.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_25.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb_11.png" width=240 height=172 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/image_thumb_11.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png" mce_href="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title=Idea border=0 alt=Idea align=left src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png" width=42 height=50 mce_src="http://blogs.msdn.com/blogfiles/cabeln/WindowsLiveWriter/AddInsfortheRoleTailoredclientpart1_7706/Idea_thumb.png"&gt;&lt;/A&gt; You should take the tutorial in this blog as a sample of non-data bound content from any source on a page in the RoleTailored client of Microsoft Dynamics NAV 2009.&lt;/P&gt;
&lt;P&gt;My next blog post will show how to create a custom text box, bound to data.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Stay tuned!&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9590993" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Dynamics NAV" scheme="http://blogs.msdn.com/cabeln/archive/tags/Dynamics+NAV/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/cabeln/archive/tags/Visual+Studio/default.aspx" /><category term=".Net Framework" scheme="http://blogs.msdn.com/cabeln/archive/tags/.Net+Framework/default.aspx" /><category term="Add-In" scheme="http://blogs.msdn.com/cabeln/archive/tags/Add-In/default.aspx" /><category term="Extensibility" scheme="http://blogs.msdn.com/cabeln/archive/tags/Extensibility/default.aspx" /></entry><entry><title>After Directions EMEA 09, waiting for the Statement of Directions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/04/08/after-directions-emea-09-waiting-for-the-statement-of-directions.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/04/08/after-directions-emea-09-waiting-for-the-statement-of-directions.aspx</id><published>2009-04-08T22:44:00Z</published><updated>2009-04-08T22:44:00Z</updated><content type="html">&lt;P&gt;&lt;A href="http://www.directionsemea.com/" mce_href="http://www.directionsemea.com/"&gt;Directions EMEA&lt;/A&gt; last week was fantastic! A big thanks to the organizers!!! I had the great pleasure to present some new features in Dynamics NAV 2009. Now we all wait for the official &lt;EM&gt;Statement of Directions&lt;/EM&gt;, until we can share the details in a public format.&lt;/P&gt;
&lt;P&gt;Funnily enough I had even seen a blog post flashing up, which talks about some of the new hot topics. It had to disappear … (but do you really believe, the Internet ever forgets?)&lt;/P&gt;
&lt;P&gt;Nevertheless – stay tuned!&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=5 face="Times New Roman"&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;FONT color=#008080 size=2 face=Arial&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9539099" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Announcements" scheme="http://blogs.msdn.com/cabeln/archive/tags/Announcements/default.aspx" /></entry><entry><title>This is the start of my Dynamics NAV Blog</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cabeln/archive/2009/03/24/this-is-the-start-of-my-dynamicsnav-blog.aspx" /><id>http://blogs.msdn.com/cabeln/archive/2009/03/24/this-is-the-start-of-my-dynamicsnav-blog.aspx</id><published>2009-03-24T09:31:00Z</published><updated>2009-03-24T09:31:00Z</updated><content type="html">&lt;P&gt;For a while now I wanted to start blogging about Dynamics NAV technical topics and by that hopefully help our great community around Dynamics NAV to be even more successful.&lt;/P&gt;
&lt;P&gt;A number of new and improved features are usually appearing in every software release – this seems to be the nature of the software business. But this time I am really enthusiastic about what we have added - so I can’t stop me from telling the world.&lt;/P&gt;
&lt;P&gt;Stay tuned!&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=5&gt;&lt;EM&gt;Christian Abeln&lt;/EM&gt; &lt;BR&gt;&lt;FONT color=#008080 size=2 face=Arial&gt;Senior Program Manager &lt;BR&gt;Microsoft Dynamics NAV&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9503787" width="1" height="1"&gt;</content><author><name>ChrisAbeln</name><uri>http://blogs.msdn.com/members/ChrisAbeln.aspx</uri></author><category term="Announcements" scheme="http://blogs.msdn.com/cabeln/archive/tags/Announcements/default.aspx" /></entry></feed>