<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Life on Planet Groove &#187; Technology</title>
	<atom:link href="http://www.lifeonplanetgroove.com/blog/index.php/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lifeonplanetgroove.com/blog</link>
	<description>Adam Toth's Blog</description>
	<lastBuildDate>Thu, 27 May 2010 21:07:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating a Custom Metadata Editor Plugin for Colligo for SharePoint</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/27/creating-a-custom-metadata-editor-plugin-for-colligo-for-sharepoint/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/27/creating-a-custom-metadata-editor-plugin-for-colligo-for-sharepoint/#comments</comments>
		<pubDate>Thu, 27 May 2010 21:07:00 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Colligo Contributor]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/?p=421</guid>
		<description><![CDATA[Just wrapped up a project developing a custom metadata editor to plugin to the Colligo Contributor for SharePoint client.
If you aren’t familiar with Colligo, it’s a desktop client application/outlook add-in/explorer file manager, that enables users to save documents or emails directly to SharePoint, and be prompted for metadata at the time of saving.
Colligo reads the [...]]]></description>
			<content:encoded><![CDATA[<p>Just wrapped up a project developing a custom metadata editor to plugin to the Colligo Contributor for SharePoint client.</p>
<p>If you aren’t familiar with Colligo, it’s a desktop client application/outlook add-in/explorer file manager, that enables users to save documents or emails directly to SharePoint, and be prompted for metadata at the time of saving.</p>
<p>Colligo reads the content type of the target lists/libraries, and generates a default form very similar to what SharePoint does with the default EditForm.aspx ListForm web part. If you don’t like the default form, or need to customize the metadata entry experience (for example custom validation, pulling from external data sources, inter-dependent controls), you can develop a custom editor and show your own Windows Forms-based form to the user.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/05/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Colligo default editor form" border="0" alt="Colligo default editor form" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/05/image_thumb.png" width="240" height="224" /></a>     <br /><font size="1">The default Colligo Editor form, shown here when adding a new Announcement.</font></p>
<h3>How to Start</h3>
<p>To start developing a custom editor, begin by installing Colligo Contributor, and obtaining your product and sdk keys from Colligo.</p>
<p>Create a new Visual Studio Class Library project, and add a reference to the Colligo dlls in the GAC.</p>
<p>Add the necessary using statements: </p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">using</span> Colligo;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">using</span> Colligo.Properties;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">using</span> Colligo.Util;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">using</span> Colligo.WML.MetaData;</pre>
<p><!--CRLF--></div>
</div>
<p>Change your class to inherit from the ICustomEditor class:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">namespace</span> MyNamespace</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> MyCustomEditor : ICustomEditor</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<p><!--CRLF--></div>
</div>
<p>Implement the Interface methods:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">namespace</span> MyNamespace</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> MyCustomEditor : ICustomEditor</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #008000">// SDK Key</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">private</span> <span style="color: #0000ff">const</span> <span style="color: #0000ff">string</span> SDK_KEY = <span style="color: #006080">&quot;XXXXX-XXXXX-XXXXX-XXXXX-XXXXX&quot;</span>;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #cc6633">#region</span> ICustomEditor Members</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> GetSdkKey()</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            <span style="color: #0000ff">return</span> SDK_KEY;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">public</span> EditorResult ShowEditor(IEditContext context)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            <span style="color: #008000">// Show your form here</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">public</span> ResolveConflictResult ShowResolveConflictDialog(IResolveConflictContext context)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            <span style="color: #0000ff">return</span> ResolveConflictResult.UseDefaultResolveDialog;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        }</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #cc6633">#endregion</span></pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<p><!--CRLF--></div>
</div>
<p>In the ShowEditor method, this is where you can create an instance of a Windows Form, and call the ShowDialog method on it. You can also pre-validate and avoid showing your form for situations that are not appropriate.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">public</span> EditorResult ShowEditor(IEditContext context)</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// Check if this is something we care about</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">if</span> (!context.List.IsDocumentLibrary)</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">return</span> EditorResult.UseDefaultEditor;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">if</span> (!<span style="color: #0000ff">string</span>.Equals(context.List.Name, <span style="color: #006080">&quot;Private Documents&quot;</span>, StringComparison.CurrentCultureIgnoreCase) &amp;&amp;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        !<span style="color: #0000ff">string</span>.Equals(context.List.Name, <span style="color: #006080">&quot;Public Documents&quot;</span>, StringComparison.CurrentCultureIgnoreCase))</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">return</span> EditorResult.UseDefaultEditor;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// Only show for Create/Edit (use the default Colligo form for Viewing)</span></pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">if</span> (context.EditorMode == EditorMode.Create || context.EditorMode == EditorMode.Edit)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">using</span> (myCustomWindowsForm myForm = <span style="color: #0000ff">new</span> myCustomWindowsForm(context))</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            DialogResult createResult = DialogResult.None;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            createResult = myForm.ShowDialog(context.Parent);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            <span style="color: #0000ff">switch</span> (createResult)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            {</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                <span style="color: #0000ff">case</span> DialogResult.Cancel:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                    <span style="color: #0000ff">return</span> EditorResult.Cancel;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                <span style="color: #0000ff">case</span> DialogResult.OK:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                    <span style="color: #0000ff">return</span> EditorResult.OK;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                <span style="color: #0000ff">case</span> DialogResult.No:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                    <span style="color: #0000ff">return</span> EditorResult.UseDefaultEditor;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        }</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #008000">// View - Show the default editor</span></pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">        <span style="color: #0000ff">return</span> EditorResult.UseDefaultEditor;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    }</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// Fall through</span></pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">return</span> EditorResult.OK;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<p><!--CRLF--></div>
</div>
</p>
<p>Notice I am passing in the IEditContext instance into my form’s constructor. The IEditContext object has all the goodies in it, and will give you access to the list, the web, the content types, list item metadata, etc.).</p>
<h3>What to Consider</h3>
<p>Some basic things to consider are:</p>
<ul>
<li>Which scenarios will your editor cover? View, Create, Edit?</li>
<li>Is this only for documents, or list items, or both? </li>
<li>Will you support content types? A list/library can be configured with multiple content types, which you will need to create a UI for selecting/changing if you decide to support that. </li>
<li>How will you handle multiple files? Will you enable setting different data for each item, or will you force all items to use the same entered metadata? Think carefully about the “Name” field for documents in document libraries. You want to make sure that the same name is not used for multiple documents. </li>
<li>Will you allow changing folders (for document libraries with folders enabled)? If so, you’ll need to build this UI. </li>
</ul>
<p>There are a number of ways/methods that may kick off the display of your form, and you need to consider each of these:</p>
<ul>
<li>User selects New &gt; Item from within Colligo Contributor </li>
<ul>
<li>This is similar to the New &gt; [Content Type] menu directly in SharePoint. You can expect that EditorContext.ContentType and EditorContext.ListItems[0].ContentType will not be null. </li>
</ul>
<li>User selects Upload from within Colligo Contributor </li>
<ul>
<li>This is similar to Upload Document from within SharePoint. EditorContext.ContentType and EditorContext.ListItems[0].ContentType may be null. </li>
</ul>
<li>User drags/drops a single file onto Colligo Contributor </li>
<ul>
<li>EditorContext.ContentType and EditorContext.ListItems[0].ContentType may be null. </li>
</ul>
<li>User drags/drops multiple files onto Colligo Contributor </li>
<ul>
<li>EditorContext.ContentType and EditorContext.ListItems[0].ContentType may be null. </li>
</ul>
<li>User performs a single File &gt; Save As from within an application </li>
<ul>
<li>EditorContext.ContentType and EditorContext.ListItems[0].ContentType may be null. </li>
</ul>
<li>User drags/drops multiple files onto the Colligo area in Windows Explorer </li>
<ul>
<li>EditorContext.ContentType and EditorContext.ListItems[0].ContentType may be null.</li>
</ul>
<li>User selects Edit Properties from within Colligo Contributor </li>
<ul>
<li>Need to grab existing values and prepopulate your controls. EditorContext.ContentType and EditorContext.ListItems[0].ContentType will not be null. </li>
</ul>
</ul>
<h3>
  <br />Some Gotchas</h3>
<p>Following are some gotchas to be aware of:</p>
<h4>Check for Null</h4>
<p>Don’t make any assumptions about any of the items in the IEditContext object. ContentTypes may be null, Fields may not exist or be null, other relevant ILists in the Web may not be synchronized locally, and will be null, etc., etc., etc. Check everything for null first, and test everything that returns a collection/array for Count and Length &gt; 0. If there are fields/lists/lookup column values that your form expects, check for the existence of these things right away, and exit if you don’t find them.</p>
<h4>Parent Windows</h4>
<p>If your form is called via the Save As dialog from an application (or via the FileManager), the ParentWindow handle may not be valid, so be careful with the ShowDialog(IWin32Window) overload, which threw a System.ComponentModel.Win32Exception for me. I had to wrap my ShowDialog(context.Parent) in a try&gt;catch, and then try it without any parameters (ShowDialog() ).</p>
<h4>Custom Field Types</h4>
<p>If you are using any custom field types, be really careful to make sure and store the data in the proper format. My customer was using a couple of custom field types found on CodePlex, and one of them extended the Lookup field, and it took me a few traces with Fiddler to figure out that it wanted its values in lookup column format (“52;#ItemName”);</p>
</p>
</p>
</p>
<h4>Site Lookup Columns</h4>
<p>If you have any lookup columns that are defined in higher-level sites, and you are using those site columns in lists located in subsites, then Colligo will not be able to see the lookup values. In order to implement these scenarios, you will have to force your users to synchronize the higher level sites as well as the subsites.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/27/creating-a-custom-metadata-editor-plugin-for-colligo-for-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filtering XML output of SPListItemCollection using Linq to XML</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/26/filtering-xml-output-of-splistitemcollection-using-linq-to-xml/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/26/filtering-xml-output-of-splistitemcollection-using-linq-to-xml/#comments</comments>
		<pubDate>Wed, 26 May 2010 20:57:45 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Linq to XML]]></category>
		<category><![CDATA[Linq2XML]]></category>
		<category><![CDATA[SPListItemCollection]]></category>
		<category><![CDATA[XLinq]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2010/05/26/filtering-xml-output-of-splistitemcollection-using-linq-to-xml/</guid>
		<description><![CDATA[I’ve been writing a slurry of code to return list item XML so that it can be parsed and consumed by AJAX components on the client side. Since Lists.asmx does not work in anonymous access scenarios, I’ve been creating many proxy .ashx Http Handlers installed in the LAYOUTS directory, to query via the object model [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been writing a slurry of code to return list item XML so that it can be parsed and consumed by AJAX components on the client side. Since Lists.asmx does not work in anonymous access scenarios, I’ve been creating many proxy .ashx Http Handlers installed in the LAYOUTS directory, to query via the object model and return the XML of the list items, using the .Xml property of a SPListItemCollection.</p>
<p>I had one particular scenario where I couldn’t pre-filter the items in the collection with an SPQuery object (too complicated a query for CAML), so I needed a way to filter the SPListItemCollection afterwards using C#, before returning the XML.</p>
<p>The SPListItemCollection offers the .Delete() and .DeleteItemById() methods, however they will commit the deletion back to SharePoint. I wanted to simply remove some items from the in-memory collection, not delete the items from the server. There was no way that I could see to remove items from an SPListItemCollection in memory only.</p>
<p>I looked into sub-classing or extending the SPListItemCollection class, but there is no public constructor in the base class, and no way to get at the logic behind the .Xml property without nasty reflection.</p>
<p>I ultimately ended up resorting to using Linq to XML to delete the rows directly from the returned XML, and then adjusted the ItemCount accordingly.</p>
<p>Here’s the code:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; text-align: left; padding: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text;">
<div id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #008000;">// Get the list items from a list</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">SPListItemCollection items = myList.GetItems(mySPQuery);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #008000;">// Get the xml of the list items</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">itemXml = surveyItems.Xml;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">XNamespace z = <span style="color: #006080;">"#RowsetSchema"</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">XDocument xdoc = XDocument.Parse(itemXml);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">IEnumerable&lt;XElement&gt; rows = xdoc.Root.Descendants(z + <span style="color: #006080;">"row"</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">List&lt;XElement&gt; rowsToDelete = <span style="color: #0000ff;">new</span> List&lt;XElement&gt;();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #0000ff;">foreach</span> (XElement row <span style="color: #0000ff;">in</span> rows)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    <span style="color: #008000;">// Here is where you can test for a condition, and decide to remove a row</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    <span style="color: #0000ff;">if</span> (row.Attribute(<span style="color: #006080;">"ows_Title"</span>).Value.Contains(<span style="color: #006080;">"Some string to filter on"</span>))</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">        rowsToDelete.Add(row);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    }</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">}</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #0000ff;">while</span> (rowsToDelete.Count &gt; 0)</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">{</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    <span style="color: #008000;">// Update the parent row count</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    <span style="color: #0000ff;">int</span> rowCount = Convert.ToInt32(rowsToDelete[0].Parent.Attribute(<span style="color: #006080;">"ItemCount"</span>).Value);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    rowsToDelete[0].Parent.Attribute(<span style="color: #006080;">"ItemCount"</span>).Value = (rowCount - 1).ToString();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    rowsToDelete[0].Remove();</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">    rowsToDelete.RemoveAt(0);</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">}</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #008000;">// Get the newly filtered xml</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">itemXml = xdoc.ToString()</pre>
<p><!--CRLF--></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2010/05/26/filtering-xml-output-of-splistitemcollection-using-linq-to-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xPollinate Preview of HelloTxt Support</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2010/04/04/xpollinate-preview-of-hellotxt-support/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2010/04/04/xpollinate-preview-of-hellotxt-support/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 03:48:15 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[cross post]]></category>
		<category><![CDATA[HelloTxt]]></category>
		<category><![CDATA[Ping.FM]]></category>
		<category><![CDATA[Windows Live Writer]]></category>
		<category><![CDATA[xPollinate]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2010/04/04/xpollinate-preview-of-hellotxt-support/</guid>
		<description><![CDATA[I have a new version of xPollinate waiting in the wings, with new support for HelloTxt. With this new feature, you won’t have to choose between Ping.fm or HelloTxt – you can use one, the other, or both (just try not to spam the hell out of your friends with duplicate posts!).
I’ve submitted my application [...]]]></description>
			<content:encoded><![CDATA[<p>I have a new version of xPollinate waiting in the wings, with new support for HelloTxt. With this new feature, you won’t have to choose between Ping.fm or HelloTxt – you can use one, the other, or both (just try not to spam the hell out of your friends with duplicate posts!).</p>
<p>I’ve submitted my application for approval at HelloTxt, and hopefully it’ll be a quick approval process. I can’t release the version for testing yet, because it only works with my own user key right now until it gets reviewed and approved (sort of a chicken and egg thing if you ask me).</p>
<p>In the meantime, I thought I’d post a quick screen shot of the new tab and highlight some features:</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="New xPollinate tab for HelloTxt" border="0" alt="New xPollinate tab for HelloTxt" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image_thumb.png" width="490" height="484" /></a> </p>
<p>After entering your API key, xPollinate will pull in your Tags, and all of your defined services (networks). You can either choose a tag to post to (which will select only those networks in the tag), or you can choose All Networks and then individually select the networks to post to. </p>
<p>Notice that the account name of each service is posted next to the service name. This is because HelloTxt support multiple accounts with the same service (i.e. more than one twitter account).</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Account names" border="0" alt="Account names" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image_thumb1.png" width="195" height="111" /></a>&#160;</p>
<p>Just like Ping.FM, you can choose to post either as a status/microblog update using a template, or post as a blog entry.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Blog or status options" border="0" alt="Blog or status options" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2010/04/image_thumb2.png" width="365" height="143" /></a> </p>
</p>
</p>
<p>I’m excited to get this release out, and hope the application gets accepted soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2010/04/04/xpollinate-preview-of-hellotxt-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My PDC Portrait</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/12/16/my-pdc-portrait/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/12/16/my-pdc-portrait/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 22:05:23 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Touch Screen Computing]]></category>
		<category><![CDATA[pdc09]]></category>
		<category><![CDATA[touch screen computing]]></category>
		<category><![CDATA[win7]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/12/16/my-pdc-portrait/</guid>
		<description><![CDATA[Here is my portrait done by an artist with brushes on a touch screen Windows 7 computer at PDC 09:

]]></description>
			<content:encoded><![CDATA[<p>Here is my portrait done by an artist with brushes on a touch screen Windows 7 computer at PDC 09:</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/12/mypdcportrait.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="mypdcportrait" border="0" alt="mypdcportrait" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/12/mypdcportrait-thumb.jpg" width="644" height="348" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/12/16/my-pdc-portrait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDC Day 1 &#8211; Lap Around Windows Azure Notes</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-lap-around-windows-azure-notes/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-lap-around-windows-azure-notes/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:02:56 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WF]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[cloud computing]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-lap-around-windows-azure-notes/</guid>
		<description><![CDATA[
Session #1:
Windows Azure Platform:
Windows Azure
SQL Azure
AppFabric
…plus developer tools and &#34;Dallas&#34;
Azure does &#34;Compute&#34; &#34;Management&#34; and &#34;Storage&#34;
SQL Azure is a relational DB as a service.
Demo is of a tickmaster-type application that uses Azure.
TicketDirect Architecture:
&#34;Compute&#34; using Web and Worker roles to process tickets
Using the service bus to communicate with on-premise services.
Storage of data in SQL Azure
Printing of tickets [...]]]></description>
			<content:encoded><![CDATA[<ol>
<p>Session #1:</p>
<p>Windows Azure Platform:</p>
<li>Windows Azure</li>
<li>SQL Azure</li>
<li>AppFabric
<p>…plus developer tools and &quot;Dallas&quot;</p>
<p>Azure does &quot;Compute&quot; &quot;Management&quot; and &quot;Storage&quot;</p>
<p>SQL Azure is a relational DB as a service.</p>
<p>Demo is of a tickmaster-type application that uses Azure.</p>
<p>TicketDirect Architecture:</p>
<p>&quot;Compute&quot; using Web and Worker roles to process tickets</p>
<p>Using the service bus to communicate with on-premise services.</p>
<p>Storage of data in SQL Azure</p>
<p>Printing of tickets is offloaded to the site (i.e. venue).</p>
<p>Site receives a message via service bus to print the ticket for pickup at role call</p>
</li>
</ol>
<p>Another Demo, sample app, of basic CRUD web app.</p>
<p>CRUD is standard ASP.NET SqlDataSource control with SQL commands, that works with SQL Express but runs in the cloud</p>
<p>Demo&#8217;d using Trace.Write which writes out to the development console logger and can also write to the Azure Storage logging subsystem</p>
<p>Migrated to SQL Azure by just changing the connection string</p>
<p><strong>Storage (BLOBs, Tables, and Queues)</strong></p>
<p>NEW &#8211; Add ability to mount Azure storage as NTFS drive</p>
<p>Coming soon &#8211; Ability to manage VMs with admin privileges</p>
<p>Create snapshots of your VMs</p>
<p>When up-scaling, Azure will deploy your app on top of your custom VM image</p>
<p><strong>SQL Azure:</strong></p>
<p>Only pay for what you use</p>
<p>Do not worry about disaster recovery</p>
<p>Change a connection string an have effortless switch to SQL Azure</p>
<p>Sync framework to sync SQL DBs in the cloud with on-premise data</p>
<p><strong>Service Bus:</strong></p>
<p>Securely connect apps (on-premise with cloud)</p>
<p>Tunneling technology</p>
<p>Services bus is a middle man for communication between </p>
<p><strong>Access Control:</strong></p>
<p>Provides outsourcing of claims-based RESTful services</p>
<p>Integrates with ADFS v2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-lap-around-windows-azure-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDC Day 1 KeyNote Notes</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-keynote-notes/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-keynote-notes/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 15:53:55 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WF]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[WinForms]]></category>
		<category><![CDATA[appfabric]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[pdc09]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-keynote-notes/</guid>
		<description><![CDATA[
Windows Azure Improvements since last year:
Support PHP, CGI, Apache, other frameworks
Expose very low-level programming efforts (not just .NET).      Example was a C++ app with pointers exposed as an Azure service
Identity framework (support passing tokens from federated locations i.e. onsite AD instance)


SQL Azure Improvements since last year:
Not just RESTful consumption of [...]]]></description>
			<content:encoded><![CDATA[<ol>
<p>Windows Azure Improvements since last year:</p>
<li>Support PHP, CGI, Apache, other frameworks</li>
<li>Expose very low-level programming efforts (not just .NET).      <br />Example was a C++ app with pointers exposed as an Azure service</li>
<li>Identity framework (support passing tokens from federated locations i.e. onsite AD instance)</li>
</ol>
<ol>
<p>SQL Azure Improvements since last year:</p>
<li>Not just RESTful consumption of services anymore</li>
<li>Works with standard TDS based tools (SQL management studio)</li>
</ol>
<ol>
<p>Microsoft has a vision of &quot;Three screens and a Cloud&quot;.</p>
<p>The screens include:</p>
<li>Mobile devices</li>
<li>Desktop computers</li>
<li>Internet connected TVs
<p>They can all be united by data and services in the cloud.</p>
</li>
</ol>
<p><a href="http://pinpoint.microsoft.com/en-US/Dallas" target="_blank">Public Data in the Cloud (Codename &quot;Dallas&quot;)</a>. </p>
<p>Repository for public data sets that can be consumed in any number of ways (and easily by Azure)</p>
<p>Accessed through Microsoft PinPoint</p>
<p><a href="http://www.microsoft.com/windowsazure/developers/dallas/" target="_blank">Sign up for a CTP key</a></p>
<p>Some data includes NASA mars photos, GIS data, AP News articles</p>
<p><strong>PinPoint</strong>:</p>
<p>Centralized marketplace for partner providers, Azure ISVs and implementers, and gateway to &quot;Dallas&quot; public Data.</p>
<p>&quot;System Center&quot; will plugin to Azure to monitor your Azure instances, check to meet SLAs, and enable you to scale up the Azure instances directly.</p>
<p>2010 will include ability to have the Azure cloud be able to establish a network connection to on-premise resources (i.e. self hosted SQL Server)</p>
<p>WordPress is moving to Windows Azure</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/11/18/pdc-day-1-keynote-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Plugin DLL Hell (aka assembly binding nightmares)</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/20/net-plugin-dll-hell-aka-assembly-binding-nightmares/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/20/net-plugin-dll-hell-aka-assembly-binding-nightmares/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 01:08:25 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[WinForms]]></category>
		<category><![CDATA[assembly binding]]></category>
		<category><![CDATA[dll hell]]></category>
		<category><![CDATA[fusion log]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/10/20/net-plugin-dll-hell-aka-assembly-binding-nightmares/</guid>
		<description><![CDATA[I’ve worked on a few .NET WinForms applications that utilized a “plugin” model. You’ve probably seen similar apps out there, where a main application searches a directory for DLLs, and then tries to load them into the AppDomain, using some code like below:


Assembly plugin = System.Reflection.Assembly.LoadFrom(pluginFileName);

object pluginClass = Activator.CreateInstance(plugin.GetType(&#34;Plugin.PluginClass&#34;));

&#160;


This kind of architecture is pretty standard, [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve worked on a few .NET WinForms applications that utilized a “plugin” model. You’ve probably seen similar apps out there, where a main application searches a directory for DLLs, and then tries to load them into the AppDomain, using some code like below:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">Assembly plugin = System.Reflection.Assembly.LoadFrom(pluginFileName);</pre>
<p><!--CRLF--></p>
<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: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">object</span> pluginClass = Activator.CreateInstance(plugin.GetType(<span style="color: #006080">&quot;Plugin.PluginClass&quot;</span>));</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&#160;</pre>
<p><!--CRLF--></div>
</div>
<p>This kind of architecture is pretty standard, and is one of the few ways to accomplish this plugin model in .NET (other than some cutting-edge things like <a href="http://mef.codeplex.com/" target="_blank">MEF</a>). It works for the most part, but has some obvious limitations, such as:</p>
<ul>
<li>Once a DLL is loaded in this manner, it cannot be unloaded from memory (unless you mess around with <a href="http://people.oregonstate.edu/~reeset/blog/archives/466" target="_blank">AppDomains for each plugin</a>)</li>
<li>If your plugins want to talk to one another, they pretty much have to go through a lot of plumbing code in the main app </li>
</ul>
<p>Where it really starts to have problems is when your plugin DLL needs to reference other DLLs used by the main application, or other plugin DLLs, and you find yourself in <strong>.NET Plugin DLL Hell</strong>.</p>
<p>Here is the crux of the problem:</p>
<p><strong>When you add a reference to a DLL via Visual Studio, the framework will always try to load an exact matching version of that assembly, and will fail if it can’t find it. So, good luck if that DLL you depend on ever gets upgraded to a new version.</strong></p>
<p>You can usually control this with a standalone application, because when you upgrade the app, you upgrade all the dependencies at the same time. In a plugin model, you can’t control when other dependencies are upgraded, and so your plugin will simply fail to load when this happens.</p>
<p>There is no way in the .NET framework to tell it to use a particular version of a DLL <strong>or any newer version it finds</strong>.</p>
<p>Here’s a scenario to demonstrate this: </p>
<ul>
<li>You have a WinForms application, that loads plugin DLLs when the app starts. </li>
<li>The main application uses a third-party control library. </li>
<li>You write a plugin that also needs the controls, so you add a reference to the version that the main app uses. </li>
<li>At some point, someone working on the main app upgrades it to use a newer controls DLL, recompiles the app, and distributes it along with the newer controls DLL. </li>
<li>Since no work was actually done on your plugin, no one has recompiled it against the newer controls DLL. </li>
<li>When the upgraded application starts and loads your plugin, your plugin goes BOOM! </li>
</ul>
<p>Another scenario:</p>
<ul>
<li>Your plugin references another plugin </li>
<li>The other plugin gets upgraded without your plugin getting recompiled </li>
<li>Your plugin now goes BOOM! </li>
</ul>
<p>When I say “BOOM!”, I mean you’ll probably see something like this from the Fusion log:</p>
<p><em>&quot;System.IO.FileNotFoundException: Could not load file or assembly ‘YourDependentAssemblyNameHere’ or one of its dependencies. The system cannot find the file specified.”</em>&#160;</p>
<p>I am having a similar problem with my Windows LiveWriter plugin, <a href="http://www.lifeonplanetgroove.com/blog/index.php/projects/xpollinate-windows-live-writer-cross-post-plugin" target="_blank">xPollinate</a>. Every time Microsoft releases a new version of LiveWriter, all of its DLLs that I reference have new version numbers, and so my plugin will fail to load unless I recompile my plugin against the latest versions of the DLLs. </p>
<p>Well, so what are our options to deal with this?</p>
<ul>
<li>You can simply not add any references in your plugin project via Visual Studio, and just use reflection for everything (yuck). This is probably a little easier now with the dynamic keyword in C#, but not much. </li>
<li>You can try to get the main application to put in assembly binding redirects in its config file for any common DLLs that might be referenced by plugins. </li>
</ul>
<p>That’s all I can see at this point. Here’s to hoping a future version of the framework will make this easier for us.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/20/net-plugin-dll-hell-aka-assembly-binding-nightmares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1.0.0.3 Release of xPollinate</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/12/1003-release-of-xpollinate/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/12/1003-release-of-xpollinate/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 22:56:02 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows Live Writer]]></category>
		<category><![CDATA[xPollinate]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/10/12/1003-release-of-xpollinate/</guid>
		<description><![CDATA[I just released a new version of xPollinate, 1.0.0.3.
This is just a maintenance release to make the plugin work with Windows LiveWriter version 14.0.8089.726.
I am currently working on supporting categories for the next release, so stay tuned.
]]></description>
			<content:encoded><![CDATA[<p>I just released a new version of <a href="http://www.lifeonplanetgroove.com/blog/index.php/projects/xpollinate-windows-live-writer-cross-post-plugin" target="_blank">xPollinate</a>, 1.0.0.3.</p>
<p>This is just a maintenance release to make the plugin work with Windows LiveWriter version 14.0.8089.726.</p>
<p>I am currently working on supporting categories for the next release, so stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/10/12/1003-release-of-xpollinate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Review &#8211; Accessibility Kit for SharePoint – Half Finished Product?</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/25/review-accessibility-kit-for-sharepoint-half-finished-product/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/25/review-accessibility-kit-for-sharepoint-half-finished-product/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 22:29:54 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[accessibility kit for SharePoint]]></category>
		<category><![CDATA[aks]]></category>
		<category><![CDATA[wcag]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/06/25/review-accessibility-kit-for-sharepoint-half-finished-product/</guid>
		<description><![CDATA[Rating: 2 out of 5 stars
I’m implementing the AKS for a customer, and I’m having a hard time understanding how this product actually made it to a public release. It feels like a product that is half finished, that was used as a springboard to creating a commercial product, while leaving the original free version [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Rating:</strong> 2 out of 5 stars</p>
<p>I’m implementing the AKS for a customer, and I’m having a hard time understanding how this product actually made it to a public release. It feels like a product that is half finished, that was used as a springboard to creating a commercial product, while leaving the original free version to the wayside. If you are considering working with this, you might want to read about the frustrations I encountered below:</p>
<h3>Installation experience – Where are those .bat files?</h3>
<p>When you download the AKS, you’ll get a zip file, which contains a folder and a single EXE installer.</p>
<p>Running the installer will perform the following tasks:</p>
<ol>
<li>Installs control adapters and reference files into an AKS folder in your Program Files directory.</li>
<li>Copies a feature and master pages/css styles to the /12/Templates/Features folder in your SharePoint installation (if you are running 32 bit).</li>
<li>Creates a Start Menu icon group for AKS tasks and links.</li>
</ol>
<p>After running through the installer, a quick look at the “Welcome to the Accessibility Kit…” PDF informs you that you need to install and activate the feature:</p>
<blockquote><p>The AKS Feature<br />
The AKS Feature is not the AKS Kit but a part of the Kit that works as a feature in MOSS. The AKS<br />
Feature installs the Example Master pages and the Modified CSS. You must install this by<br />
selecting Install AKS Feature from the Start Menu:  Start | All Programs | AKS by HiSoftware |<br />
AKS Feature install.  Once the feature is installed, you will still need to activate it within your<br />
SharePoint application through: Site Settings | Site Collection Features. <strong><em>Please note if you are<br />
on a 64 Bit server please follow the 64 Bit instructions.</em></strong></p></blockquote>
<p>I looked all over for those “<strong>64 bit instructions</strong>”, but there was nothing. There was a “64bit Feature Install” icon in the Start Menu, but no text anywhere instructing me to click on it.</p>
<p>I figured out that to install the feature, you need to click on either the 64bit Feature Install icon or the AKS Feature Install icon in the Start menu (<em>note that the shortcuts are only created for the current user, and there is no way to tell the installer to install for everyone</em>). If you run these shortcuts from the Start menu, the command window will flash, execute, and then immediately disappear, before you can check if it finished successfully or not. On a 64 bit server, you’ll see a flash of xcopy commands that copy styles and master pages into the /12 folders.</p>
<p>I wanted to be sure that it installed, so I tried to find the location of the batch file so I could run it again in a command prompt and actually see the result. I right-clicked the shortcut and went to Properties to figure out the target location, and it was greyed out:</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image-thumb2.png" border="0" alt="image" width="381" height="537" /></a></p>
<p>I looked for the bat file in the Program Files directory, but no luck. Yuck! A .bat file that I can’t see or easily get to?</p>
<p>I figured out that it installed, because I then saw the feature in my Site Collection Features page. I activated it, and then tried to take a look at the master pages and styles.</p>
<h3>Control Adapters – Incorrect C#</h3>
<p>The AKS comes with several control adapters that rewrite some of the out-of-box control html to make it more compliant. Some of the C# adapter files have mistakes in the C# code that make them not able to compile. For example, in the Web Part Zone Smart Adapter for WCAG2.0, there is an extra curly brace, and even a reference to a variable that is not even declared in the file anywhere:</p>
<div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;">
<div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum1" style="color: #606060">   1:</span> <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum2" style="color: #606060">   2:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum3" style="color: #606060">   3:</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum4" style="color: #606060">   4:</span>     } <span style="color: #008000">// &lt;-- Extra brace?</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum5" style="color: #606060">   5:</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum6" style="color: #606060">   6:</span>     <span style="color: #008000">//Output sOutputBuilder to be rendered</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum7" style="color: #606060">   7:</span>     oOutput.Write(sOutputBuilder.ToString()); <span style="color: #008000">// &lt;-- sOutputBuilder is never declared in this file!</span></pre>
<p><!--CRLF--></p>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"><span id="lnum8" style="color: #606060">   8:</span> }</pre>
<p><!--CRLF--></div>
</div>
<h3>“Smart Adapters” (not too bright)</h3>
<p>The AKS comes with several “Smart” control adapters (adapters that do not need a lot of configuration). The Web Part Zone Smart Adapter sounded like it had some promise, as it would convert a web part zone to use divs instead of tables.</p>
<p>However, when you install it, it has the side effect of not rendering any of your web part’s “Titles”. If you want to use the headers that come with the web parts, then this control will not work for you. It also prevented viewing web parts in Design mode, they would just disappear from the page.</p>
<p>Finally, it was hard to see the point of using the adapters at all, as all they appeared to do was add some labels to blogs, wikis, and search boxes. They will certainly not do anything at all if you use the CKS EBE or Wiki versions, or if you have customized/branded the search controls.</p>
<h3>Master pages and styles do not exist!</h3>
<p>Once you install the feature, a set of master pages and css styles will get installed to the master page and style library galleries for your site collection. I cracked open SharePoint designer, tried to open a master page, and got a nasty error message that the file did not exist and could not be opened.</p>
<p>In order to open the file, I had to run through the SharePoint UI, and “Publish” each master page and CSS style before I could access it via SharePoint designer. There was no mention of this anywhere in the documentation.</p>
<h3>Relative font sizes? Good luck!</h3>
<p>The AKS stylesheets attempt to change all SharePoint font size declarations into relative sizes in ems, rather than fixed pixel/point sizes. This might work fine for anonymous internet site pages, but if you will ever let your visitors view any of the system pages like list new/edit/upload pages or use out-of-box web parts, good luck tweaking styles for a month to get things right.</p>
<h3>Woops, what about default.master?</h3>
<p>The AKS installs alternate versions of the out-of-box publishing master pages, such as BlueBand.master, BlackBand.master, etc. I don’t know about you, but none of my customers have ever started from those master pages on internet sites, and all my intranet applications make heavy use of default.master. I was really disappointed to see that there was no alternate version of default.master.</p>
<h3>HCCE – Nothing but trouble</h3>
<p>The HiSoftware Code Compliance Kit (HCCE) is a SharePoint event handler that will look for a certain string of text in your SharePoint web pages, and replace it with different (possibly more accessible) text. You use a text file in which you specify pipe-delimited lines of text to find and replace (e.g. “Text to find|Text to replace with”). The HCCE has the following problems when implemented:</p>
<ul>
<li>There is only a debug build provided (no release version).</li>
<li>There is no source code (you cannot recompile).</li>
<li>There is no regex option for pattern matching. All strings must be matched and replaced exactly.</li>
<li>The DLL looks for a hard-coded path to the configuration text file in C:\Program Files\HiSoftware… This doesn’t work on 64bit systems because the installer installs to Program Files (x86). Since you can’t recompile the DLL, your only option is to copy the text file to the Program Files directory.</li>
<li>Once you implement the feature, your <a href="https://aks.hisoftware.com/Community/Lists/AKS%20Discussion%20Board/Flat.aspx?RootFolder=%2fCommunity%2fLists%2fAKS%20Discussion%20Board%2fHCCE%20Issue%20%2d%20User%20details%20outside%20HTML&amp;FolderCTID=0x012002008FC8608D3EEDD5409AF56558357C6785&amp;TopicsView=https%3A%2F%2Faks%2Ehisoftware%2Ecom%2FCommunity%2FLists%2FAKS%2520Discussion%2520Board%2FAllItems%2Easpx" target="_blank">SharePoint Welcome menu will get rendered above the &lt;html&gt; tag</a>, causing it to appear at the top of your screen and out of place. Several posts about this, and no response at all from HiSoftware.</li>
<li>The install/uninstall .bat files do not work, and need to be adjusted for 64bit machines. Why no WSP?</li>
</ul>
<h3>Conclusion</h3>
<p>Poorly documented, sloppily put together, and full of holes and mistakes, I was very disappointed in the AKS. Coupled with a total lack of support and responsiveness to issues on their web site, I think it reflects poorly on HiSoftware as a company.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/25/review-accessibility-kit-for-sharepoint-half-finished-product/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>BDC Picker.aspx QueryString Triggers Firewall Security</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/15/bdc-pickeraspx-querystring-triggers-firewall-security/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/15/bdc-pickeraspx-querystring-triggers-firewall-security/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 17:00:00 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[BDC]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/06/15/bdc-pickeraspx-querystring-triggers-firewall-security/</guid>
		<description><![CDATA[The implementation of the BDC entity picker dialog (opened with the Browse button) can cause some firewall and security software to think a worm or sql injection attack is happening and block the traffic.
The manner in which properties and entity IDs are encoded into long query string values makes the urls appear to be injection [...]]]></description>
			<content:encoded><![CDATA[<p>The implementation of the BDC entity picker dialog (opened with the Browse button) can cause some firewall and security software to think a worm or sql injection attack is happening and block the traffic.</p>
<p>The manner in which properties and entity IDs are encoded into long query string values makes the urls appear to be injection attacks. On a particular client’s BDC application, the picker dialog used a url similar to the following:</p>
<p><span style="text-decoration: underline;">http://domainname.org/_layouts/Picker.aspx?MultiSelect=False&amp;CustomProperty=uU2hhcmVQb2ludC5Qb3J0YWwsIFZlcnNpb249MTIuMC4wLAF%2F%2FAQAAAAAAAA9QcmltYXJ5Q29sdW1uSWQQU3lzdGVtSW5zdGFuY2VAAA<br />
AAAMAgAAAF9NaWNyb3NvZnQjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibG<br />
ljS2V5VG9rZW49NzFlOWJjZTExMWU5NDI5YwUBAAAAPk1pYAEAAAD%2F%2F%23Jvc29mdC5TaGFyZVBvaW50LlBvcnRhbC5XZWJDb250cm9scy5JdGVtUGlja2<br />
VyRXh0ZW5kZWREYXRhB<br />
JZAhFbnRpdHlJZBNTZWNvbmRhcnlDb2&#215;1bW<br />
5zSWRzAAAABw8PDw8CAAAANw4AAAcOAAAIDgAACQMAAAAPAwAAAAAAA<br />
AAPCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br />
3D&amp;EntitySeparator=%00&amp;DialogTitle=Choose%20User&amp;DialogImage=%2F_layouts%2Fimages%2Fbizpicker.gif&amp;PickerDialogType=Microsoft.SharePoint.Portal.WebControls.ItemPickerDialog%2C%20Microsoft.SharePoint.Portal%2C%20Version%3D12.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D71e9bce111e9429c&amp;DefaultSearch=</span></p>
<p>Using the HTTP GET for this kind of thing is a bad idea, and I hope that Microsoft fixes this in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/15/bdc-pickeraspx-querystring-triggers-firewall-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Give your Phone Company the Middle Finger with ooma</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/10/give-your-phone-company-the-middle-finger-with-ooma/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/10/give-your-phone-company-the-middle-finger-with-ooma/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 22:57:00 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[ooma]]></category>
		<category><![CDATA[Qwest]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/06/10/give-your-phone-company-the-middle-finger-with-ooma/</guid>
		<description><![CDATA[I keep a land line for various reasons, and have really hated all the charges and fees from Qwest just to maintain this. To start with, if you want long distance service, you have to pay up to $10 a month in just taxes and fees to have it, even if you never use it. [...]]]></description>
			<content:encoded><![CDATA[<p>I keep a land line for various reasons, and have really hated all the charges and fees from Qwest just to maintain this. To start with, if you want long distance service, you have to pay up to $10 a month in just taxes and fees to have it, even if you never use it. We ended up dropping the long distance service on our land line, since we had cell phones. This turned out to be a big pain since we couldn’t use our fax machine on long distance calls, and couldn’t use it on the rare occasions when the cell phone wasn’t good enough.</p>
<p>Enter <a href="http://www.ooma.com">ooma</a> to the rescue.</p>
<p>Ooma is a Voice Over IP system that lets you stick it to the phone companies. For a one time fee of around $250, you get a device that let’s you have a phone line using your broadband internet connection. The sound quality is great, and you never have to pay any monthly fees (unlike <a href="http://www.magicjack.com/1/index.asp">MagicJack</a>), and domestic long distance is free. You can even port over your existing phone number for a $39.99 fee.</p>
<p>I started the port away from Qwest about 3 weeks ago, and it is currently switching over right now.</p>
<p>Since I also have Internet service with Qwest, I was concerned that when the port occurred, my internet connection would also go down. However, Qwest has gotten much smarter about this, and will automatically convert your DSL service to a “standalone DSL”, and give your DSL service a new phone number that is only used for data.</p>
<p>Our old bill was $90 per month, and will be ~$50 now for the standalone DSL. Add in the $39.99 porting fee and cost of the unit ($215 from Amazon with their credit card), and it will take us around 7 months to break even (also counting the extra 3-4 weeks of keeping the land line during the porting process).</p>
<p>The only quirk I&#8217;ve found so far is a setting for an &#8220;ooma Connection Tone&#8221;. When a call is connected, a little jingle is played which informs both parties that the connection is on ooma, and not a standard land line. It&#8217;s mainly an advertising thing for ooma, but it has the odd side effect of screwing up voice mail. When someone&#8217;s voicemail message picks up on the other end, the jingle acts like hitting the &#8220;*&#8221; key, and sends you to their password prompt to get into their mailbox. I just turn that off, as it is unnecessary anyway.</p>
<p><strong>Rating:</strong> 4 out of 5 stars</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/10/give-your-phone-company-the-middle-finger-with-ooma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google, Bing, and Bias</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/03/google-bing-and-bias/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/03/google-bing-and-bias/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:59:26 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[bias]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[xPollinate]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/06/03/google-bing-and-bias/</guid>
		<description><![CDATA[I’ve just started skeptically using Bing. The first thing I searched for was “xPollinate”, my Live Writer plugin. I guess I can safely say, “Bing!”.
On Google, the first result was for a PHP data conversion project, hosted on a GeoCities web page (apparently not updated since 2004):
 
On Bing, the first result was my plugin’s [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve just started skeptically using Bing. The first thing I searched for was “xPollinate”, my Live Writer plugin. I guess I can safely say, “Bing!”.</p>
<p>On Google, the first result was for a PHP data conversion project, hosted on a GeoCities web page (apparently not updated since 2004):</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image-thumb.png" width="571" height="542" /></a> </p>
<p>On Bing, the first result was my plugin’s CodePlex site. The PHP GeoCities site wasn’t even in the top 10.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/06/image-thumb1.png" width="605" height="277" /></a> </p>
<p>Is this a case of bias? Is Google ranking sites about PHP higher than sites about Windows-based technology? Is Bing ranking Windows-based content higher? Or is this just a result of algorithms?</p>
<p>In any case, this is the first time I’ve preferred the results of a search engine other than Google.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/03/google-bing-and-bias/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Windows Live Gallery Sucks</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/02/windows-live-gallery-sucks/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/02/windows-live-gallery-sucks/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 00:00:33 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows Live Gallery]]></category>
		<category><![CDATA[Windows Live Writer]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/06/02/windows-live-gallery-sucks/</guid>
		<description><![CDATA[After writing a Windows Live Writer Plugin and publishing it to the gallery, I’ve become completely frustrated with the user experience of that site. The Windows Live Gallery web site matches all the negative stereotypes that people typically have about Microsoft products. It is a hodgepodge of functionality, loosely tied together, with no visible support [...]]]></description>
			<content:encoded><![CDATA[<p>After writing a Windows Live Writer Plugin and publishing it to the gallery, I’ve become completely frustrated with the user experience of that site. The Windows Live Gallery web site matches all the negative stereotypes that people typically have about Microsoft products. It is a hodgepodge of functionality, loosely tied together, with no visible support anymore. I can only imagine that it was a good idea from a good group, that has then suffered through re-org’s and budget slashes, and is now a headache for some Product Manager that is avoiding touching the system at all costs.</p>
<p>Posts <a href="http://boards.msn.com/Windows%20Live%20Gallery%20Forumboards/thread.aspx?threadid=1072555&amp;post=1072555&amp;boardsparam=PostID=29040048">go unanswered</a>, the forum is no longer moderated and full of garbage. Authors can’t review or respond to issues about their own plugins. It has half-implemented technology (it tells me my plugin is “FREE”, but there is nothing that they currently charge for and they don’t have a shopping cart system in place). There is no mechanism to contact anyone for help (help and support links take you to the general Windows Live help pages).</p>
<p>I wouldn’t be too surprised if a year from now, some manager just pulls the plug on it and displays “The Gallery is now closed. You will be redirected to <a href="http://www.bing.com">www.bing.com</a> in 15 seconds.”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/06/02/windows-live-gallery-sucks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WSS Script for non-AD Installation</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/23/wss-script-for-non-ad-installation/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/23/wss-script-for-non-ad-installation/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 16:48:59 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[psconfig]]></category>
		<category><![CDATA[WSS]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/?p=363</guid>
		<description><![CDATA[Here is a script for configuring WSS 3.0 installation without Active Directory, where SQL Server resides on a separate box:
psconfig -cmd -configdb -create -server DBSERVERNAME -database wss_admin_config -user WSSSERVER\AppPoolAccountName -password p@ssword -dbuser SQLDBUSERNAME -dbpassword p@ssword -admincontentdatabase wss_admin_content
Based on the post here:
http://blogs.msdn.com/fooshen/archive/2007/02/01/installing-moss-without-ad.aspx
]]></description>
			<content:encoded><![CDATA[<p>Here is a script for configuring WSS 3.0 installation without Active Directory, where SQL Server resides on a separate box:</p>
<p>psconfig -cmd -configdb -create -server DBSERVERNAME -database wss_admin_config -user WSSSERVER\AppPoolAccountName -password p@ssword -dbuser SQLDBUSERNAME -dbpassword p@ssword -admincontentdatabase wss_admin_content</p>
<p>Based on the post here:</p>
<p>http://blogs.msdn.com/fooshen/archive/2007/02/01/installing-moss-without-ad.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/23/wss-script-for-non-ad-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam your own Blog so you can be a SharePoint MVP!</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/15/spam-your-own-blog-so-you-can-be-a-sharepoint-mvp/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/15/spam-your-own-blog-so-you-can-be-a-sharepoint-mvp/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 17:10:48 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[MVP]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/04/15/spam-your-own-blog-so-you-can-be-a-sharepoint-mvp/</guid>
		<description><![CDATA[Ahh, my rant for today.
With the announcement of the name for the next version of SharePoint on the OFFICIAL SharePoint team blog, I am waiting for the inevitable flood of pingbacks, trackbacks, and reposts about this in my RSS reader. This will be similar to the flood of reposts about “SharePoint Designer is now Free!” [...]]]></description>
			<content:encoded><![CDATA[<p>Ahh, my rant for today.</p>
<p>With the announcement of the name for the next version of SharePoint on the OFFICIAL SharePoint team blog, I am waiting for the inevitable flood of pingbacks, trackbacks, and reposts about this in my RSS reader. This will be similar to the flood of reposts about “SharePoint Designer is now Free!” I got a week ago. Same goes for the endless stream of tweets and retweets.</p>
<p>Is it really necessary to repost items from the official SharePoint team blog? If you are interested in SharePoint, you should be following this blog already, no?</p>
<p>I think much of this is a direct result of the MVP system and its requirements. When considering candidates for MVP, the quantity of blog posts, page hits, and comments are a big factor. I’ve seen some bloggers with high-quality posts get passed on as MVPs due to low numbers in their web stats. Are some bloggers trying to up their post counts? Is anybody monitoring quality as well as quantity? </p>
<p>I just can’t help but feel that this race to MVP status is encouraging this. Same goes for the MSDN SharePoint forums, where people seem to be falling all over themselves to answer questions as quickly as possible, without providing quality answers or even understanding the questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/15/spam-your-own-blog-so-you-can-be-a-sharepoint-mvp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SharePoint Field Names have 32 Character Limit &#8211; So Do Replicated Profile Property Names</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/13/sharepoint-field-names-have-32-character-limit-so-do-replicated-profile-property-names/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/13/sharepoint-field-names-have-32-character-limit-so-do-replicated-profile-property-names/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 17:14:39 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/04/13/sharepoint-field-names-have-32-character-limit-so-do-replicated-profile-property-names/</guid>
		<description><![CDATA[I ran into a situation where I created a User Profile Property with the Replicable checkbox set, which had a really long name. There were no errors when saving the profile property, however later on I started receiving errors in the Event Log:
failure trying to synch site [guid] for ContentDB [guid] WebApp [guid].&#160; Exception message [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into a situation where I created a User Profile Property with the Replicable checkbox set, which had a really long name. There were no errors when saving the profile property, however later on I started receiving errors in the Event Log:</p>
<p>failure trying to synch site [guid] for ContentDB [guid] WebApp [guid].&#160; Exception message was A WSS internal name for profile property &#8216;ProfilePropertyWithReallyLongName&#8217; could not be found..</p>
<p>Apparently SharePoint has a limit of 32 characters for Internal Field Names. This will also apply to Replicable User Profile Properties since they will get synced down to the WSS Content DB in the UserInfo list.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/13/sharepoint-field-names-have-32-character-limit-so-do-replicated-profile-property-names/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Wall Mount an HP TouchSmart IQ800</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/10/how-to-wall-mount-an-hp-touchsmart-iq800/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/10/how-to-wall-mount-an-hp-touchsmart-iq800/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 22:26:59 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Home Repair]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[TouchSmart]]></category>
		<category><![CDATA[home repair]]></category>
		<category><![CDATA[VESA]]></category>
		<category><![CDATA[wall mount]]></category>
		<category><![CDATA[wiring]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/04/10/how-to-wall-mount-an-hp-touchsmart-iq800/</guid>
		<description><![CDATA[I just finished wall mounting my HP TouchSmart IQ800 series, and wanted to write it up to help others who are interested in doing this. There is another great post about this with pictures here, so hopefully looking at both will give you a good solid understanding of the process. The other poster mounted with [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished wall mounting my HP TouchSmart IQ800 series, and wanted to write it up to help others who are interested in doing this. There is another <a href="http://www.touchsmartcommunity.com/forum/thread/399/Mounting-my-HP-Touchsmart-in-my-kitchen-as-Home-Controller/" target="_blank">great post about this with pictures here</a>, so hopefully looking at both will give you a good solid understanding of the process. The other poster mounted with a swivel arm mount, but I used the fixed mount that you can purchase directly from the HP site when you buy your TouchSmart.</p>
<h3>Overview</h3>
<p>When we remodeled our kitchen a couple years ago, I envisioned a television or other media device wall mounted in a particular spot opposite our refrigerator. When I first saw the TouchSmart, I knew exactly what needed to go there.</p>
<p>&#160;<a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4457.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4457" border="0" alt="IMG_4457" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4457-thumb.jpg" width="204" height="154" /></a> <a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4459.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4459" border="0" alt="IMG_4459" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4459-thumb.jpg" width="204" height="154" /></a> <a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4460.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4460" border="0" alt="IMG_4460" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4460-thumb.jpg" width="204" height="154" /></a> </p>
<p>During the remodel, I wired ethernet/phone/coaxial ports up the wall near the light switches in anticipation of this. </p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4461.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4461" border="0" alt="IMG_4461" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4461-thumb.jpg" width="154" height="116" /></a></p>
<p><strong>Note:</strong> Quick word of advice &#8211; mounting this thing is not for the faint of heart. If you have any hesitations about attempting this, I’d recommended enjoying your computer and its warranty on your desk <img src='http://www.lifeonplanetgroove.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . For the brave, read on…</p>
</p>
<h3>Planning</h3>
<p>Remember the old saying, “Measure twice, cut once”. Okay, some things to keep in mind:</p>
<ol>
<li>You have to mount this into a stud. Don’t try to use drywall anchors, the unit is too heavy for that.</li>
<li>If your stud very far off-center from where you want to mount, you’ll need to consider a swivel mount instead of the one HP offers.</li>
<li>If your stud is slightly off center, you may be OK, as you can put the VESA hanging bolts off to the right or left a bit (I’ll show that later).</li>
<li>At first glance, the mounting bracket looks uneven, but don’t get concerned. The flange on the left is shorter than the one on the right. However, when you slide the bolts into the holes, they slide back to the left and everything is centered.</li>
<li>Lay everything out first and do some dry runs, seeing how everything will fit together.</li>
</ol>
<p>Some things you’ll need:</p>
<ol>
<li>Corded power drill with 5/32” drill bit</li>
<li>7/16” socket and ratchet</li>
<li>7/16” hex stainless steel lag bolts (2 1/2” long)</li>
<li>Level</li>
<li>Philips and Regular screwdrivers</li>
<li>Measuring tape</li>
<li>Short ladder</li>
<li>Stud finder</li>
</ol>
<h3>Attaching the Mounting Plate to the Wall</h3>
<p>Using your stud finder, locate the stud and mark both sides at the approximate height where you want the center of the unit to be. </p>
<p>My stud was about 2 inches off center from my ideal spot for the unit, but after laying the mounting adapter out, I realized I could place the mounting bolts on the adapter off to the right or left instead of in the center, which would help bring it closer to where I wanted it. The pic below shows the six holes you can use. You can either use the four corners, or the group of four to the left or right.</p>
<p>&#160;<a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4462.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4462" border="0" alt="IMG_4462" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4462-thumb.jpg" width="244" height="184" /></a> </p>
<p>Using a level, hold the mounting bracket up to the wall so the holes in the center align with the middle of the stud. Use a pencil to mark each hole on the wall.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4470.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4470" border="0" alt="IMG_4470" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4470-thumb.jpg" width="244" height="184" /></a></p>
<p>Get on a ladder or chair and using the 5/32” drill bit and power drill, pre-drill the holes as straight as you can.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4471.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4471" border="0" alt="IMG_4471" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4471-thumb.jpg" width="244" height="184" /></a></p>
<p>The mounting bracket came with Philips head screws. The directions show a person manually using a screwdriver with force to screw these in. This might be fine on newer homes with softer studs, but my house has 80 year old fir, and that stuff is hard as rock and doesn’t budge. When I tried to screw these in, it was too tight a fit. I re-drilled each hole to ream it out and widen the hole a bit. I tried again and stripped one screw, and a second one actually broke in half inside the wall, just from using the manual screwdriver.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4475.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4475" border="0" alt="IMG_4475" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4475-thumb.jpg" width="244" height="184" /></a> </p>
<p>Frustrated, I took a trip to McLendon’s Hardware, and purchased 5 stainless steel lag bolts with a hex head. These are much stronger than the <a href="http://www.urbandictionary.com/define.php?term=chincy" target="_blank">chincy</a> zinc ones they gave me, and won’t strip if you use a ratchet. </p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4481.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4481" border="0" alt="IMG_4481" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4481-thumb.jpg" width="244" height="184" /></a> </p>
<p>With the broken screw still in the wall, I had to move the holes down a little and re-drill. The lag bolts were much better and went in so much more easily.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4476.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4476" border="0" alt="IMG_4476" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4476-thumb.jpg" width="244" height="184" /></a>&#160;&#160; <a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4484.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4484" border="0" alt="IMG_4484" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4484-thumb.jpg" width="244" height="184" /></a></p>
<h3>Attaching the Mounting Adapter to the TouchSmart</h3>
<p>The VESA mounting adapter from HP comes with some great instructions on how to add the adapter, remove the legs, etc. I just followed to the letter, and marveled at how well the whole computer was designed and engineered for this. Grab some towels or a blanket, and place your TouchSmart face down on them on a flat surface.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4486.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TouchSmart still with stand" border="0" alt="TouchSmart still with stand" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4486-thumb.jpg" width="204" height="154" /></a>&#160;<a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4487.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TouchSmart opened up" border="0" alt="TouchSmart opened up" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4487-thumb.jpg" width="204" height="154" /></a> <a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4488.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TouchSmart back together with VESA adapter" border="0" alt="TouchSmart back together with VESA adapter" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4488-thumb.jpg" width="204" height="154" /></a></p>
<p>When it comes time to put the mounting bolts on the adapter, you use the shortest and smallest screws it comes with. </p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4467.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="The smallest mounting bolt screw" border="0" alt="The smallest mounting bolt screw" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4467-thumb.jpg" width="244" height="184" /></a></p>
<p>You can mount these in four holes either left-of-center, right-of-center, or four corners. I chose left-of-center to bring the unit closer to the center of the wall space, since my stud was off-center to begin with. </p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4464.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Moving the mounting bolts over" border="0" alt="Moving the mounting bolts over" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4464-thumb.jpg" width="244" height="184" /></a></p>
<p>Finally, get someone to help you hold it, and mount it up.</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4489.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Final Picture" border="0" alt="Final Picture" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/img-4489-thumb.jpg" width="244" height="184" /></a>&#160;</p>
<h3>Wiring</h3>
<p>The power supply brick is absolutely huge, and needs to be considered. If you only have power at an outlet down near the floor, I’d recommend fishing some wire and putting an outlet on the wall behind the unit. </p>
<p>Luckily I have some light switches below the unit, so I can tap into the power from there and run a short cable up for a new outlet. I’ll post another picture of cable management when I’m done with that.</p>
<h3>Reaction from my Wife</h3>
<p>So after all this work, and finally getting this thing up with no major screwups, what was my wife’s reaction?</p>
<p>“I can’t reach it, you put it up too high.”</p>
<p>Oh brother…</p>
<p><a href="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/charliebrownohbrother.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="charlie brown oh brother" border="0" alt="charlie brown oh brother" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/charliebrownohbrother-thumb.jpg" width="104" height="90" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/10/how-to-wall-mount-an-hp-touchsmart-iq800/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>SharePoint May Break Hyperlinks in Workflow Task Emails</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/sharepoint-may-break-hyperlinks-in-workflow-task-emails/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/sharepoint-may-break-hyperlinks-in-workflow-task-emails/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 19:54:00 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[task]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/?p=312</guid>
		<description><![CDATA[I ran into an issue where hyperlinks in workflow task emails where being automatically changed by SharePoint from absolute hyperlinks to relative ones.
Scenario:

You create a custom Visual Studio workflow and use the CreateTask activity.
You set your SPWorkflowTaskProperties.Description property to some HTML text.
In your Description HTML text, you have an html hyperlink &#60;a&#62; tag whose href=”” [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an issue where hyperlinks in workflow task emails where being automatically changed by SharePoint from absolute hyperlinks to relative ones.</p>
<p><strong>Scenario:</strong></p>
<ol>
<li>You create a custom Visual Studio workflow and use the CreateTask activity.</li>
<li>You set your SPWorkflowTaskProperties.Description property to some HTML text.</li>
<li>In your Description HTML text, you have an html hyperlink &lt;a&gt; tag whose href=”” attribute contains an absolute hyperlink to a resource in the same SharePoint farm (i.e. a list item).</li>
<li>Example: “Please review &lt;a href=”http://yourserver/site/lists/yourlist/dispform.aspx?ID=1”&gt;contract #12345&lt;/a&gt;”.</li>
</ol>
<p><strong>Goal:</strong></p>
<p>Users will receive the task email, and be able to click on the absolute URL in the email body to navigate to the SharePoint resource.</p>
<p><strong>Problem:</strong></p>
<p>It appears that SharePoint parses this HTML and readjusts the hyperlink and makes it relative.</p>
<p>Example: “Please review &lt;a href=”/lists/yourlist/dispform.aspx?ID=1”&gt;contract #12345&lt;/a&gt;”</p>
<p>This effectively breaks the hyperlink in the email client.</p>
<p>The only workaround was to get rid of the &lt;a&gt; tag and write out the hyperlink in full. For example:</p>
<p>“Please review contract #12345 (<a rel="nofollow" href="http://yourserver/site/lists/yourlist/dispform.aspx?ID=1">http://yourserver/site/lists/yourlist/dispform.aspx?ID=1</a>)”.</p>
<p>In this manner, SharePoint did not adjust the hyperlink at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/sharepoint-may-break-hyperlinks-in-workflow-task-emails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BDC Error &#8211; Type does not match DotNet type of TypeDescriptor</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/bdc-error-type-does-not-match-dotnet-type-of-typedescriptor/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/bdc-error-type-does-not-match-dotnet-type-of-typedescriptor/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 18:36:40 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[BDC]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/bdc-error-type-does-not-match-dotnet-type-of-typedescriptor/</guid>
		<description><![CDATA[I ran into a BDC error, “Type does not match DotNet type of TypeDescriptor”, with a particular application definition I wrote. In this case, I had a specific finder method that took one input parameter (the identifier) that was of type System.Decimal. It turns out I didn’t specify a default value in the TypeDescriptor for [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into a BDC error, “Type does not match DotNet type of TypeDescriptor”, with a particular application definition I wrote. In this case, I had a specific finder method that took one input parameter (the identifier) that was of type System.Decimal. It turns out I didn’t specify a default value in the TypeDescriptor for this input parameter in my XML definition. It looks like when you don’t set a default value, it will automatically set one for you and assign it a type of System.String. I was able to see this when I exported the BDC definition fresh, and noticed that SharePoint automatically added this default value and type for me.</p>
<p>Rule of thumb, always specify a default value for each input parameter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/bdc-error-type-does-not-match-dotnet-type-of-typedescriptor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My First TouchSmart Application &#8211; Seattle Traffic</title>
		<link>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/my-first-touchsmart-application-seattle-traffic/</link>
		<comments>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/my-first-touchsmart-application-seattle-traffic/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 16:26:47 +0000</pubDate>
		<dc:creator>Adam Toth</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[TouchSmart]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[touch screen computing]]></category>
		<category><![CDATA[traffic]]></category>

		<guid isPermaLink="false">http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/my-first-touchsmart-application-seattle-traffic/</guid>
		<description><![CDATA[After hours of loading software, I built the basics of my first TouchSmart/TouchCenter application. I wanted an easy way to check Seattle area traffic from TouchSmart, so I created a tile to grab the traffic flow image of the bridges from the mobile WSDOT site:
 
It took about twenty minutes to create the project, paste [...]]]></description>
			<content:encoded><![CDATA[<p>After hours of loading software, I built the basics of my first TouchSmart/TouchCenter application. I wanted an easy way to check Seattle area traffic from TouchSmart, so I created a tile to grab the traffic flow image of the bridges from the <a href="www.wsdot.wa.gov/traffic/seattle/small/bridges.htm" target="_blank">mobile WSDOT site</a>:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TouchSmart Seattle Traffic Tile" border="0" alt="TouchSmart Seattle Traffic Tile" src="http://www.lifeonplanetgroove.com/blog/wp-content/uploads/2009/04/touchsmart.jpg" width="644" height="404" /> </p>
<p>It took about twenty minutes to create the project, paste the shell XML from the application primer article, and register the application.</p>
<p>The Image control in WPF is slick because you can use a web url to a graphic file in the Source property. In WinForms I would have had to use the WebClient, get the image, save it somewhere, and load it into a picture box. </p>
<p>Now I need to add in a timer to refresh the image every so often, a button to manually refresh, the ability to see the North/South and full region maps, and add some visual spice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lifeonplanetgroove.com/blog/index.php/2009/04/09/my-first-touchsmart-application-seattle-traffic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
