<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>developers don't wear plaid</title><link>http://blogs.msdn.com/b/tlefor/</link><description>and other observations from the fun world of technology</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Integrating Managed Controls with Task Recorder</title><link>http://blogs.msdn.com/b/tlefor/archive/2013/04/30/integrating-managed-controls-with-task-recorder.aspx</link><pubDate>Tue, 30 Apr 2013 14:38:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10415087</guid><dc:creator>MicrosoftDude1</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/tlefor/rsscomments.aspx?WeblogPostID=10415087</wfw:commentRss><comments>http://blogs.msdn.com/b/tlefor/archive/2013/04/30/integrating-managed-controls-with-task-recorder.aspx#comments</comments><description>&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;strong class="ms-rteFontSize-3"&gt;&lt;span style="font-size: large;"&gt;Integrating Managed Controls with Task Recorder:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;strong class="ms-rteFontSize-3"&gt;&lt;span style="font-size: x-small;"&gt;Task Recorder Overview:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;Task Recorder is a feature of Dynamics AX that is used extensively by partners and customers to create process or learning documents for customer specific scenarios. &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;With Task Recorder, the user can document the&amp;nbsp;specific steps for completing a task in AX. In record mode,&amp;nbsp;Task Recorder creates a "step by step" record of user actions in a textual &lt;br /&gt;format that is then used to generate PowerPoint or&amp;nbsp;Word documents, complete with screen shots as appropriate.&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;The task recorder control panel can be found in Tools&amp;gt;&amp;gt;Task Recorder&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;strong class="ms-rteFontSize-3"&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;strong class="ms-rteFontSize-3"&gt;&lt;span style="font-size: x-small;"&gt;Managed Control Integration with Task Recorder Overview:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;Previously, every new control added to Dynamics needed to extend the sysTaskRecorder base class by creating a specialized class with methods that supported the types of events that they wanted recorded, and called &lt;br /&gt;those methods when the event occurred. In addition, Task Recorder document generation needed to be extended with knowledge of the new base class in order to properly create documents based on the new events. &lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;The process wasn't documented and the process was cumbersome and therefore externally added controls via ActiveX were never included in Task Recorder recordings.&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;With the introduction of new managed controls in Dynamics AX2012, we created a simplified integration pattern, one in which a simple "generic" Task Recorder class could be used by any control.&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;This new class&amp;nbsp;allows all new controls without specialized event recording needs to simply call into the generic 'record event' class, passing in a&amp;nbsp;descriptive string, with supporting data if desired.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;em&gt;&lt;span style="font-size: x-small;"&gt;Create an X++ event handler for a managed control&amp;nbsp;event. In this example, we'll call task recorder to "record" that event.&amp;nbsp;&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;
&lt;div class="ms-rte-layoutszone-inner"&gt;&lt;strong&gt;&lt;span style="font-size: xx-small;"&gt;1) Add an &lt;br /&gt;X++ event handler to respond to events raised by your control.&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;You can define an X++ method and designate it as an event handler for events raised by your control. In this example, we're adding a form method. &lt;br /&gt;While it's possible to use class methods, it's recommended that you use form methods.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;In this example, we're passing in the ManagedHost instance... if you do this, a screenshot of the control will be taken, if no control is passed, no screenshot is taken.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="688"&gt;
&lt;p&gt;void ManagedHost_SelectedDateChanged(System.Object sender, System.Windows.Controls.SelectionChangedEventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the control doesn't need to be cast here... it's also available as a form global&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Controls.DatePicker datePicker = sender as system.Windows.Controls.DatePicker;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; str dateChangedValue;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (datePicker )&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;dateChangedValue = datePicker.get_Text();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;SysTaskRecorder_Eventing::fire_UserSpecified(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strfmt("The user has changed the date to %1.", ManagedHostName), ManagedHost);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="font-size: xx-small;"&gt;2) Hook up the managed event handler&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;It is recommended that you define all of your event handlers in the &lt;span style="text-decoration: underline;"&gt;init method of the form&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family: Calibri;"&gt;// Glue code: &lt;br /&gt;Hook the managed controls event to an X++ Event Handler:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier;"&gt;&amp;nbsp;&amp;nbsp; M&lt;span style="color: #0000ff;"&gt;anagedHost&lt;/span&gt;.add_SelectedDateChanged(&lt;/span&gt;&lt;span style="font-family: Courier;"&gt;new ManagedEventHandler(this,&lt;strong&gt;'&lt;span style="color: #ff0000;"&gt;managedEventHandler_RecordDateChanged'&lt;/span&gt;&lt;/strong&gt;)&lt;/span&gt;&lt;span style="font-family: Courier;"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Note&amp;nbsp;on performance:&lt;/strong&gt; Task recorder event SysTaskRecorder_Eventing::fireUserSpecified() is a expensive operation. It creates a XmlDocument and takes a screen capture. So we should fire the event &lt;br /&gt;only when task is being recorded and should not call it for normal forms execution. To check if task is being recorded, use SysTaskRecorderEventManager::parmRecording() and if true, then call the &lt;br /&gt;event.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415087" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/tlefor/archive/tags/Dynamics+AX2012+Managed+Control+Task+Recorder/">Dynamics AX2012 Managed Control Task Recorder</category></item><item><title>The Managed Control Host FAQ</title><link>http://blogs.msdn.com/b/tlefor/archive/2013/04/29/the-managed-control-host.aspx</link><pubDate>Mon, 29 Apr 2013 19:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10414862</guid><dc:creator>MicrosoftDude1</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/tlefor/rsscomments.aspx?WeblogPostID=10414862</wfw:commentRss><comments>http://blogs.msdn.com/b/tlefor/archive/2013/04/29/the-managed-control-host.aspx#comments</comments><description>&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;I'm the Senior Program Manager responsible for Controls and User Interaction for Dynamics AX 2009 and 20012. One of the controls that we introduced in AX2012 that&amp;nbsp;I'm really excited about... is the Managed Control Host. Like most new functionality it's a prime candidate for mis-use and overuse because it's cool. The Managed Control Host effectively provides a Managed sandbox within an AX form that allows you to host any kind of WPF or Microsoft .NET control. My guidance to you is to&amp;nbsp;only use a managed control where a Dynamics&amp;nbsp; AX control (or collection of controls) doesn't provide the user interaction that best represents the data that you are showing.&amp;nbsp;&amp;nbsp;Others have posted about how to use the control, so&amp;nbsp; I thought it might be helpful if I published a list of common questions I get about the use of the Managed Control Host.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Managed Control Host Frequently Asked &lt;br /&gt;Questions:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;&lt;span style="color: #3366ff;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;strong&gt;I've decided that I need to add a managed control to my form, where do I start?&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Collectively you need to observe the enter user interface together to make sure that you don&amp;rsquo;t introduce a control or family of controls with&amp;nbsp;no visual consistency, no consistency in &lt;br /&gt;terminology no consistency in accessibility, usability, testability and any other abilities you can think of. That is, don't introduce a new way of presenting or interacting with data when a similar/same example already exists in the product.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #3366ff;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;strong&gt;When I evaluate a design, or look at an existing managed control , what functionality should I consider?&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #3366ff;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: x-small;"&gt;Typically, when a new control is introduced, it is targeted at solving the specific problem&amp;nbsp;for which it was authored, and is misses key attributes of a mature-enterprise level control.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;Tooltips&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;Like other controls in the system, the&amp;nbsp;control should provide tooltips.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;UIAutomation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;This interface is used by applications run by our sight impaired customers to navigate and interact with the control. This interface is also used by automated testing tools by our internal testing teams. It is highly &lt;br /&gt;recomended that you implement the UIAutomation interface to ensure that your home-grown crontrols can be automated.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;High Contrast&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;When the sight impaired user runs his system in High Contrast mode, the widget should run High Contrast mode as well. The high contrast requirements of your control can be discussed with the UX team.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;Alternative Languages&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;Your control MUST support the same alternative languages as Dynamics AX. The control should be able to dynamically switch to the alternative language, just as it&amp;rsquo;s host form does.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;RTL:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;&amp;nbsp;The control should support Right To Left languages. The control should be able to respond to a dynamic request to display its contents in RTL in support of Arabic, Hebrew and other RTL languages. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;Resources:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;&amp;nbsp;Text strings and other end-user visuals that require translation should not be stored in the managed resources of the control, instead the string text should come from AX. This is necessary for support of alternative &lt;br /&gt;languages.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;&lt;strong&gt;Task Recorder&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;WPF and Managed Controls need to integrate with existing Task Recorder functionality. (look for a future blog post on how best to accomplish this)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;TwC : Compiler options, etc.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Calibri; font-size: small;"&gt;&amp;nbsp;Ensure that the control supports Trustworthy computing and other&amp;nbsp; compiler options that thwart hacking.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;Tab Sequence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Your control should participate in, and be part of the user-expected flow of the tab sequence&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Active Sizing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When desired, if the form resizes your control should resize to ensure it remains a functional part of the form.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Operating System Regional and Language Settings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When providing data&amp;nbsp;displaying data&amp;nbsp;that utilize regional settings, the control should respect the current Operating System display options.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #3366ff;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;strong&gt;I am getting the error "ClrObject static method invocation error" when selecting my assembly in the Managed Control Selector form&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Check the following points:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;All the project references are &lt;br /&gt;either added to the GAC or copied to Client\Bin&lt;/p&gt;
&lt;p&gt;- Verify that you either have a &lt;br /&gt;strong key signing the assembly&amp;nbsp;or that you have delay signing, but not both.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: #3366ff;"&gt;How does this control manage to host WPF AND WinForms natively in a single control?&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are two basic steps to &lt;br /&gt;accomplishing this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hook up the HWND so it&amp;rsquo;s on a window and gets/responds to Windows &lt;br /&gt;messages&lt;/li&gt;
&lt;li&gt;Get access to the .NET object instance that is the control and &lt;br /&gt;call API&amp;rsquo;s on it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The only part that&amp;rsquo;s different &lt;br /&gt;between a WinForms control and a WPF control is step 1. Once the HWND is hooked &lt;br /&gt;up, they&amp;rsquo;re both just .NET objects that we want to call API&amp;rsquo;s on. The fact that &lt;br /&gt;they have different base classes is irrelevant. So, if we can let the user pick &lt;br /&gt;any old .NET class that derives from one of the two proper base classes and then &lt;br /&gt;get step 1 accomplished, we can host either type.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If the control&amp;nbsp;uses a class that derives from System.Windows.FrameworkElement, then we&amp;nbsp;perform a&amp;nbsp;WPF binding. Basically we just spin up a &lt;br /&gt;System.Windows.Interop.HwndSource instance and tell it what the parent HWND is where it'll be hosted and what the child WPF class is that we want hosted. Then we do &lt;br /&gt;a couple minor messaging hookups and call ShowWindow and everything magically works.&amp;nbsp;When the&amp;nbsp;HWND is hooked up, your X++ can interact with the hosted &lt;br /&gt;class instance and not care about the fact that it&amp;rsquo;s actually WPF. It&amp;rsquo;s just an object with some API&amp;rsquo;s.Similarly if the control derives from System.Windows.Forms.Control,&amp;nbsp;we manage a WinForms binding.&amp;nbsp;Basically we just call NativeMethods.SetParent(), telling the control who it&amp;rsquo;s new parent is. Then we do some minor messaging hookups and call ShowWindow and everything magically works. Again, the control's HWND is hooked up and X++ is interacting with the hosted class instance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;We already have Managed Controls like &lt;em&gt;Directory View&lt;/em&gt; in AX 2009. How did we do this without a managed control host?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;AX 2009 does not have a general purpose means of using managed controls. Teams that had managed controls in AX &lt;br /&gt;2009 used the ActiveX control host to wrap the managed control.&amp;nbsp; This approach requires roll-your-own marshaling code added to each &lt;br /&gt;control. This marshaling is only possible by forcing the managed control to implement a COM interface to marshal calls and data between the managed control &lt;br /&gt;and X++. Using COM to marshal data back and forth is cumbersome, poor performing and requires much coding overhead by the creator of the control. In the case of directory view, it's not a data-intensive control and therefore, the performance impact isn't a concern. With a managed host control, adding a control in some cases is simply a matter of referencing it, and then adding a few lines of code to instantiate the control.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;Will a Managed Control Host implicitly work with an Dynamics AX grid?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Managed Control Host was not created scenarios that include the need to add a managed control to a grid. That level of complexity and interactivity was not built into our design.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;When I add a managed control to a form, how do I get it to be part of the tab sequence?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In order for your hosted control &lt;br /&gt;(WPF in this case) to take part in the tab sequence, the control you are hosting &lt;br /&gt;must return true from its Focusable (CanFocus in WinForms) property.&lt;/p&gt;
&lt;p&gt;The properties you need to override are Focusable or CanFocus.&lt;/p&gt;
&lt;p&gt;// this code provided as-is, with no warranty expressed or implied...IT'S JUST AN EXAMPLE PEOPLE.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For WPF controls, the code might look like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;Boolean ControlSourceWpf::CanFocus::get(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; Boolean canFocus = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(this-&amp;gt;uiElement != nullptr) &lt;br /&gt;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canFocus = this-&amp;gt;uiElement-&amp;gt;Focusable;&lt;br /&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return canFocus; &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For &lt;br /&gt;WinForms, the code might look like this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-family: courier new,courier;"&gt; Boolean ControlSourceWinForms::CanFocus::get(){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt; Boolean canFocus = false;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp; if (this-&amp;gt;hostedControl != nullptr {&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: courier new,courier;"&gt; canFocus = this-&amp;gt;hostedControl-&amp;gt;&lt;span style="font-size: x-small;"&gt;CanFocus&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return canFocus;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;strong&gt;How is my control sized?&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;You can manage the sizing of your control yourself or you can let AX managed the sizing of your control.In both cases, you need to provide an initial size in your control. This is done by setting global PreferredSize property for Winforms or DesiredSize for WPF.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;The control manages its own sizing:&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;To allow the control to size itself, set the Managed Control Host Height and Width &lt;br /&gt;properties to Auto and the Sizing property to SizeToContent&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="522"&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Height&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;Auto&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="522"&gt;
&lt;div&gt;Let &lt;br /&gt;the control define the height&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Width&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;Auto&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="522"&gt;
&lt;div&gt;Let &lt;br /&gt;the control define the width&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Sizing&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;SizeToContent&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="522"&gt;
&lt;div&gt;AX &lt;br /&gt;subscribes to your controls sizing event and will resize the managed &lt;br /&gt;host&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;AX has no idea what the initial size should be&amp;hellip; to define an initial size in your control, you must set one of the following properties (Winforms/WPF have differ) &lt;br /&gt;otherwise the initial size of your control will be 0,0 and you will not see your control.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Control &lt;br /&gt;Properties&lt;/div&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="179"&gt;
&lt;div&gt;PreferredSize &lt;br /&gt;(Winforms)&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="258"&gt;
&lt;div&gt;System.Drawing.Size(w,h)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="179"&gt;
&lt;div&gt;DesiredSize &lt;br /&gt;(WPF)&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="258"&gt;
&lt;div&gt;System.Drawing.Size(w,h)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;In this scneario, AX doesn&amp;rsquo;t send any sizing events. Therefore if the control is &lt;br /&gt;managing it&amp;rsquo;s size, it&amp;rsquo;s best to remain a fixed size as the user may resize the &lt;br /&gt;host window and it becomes difficult to effectively keep a relative and useful &lt;br /&gt;control size in relation to the current window size. &lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;AX will listen to sizing events from your control and respond, allowing the control &lt;br /&gt;to affect the size of the managed host, but not the size of the window. Only the &lt;br /&gt;user can resize the window.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;The Managed Control Host manages the sizing.&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;AX has no idea what the initial size should be&amp;hellip; to define an initial size in your &lt;br /&gt;control, you must set one of the following properties (Winforms/WPF have differ) &lt;br /&gt;otherwise the initial size of your control will be 0,0 and you will not see your &lt;br /&gt;control.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Control &lt;br /&gt;Properties (inherited from base control)&lt;/div&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="179"&gt;
&lt;div&gt;PreferredSize &lt;br /&gt;(Winforms)&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="258"&gt;
&lt;div&gt;System.Drawing.Size(w,h)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="179"&gt;
&lt;div&gt;DesiredSize &lt;br /&gt;(WPF)&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="258"&gt;
&lt;div&gt;System.Drawing.Size(w,h)&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Working with the AX arrange engine to present your control with other UI elements:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="660"&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Height&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;ColumnHeight&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="660"&gt;
&lt;div&gt;Control will have an initial height of PreferredSize, but this property enables resizing of the control.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Width&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;ColumnWidth&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="660"&gt;
&lt;div&gt;Control will have an initial width of PreferredSize, but this property enables resizing of the control.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&lt;div&gt;Sizing&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="168"&gt;
&lt;div&gt;SizeToHost&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" width="660"&gt;
&lt;div&gt;AX will resize the control as the window grows/shrinks.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;ColumnHeight/Width tells the arrange engine that you&amp;rsquo;ll accept a size other than to &lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;the preferred size in order to fit on the window with other controls.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;In some cases, the user may size the window to a size in which your control will &lt;br /&gt;not be able to present all of its contents. This is true for any control on an &lt;br /&gt;AX form.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;I didn't create the control I'm using and it doesn't appear to provide initial sizing values... what can I do? &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can override the sizing behavior at runtime, by modifying the values of the host's sizing properties: &lt;br /&gt;(the host is set for "SizeToContent"&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;"&gt;// set an initial size&amp;nbsp; (WARNING: HACK ALERT)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;"&gt;public void &lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;Init()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;super();&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;&amp;nbsp; &lt;br /&gt;MyManagedHost.width(600);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &lt;br /&gt;MyManagedHost.height(300);&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;// allow the control &lt;br /&gt;to be resized with the form:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;public void &lt;br /&gt;resize(int _width, int _height)&lt;br /&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;MyManagedHost.widthMode(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyManagedHost.heightMode(1);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(_width, &lt;br /&gt;_height);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;What should my Managed Event Handler Signature look like?&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;The event-handler signature observes the following conventions:&lt;/div&gt;
&lt;p&gt;The return type is &lt;a href="http://msdn.microsoft.com/en-us/library/system.void.aspx"&gt;&lt;span style="color: #1364c4;"&gt;Void&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;The first parameter is named &lt;em&gt;sender&lt;/em&gt; and is of type &lt;a href="http://msdn.microsoft.com/en-us/library/system.object.aspx"&gt;&lt;span style="color: #1364c4;"&gt;Object&lt;/span&gt;&lt;/a&gt;. This is the object that raised the event.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The second parameter is named &lt;em&gt;e&lt;/em&gt; and is of type &lt;a href="http://msdn.microsoft.com/en-us/library/system.eventargs.aspx"&gt;&lt;span style="color: #1364c4;"&gt;EventArgs&lt;/span&gt;&lt;/a&gt; or a derived class of &lt;a href="http://msdn.microsoft.com/en-us/library/system.eventargs.aspx"&gt;&lt;span style="color: #1364c4;"&gt;EventArgs&lt;/span&gt;&lt;/a&gt;.This is the event-specific data.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The method takes exactly two parameters.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; managedEvent(System.Object&amp;nbsp;o,&amp;nbsp;System.EventArgs e)&lt;/div&gt;
&lt;p&gt;&amp;nbsp;From the MSDN Article:&lt;a href="http://blogs.msdn.com/b/kcwalina/archive/2005/11/18/whyeventargs.aspx"&gt;&lt;span style="color: #0000ff; font-family: Calibri;"&gt;http://blogs.msdn.com/b/kcwalina/archive/2005/11/18/whyeventargs.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;Will it be possible to add a Silverlight control using this Managed Host? &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No. Silverlight is not the same type of control as a WinForm or WPF control. WinForm and WPF are at their core, .NET controls. Silverlight controls have a similar API set available to them but it is implemented in a browser plug in, which is a different implementation than is required for WinForm or WPF controls.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414862" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/tlefor/archive/tags/Dynamics+AX+2012+Managed+Controls/">Dynamics AX 2012 Managed Controls</category></item><item><title>I'm not happy with my Hippocampus.</title><link>http://blogs.msdn.com/b/tlefor/archive/2004/03/03/83311.aspx</link><pubDate>Wed, 03 Mar 2004 20:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:83311</guid><dc:creator>MicrosoftDude1</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/tlefor/rsscomments.aspx?WeblogPostID=83311</wfw:commentRss><comments>http://blogs.msdn.com/b/tlefor/archive/2004/03/03/83311.aspx#comments</comments><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I'm Todd Lefor and I work on the Microsoft Business Framework team. I'm interested in all sorts of technology, including (but not limited to) digital video--I've actually been able to convince my wife that we need a TiVo&amp;nbsp;AND a Media Center PC--computer animation, human interface, well done design&amp;nbsp;and high performing transaction based financial systems. My first post is some abstract thoughts on object database technology, which is my focus within the Business Framework. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I am not happy with my hippocampus. I'm content with the way it looks &lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;-&lt;/SPAN&gt;&lt;/FONT&gt; I've had a sufficient number of head X-ray's in my life that it has a nice tan. I'm not happy with it because I fear that I've trained it to be really efficient. In fact, it filters much more than I'd like it to. Instead of filtering, I'd like it to do more long-term storing of data.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I heard a quote the other day from a supposed industry expert. He said...&amp;nbsp; "I was &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;literally&lt;/SPAN&gt;&lt;/I&gt; drowning in a sea of data." After I finished snorting soda out of my nose, I wondered what that person's obituary would read had that event been fatal:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Industry veteran drowns in sea of data. Forensic database experts claim his data flotation device failed to inflate.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I think what he meant was that he was &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;figuratively&lt;/SPAN&gt;&lt;/I&gt; drowning in a sea of data. Grammatical issues aside, I think he had a point. Data creation and data consumption are growing at a shocking rate. So much so that we've exceeded our ability to analyze and manage it. Part of the reason why it's so hard to manage is that we have a fixed way of thinking about our data. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I recall a simpler time when reading a book or coming across information in a newspaper when I would be introduced to a historical event or scientific phenomena. Growing up, we didn't own an encyclopedia. (Okay, my mom was a bit of a hypochondriac, and we had a set of medical encyclopedias - but none were applicable to my problem.&lt;FONT color=navy&gt;&lt;SPAN style="COLOR: navy"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt; In those days, my experience or understanding was limited to my knowledge as of that time and place. My perception of the material was limited by my historical ability to relate it to some other event or logic known to me at the time. Today it's different. The Internet has become a large part of my learning experience. I sat down over the weekend to finish reading &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:PersonName style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;Dan Brown&lt;/st1:PersonName&gt;'s, "The DaVinci Code." It took me much longer to read this book than it would have without the Internet. I found myself setting the book down and picking up my laptop to scan the Internet for information on the historical ramblings of the book. &lt;st1:PersonName style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x" tabIndex=0 w:st="on"&gt;Dan Brown&lt;/st1:PersonName&gt; discusses different meanings (real or perceived) in several well known paintings. I had a more fulfilling adventure reading this book, given that I could stop and study the information presented, via the Internet. In the past, my perceptions and interpretations of the book would have been different - limited by my ability to relate the material to past experiences.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Human learning is constrained by our ability to remember facts and details.&amp;nbsp;I was able to experience the book more richly because I had the ability to analyze and research detailed facts that the author outlined. Some of that information had certainly crossed my path before. For example, I've seen DaVinci's "Last Supper," yet I could not recall colors, placement of objects or people in the painting as described. Why is it that some people have "photographic memories." I recently asked my friend Tim a question about Intel architecture. He went to his white board and drew a schematic that he had seen on a web site several months earlier. I went back to my computer and looked up the schematic and discovered that his drawing was perfect, including numeric details. Since I can't recall what I had for supper last night, it's clear to me that I could benefit from a supplemental digital memory.&amp;nbsp; I've heard futurists describe the next phase of human evolution as one that includes integration with machines. If you can get thoughts of Robocop and the Six Million Dollar Man out of your head, there's room for real discussion here. The evolution of faster processing and larger data stores is historically charted and can be accurately predicted out into the future for several years, demonstrating that the growth of computational power and data store will eventually lead to the ability for a person to store virtually every experience that they have.&amp;nbsp; If this is so, how will we manage this?&amp;nbsp;How will I interact with this data? In a Virtual Data Reality, does data have pre-determined categories and shape, like real world objects? Who defines this data DNA (self-describing properties and behavior), and how does it get defined? If data has DNA&lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;,&lt;/SPAN&gt;&lt;/FONT&gt; is it then possible to create natural interaction and association between data?&amp;nbsp; What kind of software is necessary to manage and interact with self-describing data? Today's relational models have strict and confined definitions of data and cryptic methods of retrieving that data. The gap between object oriented definition of data and relational storage hasn't been bridged in a manner that makes natural association and interaction possible. Object data needs to be managed by the application developer and marshaled to and from a relational store. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;To be able to bridge the object/relational gap&lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;,&lt;/SPAN&gt;&lt;/FONT&gt; a set of tools is needed with which the developer is allowed to think of data in terms of objects. The objects should be defined in terms of not just behavior&lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;,&lt;/SPAN&gt;&lt;/FONT&gt; but also descriptive attributes (read: metadata).&amp;nbsp; Storage systems should be able to recognize attributes and create natural association and composition between objects. In this world, the developer should be able to create a person object and that person object should be able to relate to other person objects with similar attributes. The first step in this evolution is to create a development infrastructure in which data can easily be described as objects and then persisted and retrieved as objects without restrictions or knowledge of a particular data repository. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;We're working on tools that may someday provide this world for developers. Given our current limitations in processor power and storage, the associations and compositions will be defined by the developer (read: hard wired) providing a limited, but functional set of data relationships.&amp;nbsp; Additionally, given the current state of object database technology and the need to integrate with existing relational data stores, the developer should be able to create mappings between object and relational data.&amp;nbsp; When we do indeed have processing and storage bandwidth&lt;FONT color=red&gt;&lt;SPAN style="COLOR: red"&gt;,&lt;/SPAN&gt;&lt;/FONT&gt; the object infrastructure and tools that we provide will be there to provide the fundamental building blocks for a Virtual Data Reality. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I'd like to ramble more and provide more details, but I can't remember what they are... damn hippocampus.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=83311" width="1" height="1"&gt;</description></item></channel></rss>