<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>#region /* mads&amp;#39;s thoughts */ </title><link>http://weblogs.asp.net/mnissen/default.aspx</link><description>backlog on sharepoint, office and .net development</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>GameCamp Oslo - Inspirational Boosting</title><link>http://weblogs.asp.net/mnissen/archive/2008/09/27/gamecamp-oslo.aspx</link><pubDate>Sat, 27 Sep 2008 06:25:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6643925</guid><dc:creator>madsn</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=6643925</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2008/09/27/gamecamp-oslo.aspx#comments</comments><description>Yesterday I left my dayjob early to go with my brother Marius to the Oslo GameCamp at my former school NITH . I really wanted to get a better understanding of game programming and my brother (who is 18) is considering getting more into programming so...(&lt;a href="http://weblogs.asp.net/mnissen/archive/2008/09/27/gamecamp-oslo.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6643925" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/XNA/default.aspx">XNA</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Norway/default.aspx">Norway</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Community+News/default.aspx">Community News</category></item><item><title>How to drive value from Sharepoint and the Microsoft platform</title><link>http://weblogs.asp.net/mnissen/archive/2008/09/26/how-to-drive-value-from-sharepoint-and-the-microsoft-platform.aspx</link><pubDate>Fri, 26 Sep 2008 08:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6642570</guid><dc:creator>madsn</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=6642570</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2008/09/26/how-to-drive-value-from-sharepoint-and-the-microsoft-platform.aspx#comments</comments><description>Focus on asking the right business questions, let 3rd party  product vendors supply the missing parts, and configure and customize the platform  and products and with an aim for business solutions with web 2.0 bliss....(&lt;a href="http://weblogs.asp.net/mnissen/archive/2008/09/26/how-to-drive-value-from-sharepoint-and-the-microsoft-platform.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6642570" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>How to sum up 2 years</title><link>http://weblogs.asp.net/mnissen/archive/2008/09/25/how-to-sum-up-2-years.aspx</link><pubDate>Thu, 25 Sep 2008 09:51:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6641250</guid><dc:creator>madsn</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=6641250</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2008/09/25/how-to-sum-up-2-years.aspx#comments</comments><description>This is one of the "it's been a long time since my last blogpost" type posts and I'm about to confess to my non-blogging sins (and I'll try to make it short), before I move on to talk about my new venture with Puzzlepart . The past 4,5 years I've been...(&lt;a href="http://weblogs.asp.net/mnissen/archive/2008/09/25/how-to-sum-up-2-years.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6641250" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/General+Opinions_2F00_Comments/default.aspx">General Opinions/Comments</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/CRM/default.aspx">CRM</category></item><item><title>Building Web Application Projects with CCNET</title><link>http://weblogs.asp.net/mnissen/archive/2006/06/19/Building-Web-Application-Projects-with-CCNET.aspx</link><pubDate>Mon, 19 Jun 2006 13:53:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:453610</guid><dc:creator>madsn</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=453610</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2006/06/19/Building-Web-Application-Projects-with-CCNET.aspx#comments</comments><description>One of the things about Visual Studio 2005 I disapprove of the most is the way features related to your project are stuffed into the local devmachine environment under Program Files. Among other things the coming GAT (guidance automation toolkits) work...(&lt;a href="http://weblogs.asp.net/mnissen/archive/2006/06/19/Building-Web-Application-Projects-with-CCNET.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=453610" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Continous+Integration/default.aspx">Continous Integration</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>More VSTO Deployment - AppCheck and PIACheck compiled</title><link>http://weblogs.asp.net/mnissen/archive/2006/05/03/444927.aspx</link><pubDate>Wed, 03 May 2006 10:46:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:444927</guid><dc:creator>madsn</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=444927</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2006/05/03/444927.aspx#comments</comments><description>A while ago Microsoft released a &lt;a href="http://msdn.microsoft.com/office/default.aspx?pull=/library/en-us/odc_vsto2005_ta/html/OfficeVSTOWindowsInstallerOverview.asp"&gt;walkthrough&lt;/a&gt; for VSTO deployment to, as Misha puts it; "&lt;a href="http://blogs.msdn.com/mshneer/archive/2006/01/05/deployment_articles.aspx"&gt;not remove the pain but help controlling it&lt;/a&gt;". The walkthrough covers all my (less structured) instructions, and improves on security aspects.&lt;br /&gt;&lt;br /&gt;However the article does provide you with a fair amount of work. The security part adds strong-name based evidence for assemblies which is absolutely required from a security perspective. However, the samples does not support multi-assembly deployments so you'll need to write this up yourself. I'll look into using Assembly.GetReferencedAssemblies() later on to see if that will solve this problem.&lt;br /&gt;&lt;br /&gt;Furthermore you get native checking utils for common prereqs. These are not compiled however and Aerodrome has posted a &lt;a href="http://www.rationalpath.com/"&gt;compiled version&lt;/a&gt;. Although these exe's (PIACheck.exe and AppCheck.exe) works nicely if you've got the .NET Framework preinstalled, they will fail if not. Probably because they're compiled in managed C++, and not the way instructed in the MSDN article. &lt;a href="http://sharepoint.madsnissen.net/BlogContent/appandpiacheck.rar"&gt;We've made a working set available here&lt;/a&gt; (courtesy of compilation genious Øystein Garshol).&lt;br /&gt;&lt;br /&gt;Finally I have to point out once more the weak design of the prerequisite package structure. The prerequisite definitions are fundamentally a part of any solution and should at least be copied into the solution or setup project filestructure when used to enable inclusion in sourcecontrol and automated builds. I would sure like to know how Microsoft approaches this problem using WiX or other tools.&lt;br /&gt;&lt;br /&gt;And to all of you who haven't deleted my blog from your blogroll: I'm back:-)&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=444927" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>MSCRM 3.0 and the VSTO for MSCRM 3.0 Toolkit</title><link>http://weblogs.asp.net/mnissen/archive/2005/12/03/432216.aspx</link><pubDate>Sat, 03 Dec 2005 13:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:432216</guid><dc:creator>madsn</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=432216</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/12/03/432216.aspx#comments</comments><description>Read about the upcoming &lt;a href="http://kjellsj.blogspot.com/2005/11/vsto-for-mscrm-30-toolkit-to-be.html"&gt;VSTO Toolkit for MSCRM 3.0&lt;/a&gt; at &lt;a href="http://kjellsj.blogspot.com/"&gt;Kjell-Sverres blog&lt;/a&gt;. Beeing &lt;a href="http://www.objectware.no"&gt;Objectwares&lt;/a&gt; MSCRM guru KSJ also have started writing about &lt;a href="http://kjellsj.blogspot.com/2005/11/mscrm-30-added-fields-row-size.html"&gt;general&lt;/a&gt; 3.0 &lt;a href="http://kjellsj.blogspot.com/2005/11/mscrm-30-in-multi-ad-forest.html"&gt;topics&lt;/a&gt;. Keep watching if you're in the MSCRM space.&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=432216" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Microsoft+CRM/default.aspx">Microsoft CRM</category></item><item><title>Validating Sharepoint filenames on upload </title><link>http://weblogs.asp.net/mnissen/archive/2005/11/17/430785.aspx</link><pubDate>Thu, 17 Nov 2005 08:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:430785</guid><dc:creator>madsn</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=430785</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/11/17/430785.aspx#comments</comments><description>&lt;p&gt;Some characters are legal for FAT or NTFS files but illegal for files in Sharepoint documentlibraries. Using the regular upload UI for Sharepoint you'll encounter a rather unpleasant validation error when uploading a file with funky characters. Using the object model will give you a good ole' exception.&lt;/p&gt; &lt;p&gt;I've seen a lot of approaches to solving this problem, and implemented a couple myself. Last night I noticed a method on the SPEncode static class that enabled a clean approach to the problem (updated for double punctuation mark problem):&lt;/p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color="#000000"&gt; CleanForUrlAndFileNameUse(&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color="#000000"&gt; dirtyFileName)&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;char&lt;/span&gt;&lt;font color="#000000"&gt;[] dirtyChars = dirtyFileName.ToCharArray();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR: blue"&gt;char&lt;/span&gt;&lt;font color="#000000"&gt; c &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;font color="#000000"&gt; dirtyChars)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (!&lt;/font&gt;&lt;span style="COLOR: teal"&gt;SPEncode&lt;/span&gt;&lt;font color="#000000"&gt;.IsLegalCharInUrl(c))&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dirtyFileName = dirtyFileName.Replace(c.ToString(), &lt;/font&gt;&lt;span style="COLOR: maroon"&gt;""&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;// Spaces are not appreciated&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dirtyFileName = dirtyFileName.Replace(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;" "&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="COLOR: maroon"&gt;""&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;// double punctuation marks causes validation error&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;while&lt;/span&gt;&lt;font color="#000000"&gt;(dirtyFileName.IndexOf(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;".."&lt;/span&gt;&lt;font color="#000000"&gt;) != -1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dirtyFileName = dirtyFileName.Replace(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;".."&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"."&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;font color="#000000"&gt; dirtyFileName; &lt;/font&gt;&lt;span style="COLOR: green"&gt;// now clean:-)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=430785" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>Refresh page after edit in InfoPath</title><link>http://weblogs.asp.net/mnissen/archive/2005/11/01/429121.aspx</link><pubDate>Tue, 01 Nov 2005 08:26:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:429121</guid><dc:creator>madsn</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=429121</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/11/01/429121.aspx#comments</comments><description>&lt;p&gt;When using InfoPath for editing data in you webapplications you run into a couple of tricky situations when beeing used to plain webdevelopment. One of these scenarios is when you want your webpage to refresh after having edited a record in some datasource with InfoPath. Typically you've implemented a view webpage and edit with InfoPath.&lt;/p&gt; &lt;p&gt;This sounds pretty uncomplicated, and I guess it is, but still it took me quite a while to figure out. &lt;/p&gt; &lt;p&gt;My first attempt was to use standard web techniques like opening a browser window pointing to the infopath form modally with showModalDialog and refreshing the hostpage on return. No luck. I was thinking about creating a custom hostpage utilizing iframes to open the document much like a lot of people do to handle pdfs, but I really don't like adhoc host'ish pages in my solution.&lt;/p&gt; &lt;p&gt;I also considered going all the way and &lt;a href="http://geekswithblogs.net/drewby/archive/2004/01/15/1322.aspx"&gt;serve my Infopath documents dynamically&lt;/a&gt;, but that would have been to big of a change to my current solution.&lt;/p&gt; &lt;p&gt;I went back and studied how the Sharepoint SDK suggests to solve this problem. Sharepoint makes use of a clientside component (INLAUNCH.DLL) to open InfoPath documents. The control is called &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/tscliOpenXMLDocuments_SV01036616.asp"&gt;OpenXMLDocuments&lt;/a&gt;. From the documentation I adopted the RefreshOnFocus approach from the Create sample&amp;nbsp;and tried to modify the Edit sample with it to get the refresh. Problem was that InfoPath slightly lost focus during load of the XML document which forced a too early refresh of the hostpage when using the EditDocument2 method directly. &lt;/p&gt; &lt;p&gt;Then I read &lt;A href="http://weblogs.asp.net/wkriebel/archive/2004/09/20/231972.aspx"&gt;Westins blog&lt;/a&gt; and got the idea to se exactly what Sharepoint does on the "Edit in Microsoft Office Infopath" button. Westin also describes &lt;A href="http://weblogs.asp.net/wkriebel/archive/2005/08/09/422044.aspx"&gt;how to launch an InfoPath form from a Sharepoint page&lt;/a&gt; but this only includes create which seems to work slightly different from edit.&lt;/p&gt; &lt;p&gt;Adopting the call from the "Edit in Microsoft Office Infopath" button and combining it with the RefreshOnFocus approach lead me to the following working solution for refreshing a webpage after editing in InfoPath. &lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;script&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: fuchsia; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;language&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;="javascript"&amp;gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt; RefreshOnFocus()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.location.href = window.location;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt; showInfopathAndRefreshWhenFinished(url)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;window.onfocus = RefreshOnFocus;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;editDocumentWithProgID2(url,'InfoPath.Document','SharePoint.OpenXMLDocuments');&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;script&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Be aware that the clientside control must be present for this to work, but I assume it is installed with InfoPath (anyone care to assert this assumption regarding INLAUNCH.DLL?). The editDocumentWithProgID2 method is defined in the standard Sharepoint script includes.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=429121" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>Complete set of Custom Prerequisites available</title><link>http://weblogs.asp.net/mnissen/archive/2005/10/26/428564.aspx</link><pubDate>Wed, 26 Oct 2005 17:18:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:428564</guid><dc:creator>madsn</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=428564</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/10/26/428564.aspx#comments</comments><description>&lt;p&gt;Seems like VSTO Outlook deployment just got easier. I now have Custom Prerequisites for Office 2003 (SP2), Outlook 2003 (SP2),&amp;nbsp;Office 2003&amp;nbsp;PIA and the Visual Studio Tools for Office 2005 Runtime ready.&lt;/p&gt; &lt;p&gt;&lt;img src="http://sharepoint.madsnissen.net/BlogContent/AllCustomPrerequisites.png" border="1" /&gt;&lt;/p&gt; &lt;p&gt;I got some feedback from the community on my &lt;A href="http://weblogs.asp.net/mnissen/archive/2005/10/14/427508.aspx"&gt;previous post&lt;/a&gt; and I've updated my article with my findings and also a download for the prerequisite definitions for Visual Studio 2005.&lt;/p&gt; &lt;p&gt;&lt;a id="viewpost" href="/mnissen/articles/427504.aspx"&gt;&lt;font color="#770000"&gt;VSTO Outlook: the Complete Setup Solution&lt;/font&gt;&lt;/a&gt;&lt;A href="http://weblogs.asp.net/mnissen/articles/427504.aspx"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Please provide feedback on this if you find bugs or points of improvement.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=428564" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>VSTO Outlook: The complete deplyment solution</title><link>http://weblogs.asp.net/mnissen/archive/2005/10/14/427508.aspx</link><pubDate>Fri, 14 Oct 2005 16:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:427508</guid><dc:creator>madsn</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=427508</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/10/14/427508.aspx#comments</comments><description>&lt;p&gt;This week has been all about the pain of client deployment of our VSTO solution. I've &lt;A href="http://weblogs.asp.net/mnissen/articles/427504.aspx"&gt;written a summary&lt;/a&gt; which I hope will be the start of the complete solution for idiot-proof installs of Outlook plugins. I'm not quite there yet but I feel I'm pretty close. &lt;/p&gt; &lt;p&gt;&lt;A href="http://weblogs.asp.net/mnissen/articles/427504.aspx"&gt;Read it here!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Input and feedback is very welcome!&lt;/p&gt; &lt;p&gt;Also check out &lt;a href="http://blog.jausovec.net/index.php?op=ViewArticle&amp;amp;articleId=190&amp;amp;blogId=1"&gt;Peters blog&lt;/a&gt; for VSTO content and the &lt;a href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=16"&gt;MSDN VSTO Forums&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=427508" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>Recycle Bin / Undelete for Document Libraries finally solved</title><link>http://weblogs.asp.net/mnissen/archive/2005/10/07/426861.aspx</link><pubDate>Fri, 07 Oct 2005 08:03:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:426861</guid><dc:creator>madsn</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=426861</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/10/07/426861.aspx#comments</comments><description>&lt;p&gt;Last week I met Todd from Mindsharp in Seattle and he told me that he'd just created a purely client side solution to the whole undelete / recycle bin problem with Sharepoint document libraries. Several solutions have been posted to address this issue in the past, amongst others &lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/02/RecycleBinforWSS/default.aspx"&gt;Max and Erics article&lt;/a&gt; in MSDN Mag.&lt;/p&gt; &lt;p&gt;The beauty of Todds solution is it simplicity. Todd has solved everything from the clientside and wrapped it all up in a list template (.stp) file.&lt;/p&gt; &lt;p&gt;In addition to supply undelete features (and even right-shift key integration!!) he also adds the bonus of multitemplate document creation.&lt;/p&gt; &lt;p&gt;Giant kudos to Todd for this excellent piece of Sharepoint/javascript voodoomagic. In my opinion this is the final solution for undelete until WSS v3 arrives.&lt;/p&gt; &lt;p&gt;&lt;a href="http://mindsharpblogs.com/todd/archive/2005/10/06/719.aspx"&gt;Get it here!&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=426861" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>InfoPath DropDown List doesn't match on items in list</title><link>http://weblogs.asp.net/mnissen/archive/2005/10/06/426742.aspx</link><pubDate>Thu, 06 Oct 2005 12:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:426742</guid><dc:creator>madsn</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=426742</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/10/06/426742.aspx#comments</comments><description>&lt;p&gt;When populating InfoPath DropDown lists with values and then binding the dropdown to a field in your main datasource you'll sometimes see the bound value instead of its corresponding text value in the dropdown on load. It seems slightly confusing given that the entry containing your bound value is actually in the list, but it doesn't match.&lt;/p&gt; &lt;p&gt;Most likely this is a string casing problem. I've got a dropdown bound to a Sharepoint (WSS) UserGroup service and bind the value to @LoginName. These values are typically DOMAIN\login.name. My main datasource however, lowercases all reference variables to avoid any confusion. Since I don't control the formatting done by the Sharepoint service my best bet is to lowercase the values of the @LoginName attributes in my secondary datasource.&lt;/p&gt; &lt;p&gt;First off I got excited by &lt;a href="http://blogs.msdn.com/infopath/archive/2005/06/17/430347.aspx"&gt;this post on the InfoPath Blog&lt;/a&gt; which feels a bit like calling C# or javascript code from regular XSLT transformations. The blog describes calling code to evaluate conditions, not setting DOM values, and furthermore there are no events you can respond to in order to call the code that will manipulate your secondary datasource values and setting them toLower.&lt;/p&gt; &lt;p&gt;Since I query my UserGroup service on form load, and this occurs before the Load event in script I was able to perform toLower (or more precicely toLowerCase()) in the load event like this:&lt;/p&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;font face="Courier New"&gt;var objXMLNodes = XDocument.GetDOM("UserService").selectNodes(&lt;/font&gt;&lt;a&gt;&lt;font face="Courier New"&gt;//@LoginName&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color="#0000ff" size="2"&gt;for&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;(i = 0; i &amp;lt; objXMLNodes.length; i++)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objXMLNodes(i).text = objXMLNodes(i).text.toLowerCase();&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=426742" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>WebBrowser control and InvokeScript</title><link>http://weblogs.asp.net/mnissen/archive/2005/09/23/425837.aspx</link><pubDate>Fri, 23 Sep 2005 08:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:425837</guid><dc:creator>madsn</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=425837</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/09/23/425837.aspx#comments</comments><description>&lt;p&gt;This is a little code nugget I planned to blog about a while ago, but forgot, so my recap and reasoning is not a 100% but hopefully it might be of help to someone struggelig with making the System.Windows.Forms.WebBrowser control execute scripts programatically.&lt;/p&gt; &lt;p&gt;I started out using the WebBrowser.InvokeScript method to force execution of clientside scripts in the page that was loaded in my WebBrowser control:&lt;/p&gt;&lt;font color="#008080" size="2"&gt; &lt;p&gt;&lt;font face="Courier New"&gt;HtmlWindow&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt; win = doc.Window;&lt;br /&gt;doc.InvokeScript(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;"Update_UI_From_Values();"&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font face="Times New Roman" size="3"&gt;This is where my reasoning is not complete (because i didn't bother to actually reproduce the original problem..), but basically it didn't work as expected. After some Reflector action I figured out that the &lt;font face="Courier New" size="2"&gt;mshtml.IHTMLWindow2.execScript&lt;/font&gt; method wasn't actually directly mapped into the new WebBrowser APIs and I figured I'd give it a go and add a reference to Microsoft.mshtml.dll (COM component Microsoft HTML Object Library):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;p&gt;mshtml.&lt;/font&gt;&lt;font color="#008080" size="2"&gt;IHTMLWindow2&lt;/font&gt;&lt;font size="2"&gt; win = (mshtml.&lt;/font&gt;&lt;font color="#008080" size="2"&gt;IHTMLWindow2&lt;/font&gt;&lt;font size="2"&gt;)propertyEditorWebBrowser.Document.Window.DomWindow;&lt;br /&gt;win.execScript(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;"Update_UI_From_Values();"&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#800000" size="2"&gt;"javascript"&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;This had the desired effect and the script executed. Too bad the managed option didn't do the job.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=425837" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category></item><item><title>Error using VSTO 2005 Outlook Addin with VS2005 RC1</title><link>http://weblogs.asp.net/mnissen/archive/2005/09/22/425785.aspx</link><pubDate>Thu, 22 Sep 2005 12:29:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:425785</guid><dc:creator>madsn</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=425785</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/09/22/425785.aspx#comments</comments><description>&lt;p&gt;Just installed Visual Studio 2005 RC1 and reinstalled Visual Studio Tools for Office 2005 Outlook on top to continue working on my Outlook Add-in. When trying to cast a MailItem object i recieved the following error:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.MailItem'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063034-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))..&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Seems like something didn't register properly and after performing the following operation from the Visual Studio 2005 Command Prompt (in a folder containing the dll) I was back up and running:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;regasm Microsoft.Office.Interop.Outlook.dll&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=425785" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category></item><item><title>Temporary Release of Outlook Plugin code</title><link>http://weblogs.asp.net/mnissen/archive/2005/08/23/423414.aspx</link><pubDate>Tue, 23 Aug 2005 11:00:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:423414</guid><dc:creator>madsn</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/mnissen/rsscomments.aspx?PostID=423414</wfw:commentRss><comments>http://weblogs.asp.net/mnissen/archive/2005/08/23/423414.aspx#comments</comments><description>&lt;p&gt;This summer I got the opportunity to demo a VSTO Outlook plugin at TechEd in Amsterdam. The demo was done on a prototype made as a proof-of-concept for a customer in the preceeding weeks (not actually the night before the demo:-). The prototype was accepted and development for production was planned to the first weeks of august.&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://sharepoint.madsnissen.net/BlogContent/Picture036.jpg" border="1" /&gt;&lt;/p&gt; &lt;p&gt;Unfortunately this has been postponed, so to accomodate those of you out there who wants to check out the code I'm now releasing the prototype codebase.&lt;/p&gt; &lt;p&gt;I would like to stress that this was developed as a proof-of-concept. Documentation is less than poor, code quality is quite frankly very close to embarrassing, but it runs. Use it to get an idea of how it might be done.&lt;/p&gt; &lt;p&gt;The future plan for the plugin has evolved. We're currently looking into creating a very robust "Sharepoint Favorites System" to be able to keep track of favorite sharepoint sites and import such links from both sharepoint lists (online) and possibly internet explorer favorites. We're looking at keeping an offline cache of favorites and also enable offline moving of mail to Sharepoint Favorites including metadatahandling. &lt;/p&gt; &lt;p&gt;As you may well understand, a rewrite is on the way. Hopefully I will be able to publish this solution on GotDotNet or SourceForge, but no timeframe is available at the moment.&lt;/p&gt; &lt;p&gt;The prototype includes code snippets from the &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=a4cc28b4-e626-4d0c-beb0-4c94d5bef88b"&gt;SharePad project courtesy of ILG and Microsoft&lt;/a&gt;, specifically for document property handling. &lt;/p&gt; &lt;p&gt;The VS.NET 2005 solution and source code is available &lt;a href="http://sharepoint.madsnissen.net/BlogContent/Objectware.Sharepoint.FileSaver.rar"&gt;here&lt;/a&gt;. Please use for reference and if you have ideas or suggestions please contact me. The more people interested the sooner I'll establish the project publicly.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=423414" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/mnissen/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/Office+System/default.aspx">Office System</category><category domain="http://weblogs.asp.net/mnissen/archive/tags/TechEd2005/default.aspx">TechEd2005</category></item></channel></rss>