<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Aidan Garnish </title>
    <description> SharePoint - Collaboration Not Competition</description>
    <link>http://www.aidangarnish.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.6.1.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.aidangarnish.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Aidan Garnish</dc:creator>
    <dc:title>Aidan Garnish </dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AidanGarnish" /><feedburner:info uri="aidangarnish" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>PayPal example project C# ASP.Net</title>
      <description>&lt;p&gt;A few weeks ago I spent some time integrating PayPal Express Checkout into &lt;a href="http://bookhashtags.com"&gt;http://bookhashtags.com&lt;/a&gt; so that I could take payments for the &lt;a href="http://www.bookhashtags.com/getyourbookfeatured"&gt;featured book spot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whilst PayPal produces a lot of documentation and provides some tools to help generate code these were not always that helpful. For example the code wizard produces code that doesn't build and uses a very old version of the API which means that a lot of the things you can now do according to the documentation just didn't work and it wasn't immediately obvious why.&lt;/p&gt;
&lt;p&gt;I have put together a &lt;a href="http://www.aidangarnish.net/file.axd?file=paypalexample.zip"&gt;bare bones Visual Studio 2010 project&lt;/a&gt; that will give you a quick understanding of the basics of the three Express Checkout calls (SetExpressCheckout, GetExpressCheckoutDetails and DoExpressCheckout) you need to make to get things working.&lt;/p&gt;
&lt;p&gt;To get the project to run you will need to set up a PayPal sandbox account here - &lt;a href="https://developer.paypal.com"&gt;https://developer.paypal.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You will need to add your sandbox account username, password and signature in the NVPAPICaller class.&lt;/p&gt;
&lt;p&gt;Once that is done just press play, change the default values on the default.aspx page and hit the Pay button.&lt;/p&gt;
&lt;p&gt;The example only adds one item and doesn't handle shipping costs. For more information on parameter names etc. see the &lt;a href="https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_ExpressCheckout_IntegrationGuide.pdf"&gt;PayPal Express Checkout Integration pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.aidangarnish.net/file.axd?file=paypalexample.zip"&gt;Download the project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/mN9xqQSIuPI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/mN9xqQSIuPI/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/PayPal-example-project-C-ASPNet.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=711de242-b3b8-44cf-89a1-9d45d5f98985</guid>
      <pubDate>Thu, 01 Dec 2011 13:31:00 +0000</pubDate>
      <category>ASP.Net</category>
      <category>PayPal</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=711de242-b3b8-44cf-89a1-9d45d5f98985</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=711de242-b3b8-44cf-89a1-9d45d5f98985</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/PayPal-example-project-C-ASPNet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=711de242-b3b8-44cf-89a1-9d45d5f98985</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=711de242-b3b8-44cf-89a1-9d45d5f98985</feedburner:origLink></item>
    <item>
      <title>Simple Linq to XML example</title>
      <description>&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;string xml = "&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&amp;lt;people&amp;gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "&amp;lt;person&amp;gt;&amp;lt;id&amp;gt;1&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;Aidan Garnish&amp;lt;/name&amp;gt;&amp;lt;company&amp;gt;65hours&amp;lt;/company&amp;gt;&amp;lt;email&amp;gt;aidan@65hours.com&amp;lt;/email&amp;gt;&amp;lt;/person&amp;gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "&amp;lt;person&amp;gt;&amp;lt;id&amp;gt;2&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;Joe Bloggs&amp;lt;/name&amp;gt;&amp;lt;company&amp;gt;65hours&amp;lt;/company&amp;gt;&amp;lt;email&amp;gt;Fred@65hours.com&amp;lt;/email&amp;gt;&amp;lt;/person&amp;gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "&amp;lt;person&amp;gt;&amp;lt;id&amp;gt;3&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;Fred Smith&amp;lt;/name&amp;gt;&amp;lt;company&amp;gt;Microsoft&amp;lt;/company&amp;gt;&amp;lt;email&amp;gt;Joe@Microsoft.com&amp;lt;/email&amp;gt;&amp;lt;/person&amp;gt;&amp;lt;/people&amp;gt;";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XDocument doc = XDocument.Parse(xml);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filter by company and return a collection of names as strings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var query = from person in doc.Descendants("person")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where (string)person.Element("company") == "65hours"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select (string)person.Element("name");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (string name in query)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //return a collection of objects&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var query2 = from person in doc.Descendants("person")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where (string)person.Element("company") == "65hours"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id = person.Element("id").Value,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = person.Element("name").Value,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; email =person.Element("email").Value,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; company = person.Element("name").Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var obj in query2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(obj.id + " - " + obj.name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/rNhIR3JMVpU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/rNhIR3JMVpU/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Simple-Linq-to-XML-example.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=9f1a87df-ca4d-410b-8ba3-f04e20a384bd</guid>
      <pubDate>Wed, 30 Nov 2011 14:26:00 +0000</pubDate>
      <category>Linq</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=9f1a87df-ca4d-410b-8ba3-f04e20a384bd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=9f1a87df-ca4d-410b-8ba3-f04e20a384bd</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Simple-Linq-to-XML-example.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=9f1a87df-ca4d-410b-8ba3-f04e20a384bd</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=9f1a87df-ca4d-410b-8ba3-f04e20a384bd</feedburner:origLink></item>
    <item>
      <title>Some simple Linq to Objects examples</title>
      <description>&lt;p&gt;Linq to Objects is a really handy way to filter and order lists of objects. The following code is a simple example that shows how to filter and how to order a list by an object property.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;//a little bit of object and list set up&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContractPerson person1 = new ContractPerson() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; Name = "Aidan Garnish", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccountID = "1", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Company = "65hours", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Email = "aidan@65hours.com", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Role = "SharePoint Consultant" };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContractPerson person2 = new ContractPerson()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = "Fred Smith",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccountID = "2",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Company = "65hours",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Email = "fred@65hours.com",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Role = "Dynamics Consultant"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContractPerson person3 = new ContractPerson()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = "Joe Blogs",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccountID = "3",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Company = "Microsoft",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Email = "joe@ms.com",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Role = "Microsoft Consultant"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;ContractPerson&amp;gt; people = new List&amp;lt;ContractPerson&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; people.Add(person1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; people.Add(person2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; people.Add(person3);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filter list by ContractPerson.Company&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var filteredPeople = from person in people&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where person.Company == "65hours"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select person;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ContractPerson filterPerson in filteredPeople)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(filterPerson.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filter list by people who have a name beginning with A&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var peopleWithNameStartingA = from person in people&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where person.Name.StartsWith("A")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select person;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ContractPerson filterPerson in peopleWithNameStartingA)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(filterPerson.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //order the list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var orderedList = from person in people&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderby person.Name ascending&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select person;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ContractPerson orderedPerson in orderedList)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(orderedPerson.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/4GmKRhUtHic" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/4GmKRhUtHic/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Some-simple-Linq-to-Objects-examples.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=f709d180-3a12-4f84-8e92-b13dd15c4724</guid>
      <pubDate>Wed, 30 Nov 2011 13:57:00 +0000</pubDate>
      <category>Linq</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=f709d180-3a12-4f84-8e92-b13dd15c4724</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=f709d180-3a12-4f84-8e92-b13dd15c4724</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Some-simple-Linq-to-Objects-examples.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=f709d180-3a12-4f84-8e92-b13dd15c4724</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=f709d180-3a12-4f84-8e92-b13dd15c4724</feedburner:origLink></item>
    <item>
      <title>Book#Hashtags and PayPal integration</title>
      <description>&lt;p&gt;Quite a few people have been asking how they can support &lt;a href="http://bookhashtags.com"&gt;http://bookhashtags.com&lt;/a&gt; or have their book featured on the home page.&lt;/p&gt;
&lt;p&gt;As a result I have combined these two things together and it is now possible for authors or publishers to feature their books on the home page by visiting &lt;a href="http://www.bookhashtags.com/getyourbookfeatured"&gt;http://www.bookhashtags.com/getyourbookfeatured&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This was achieved using PayPal's Express Checkout API to take payment - I am thinking of writing a blog post on using PayPal Express Checkout with C# ASP.Net so if that would be useful to you please let me know in the comments. Although PayPal has a lot of documentation finding the relevant parts and putting them all together did take quite a bit of time and effort so maybe a blog post on this could save other people some pain?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/eDGwVV_2oWc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/eDGwVV_2oWc/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/BookHashtags-and-PayPal-integration.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=709b08c4-9ec9-4b9d-afe0-31280fff08fc</guid>
      <pubDate>Sat, 05 Nov 2011 12:01:00 +0000</pubDate>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=709b08c4-9ec9-4b9d-afe0-31280fff08fc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=709b08c4-9ec9-4b9d-afe0-31280fff08fc</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/BookHashtags-and-PayPal-integration.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=709b08c4-9ec9-4b9d-afe0-31280fff08fc</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=709b08c4-9ec9-4b9d-afe0-31280fff08fc</feedburner:origLink></item>
    <item>
      <title>Displaying a Visio 2010 drawing with links in a Page Viewer Web Part</title>
      <description>&lt;p&gt;If you have tried saving a Visio 2010 drawing as a web page and then displaying it in a Page Viewer web part in SharePoint then you will know that by default hyperlinks in the drawing will no longer work.&lt;/p&gt;
&lt;p&gt;This is because the default output format for Visio 2010 drawings being saved as a web page is XAML. When you save the drawing as a web page a collection of files are generated one of which is called xaml_1.js. Opening the Visio drawing .htm file directly in the browser works as expected and hyperlinks are active. However, if you try to display the Visio drawing inside a Page Viewer web part you will see a JavaScript error that references the xaml_1.js file seemingly because there is conflict with DOM elements that exist in the standard SharePoint page.&lt;/p&gt;
&lt;p&gt;I suspect that this didn't receive much attention during testing by Microsoft as the assumption could be that if you are using Visio 2010 you will also be using SharePoint 2010 and Visio Services to display your Visio drawings in the browser.&lt;/p&gt;
&lt;p&gt;There is a way to work around this by changing the output format of Visio to VML (Vector Markup Language) instead of XAML. Unless you choose VML the first time you save as a web page then Visio remebers the XAML default and there is no setting in Visio (that I can find!) that allows you to change this default. The only option left is to crack open the registry and go searching for the relevant setting.&lt;/p&gt;
&lt;p&gt;Open regedit and go to - HKEY_CURRENT_USER -&amp;gt; Software -&amp;gt; Microsoft -&amp;gt; Office -&amp;gt; 14.0 -&amp;gt; Visio -&amp;gt; Solution -&amp;gt; SaveAsWeb -&amp;gt; Settings then change "priformat" from XAML to VML&lt;/p&gt;
&lt;p&gt;Save your Visio drawing as a web page again and this time it will be produced using the VML format which does not include the xaml_1.js file that causes the error and prevents links from working.&lt;/p&gt;
&lt;p&gt;When you add the link to a Page Viewer you should now have working links.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/F0lJVWg52hM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/F0lJVWg52hM/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Displaying-a-Visio-2010-drawing-with-links-in-a-Page-Viewer-Web-Part.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=a97c85e6-7b6f-48dd-8121-c965d8e06e3e</guid>
      <pubDate>Tue, 04 Oct 2011 13:51:00 +0000</pubDate>
      <category>MOSS 2007</category>
      <category>SharePoint 2010</category>
      <category>SharePoint Designer</category>
      <category>Visio 2010</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=a97c85e6-7b6f-48dd-8121-c965d8e06e3e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=a97c85e6-7b6f-48dd-8121-c965d8e06e3e</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Displaying-a-Visio-2010-drawing-with-links-in-a-Page-Viewer-Web-Part.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=a97c85e6-7b6f-48dd-8121-c965d8e06e3e</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=a97c85e6-7b6f-48dd-8121-c965d8e06e3e</feedburner:origLink></item>
    <item>
      <title>Most Common SharePoint Application Development Mistake</title>
      <description>&lt;p&gt;SharePoint is a huge product with plenty of opportunities to make mistakes in lots of different ways. The infrastructure could be configured badly, the business may not have clearly defined what they hope to achieve with SharePoint or the information architecture is allowed to sprawl out of control.&lt;/p&gt;
&lt;p&gt;Having worked with SharePoint for over 7 years there is one mistake that I see being repeated over and over again when SharePoint is introduced into an organisation.&lt;/p&gt;
&lt;p&gt;Imagine the scene, SharePoint has just been installed and in this case the business do have a clear idea of what they expect from SharePoint. The first priority is to move several small legacy systems including some spreadsheets and a couple of Access database applications onto SharePoint.&lt;/p&gt;
&lt;p&gt;The justification for this is that moving these apps to the SharePoint platform will make them easier to find and share, they will immediately fall under the SharePoint backup and disaster recovery regimes and using SharePoint as the interface will provide a more consistent user experience across all of these apps. In addition to that the business has heard all about how rapidly small applications can be developed and deployed using SharePoint and are excited to see this process in action.&lt;/p&gt;
&lt;p&gt;Back in the IT department the .Net developers have just come back from a weeks intensive training and naturally they want to make a good impression by demonstrating their newly acquired SharePoint knowledge and showing the business what a great platform SharePoint is.&lt;/p&gt;
&lt;p&gt;The requirements to migrate several spreadsheet based apps start to roll in and the team begin by putting together a few quick prototypes. The decision is made to move the spreadsheet contents across into SharePoint lists to take advantage of functionality like views and to be able to apply approval workflows to items.&lt;/p&gt;
&lt;p&gt;The users of the apps take a look at the protoypes and start to provide feedback. Requests include things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can a&amp;nbsp;row be highlighted in red if some field drops below a specific number?&lt;/li&gt;
&lt;li&gt;Could a link be added to the view item form that takes us straight to a specific view?&lt;/li&gt;
&lt;li&gt;We don't always really like seeing the Alert Me functionality, can this be hidden for some of the lists but left on for others?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The developers know that technically they can do all of these things and they want to say yes to the business. This is a mistake.&lt;/p&gt;
&lt;p&gt;It is a mistake for a couple of reasons. The business has been promised rapid application development by whoever sold them SharePoint. They may even have been told that this assumes you use as much out of the box functionality as possible and avoid code customisation if you can. Understandably, what they don't realise is that the things they are asking for are customisations that will require code to be written, tested, deployed and maintained.&lt;/p&gt;
&lt;p&gt;It is up to the developers or IT managers to explain this to the business users and make it very clear whether what is being asked for is out of the box or whether it is a code based customisation.&lt;/p&gt;
&lt;p&gt;Another reason it is a mistake is that the requests to turn off alerts or add links in unusual places are significant changes to the standard interface. One of the benefits of using SharePoint is that it provides a consistent platform and each change to that platform chips away at this consistency. The benefit of a consistent interface is that once a user has mastered one application or area of SharePoint they should be able to open any other SharePoint site and feel immediately at home. The changes mentioned may sound small but over time can build up to mean that some areas of SharePoint become almost unrecognisable. This will lead to an increase in support calls and training costs as users will be confused by these inconsistencies and ultimately this can hurt user adoption of the platform as a whole.&lt;/p&gt;
&lt;p&gt;I'm not saying that you shouldn't use code based customisations or alter the user interface in any way but these customisations do come with an overhead that needs to be understood by the business. The danger is that if this is not clearly explained the original expectations of rapid application development and the benefits of a consistent platform are not met and the business starts to question whether these claims were ever true or even worse, whether any claim made about SharePoint is true!&lt;/p&gt;
&lt;p&gt;An informed choice needs to be made by the business on a per application basis as to whether they are prepared to invest the extra time and effort to get an application that meets 100% of requirements. Or, decide that it is better to have something delivered far more rapidly that meets ~80% of the requirements and loses some of the nice to have elements. In addition, there also needs to be someone in the business taking an overall view of what customisations are acceptable across the platform to preserve interface consistency for the benefit of all applications.&lt;/p&gt;
&lt;p&gt;This is clearly not an all or nothing choice and there is a sliding scale of just how much customisation the business is prepared to take on. Once people come to terms with and fully understand these choices and trade offs they usually feel much happier about SharePoint and the best way to deliver applications for their business. Ultimately SharePoint is about giving the business the tools to do a job in the most effective and efficient way possible and sometimes this means having to say no to some requirements.&lt;/p&gt;
&lt;p&gt;What do you think? Is this something you have seen happening at companies you work with? Are there other mistakes that you see happening more frequently?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/vRfHvffOmps" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/vRfHvffOmps/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Most-Common-SharePoint-Application-Development-Mistake.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=ca47ae53-113b-4d71-8626-7651527d1591</guid>
      <pubDate>Thu, 28 Jul 2011 18:59:00 +0000</pubDate>
      <category>MOSS 2007</category>
      <category>SharePoint 2010</category>
      <category>SharePoint Designer</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=ca47ae53-113b-4d71-8626-7651527d1591</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=ca47ae53-113b-4d71-8626-7651527d1591</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Most-Common-SharePoint-Application-Development-Mistake.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=ca47ae53-113b-4d71-8626-7651527d1591</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=ca47ae53-113b-4d71-8626-7651527d1591</feedburner:origLink></item>
    <item>
      <title>Book Hashtags, Seth Godin and a New Website</title>
      <description>&lt;p&gt;This is a bit off topic for this blog so if you came looking for SharePoint tips look away now!&lt;/p&gt;
&lt;p&gt;Last week &lt;a href="http://sethgodin.typepad.com/"&gt;Seth Godin&lt;/a&gt; blogged about &lt;a href="http://www.thedominoproject.com/2011/05/hashtags-for-books.html"&gt;using hashtags on Twitter&lt;/a&gt; to keep track of the conversations going on around books.&lt;/p&gt;
&lt;p&gt;I think that this is a great idea as it allows readers to easily find and engage with people reading the same books and it also provides a way for the author to get involved and to show up at the conversations that their books are provoking.&lt;/p&gt;
&lt;p&gt;There seemed to be a couple of issues with this approach though:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How do you find the "official" hashtag for each book? (Assuming that the author/publisher hasn't thought to mention it somewhere in the book)&lt;/li&gt;
&lt;li&gt;Twitter search only returns Tweets from the last few days so the tail end of the conversation is soon lost&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For those reasons I have created &lt;a href="http://bookhashtags.com"&gt;bookhashtags.com&lt;/a&gt;. The site acts as a place where readers can come and find the "official" hashtag for their book and also as a place that displays the entire conversation going on around each book hashtag that has been indexed.&lt;/p&gt;
&lt;p&gt;What do you think? Is this side conversation a useful addition to your enjoyment of a book? Which books/hashtags would you like to be added? If you have a book/hashtag to add you can &lt;a href="http://bookhashtags.com/addbook"&gt;add it here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/912ZBebExiA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/912ZBebExiA/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Book-Hashtags-Seth-Godin-and-a-New-Website.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=78b6bc32-8814-4fb4-8781-2eb2635415c9</guid>
      <pubDate>Sun, 29 May 2011 08:35:00 +0000</pubDate>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=78b6bc32-8814-4fb4-8781-2eb2635415c9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=78b6bc32-8814-4fb4-8781-2eb2635415c9</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Book-Hashtags-Seth-Godin-and-a-New-Website.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=78b6bc32-8814-4fb4-8781-2eb2635415c9</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=78b6bc32-8814-4fb4-8781-2eb2635415c9</feedburner:origLink></item>
    <item>
      <title>Using JQuery to round averages in a SharePoint view</title>
      <description>&lt;p&gt;I had a question from a user asking whether it was possible to round the Average that is displayed on SharePoint views to 2.d.p.&lt;/p&gt;
&lt;p&gt;Out of the box this is not possible but with a little bit of JQuery we can find the average and round it to the required d.p.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;script src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; $('b').each(function(index){&lt;br /&gt;&amp;nbsp;&amp;nbsp; var value = $(this).html();&lt;br /&gt;&amp;nbsp;&amp;nbsp; var num = value.replace('Average = ','');&lt;br /&gt;&amp;nbsp;&amp;nbsp; var result = Math.round(num*Math.pow(10,2))/Math.pow(10,2);&lt;br /&gt;&amp;nbsp;&amp;nbsp; $(this).replaceWith('&amp;lt;b&amp;gt;Average = '+result+'&amp;lt;/b&amp;gt;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/zh8HXcanK0E" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/zh8HXcanK0E/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Using-JQuery-to-round-averages-in-an-SharePoint-view.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=c692ecd9-1497-4cba-a1af-1312062ac2aa</guid>
      <pubDate>Thu, 14 Apr 2011 19:09:00 +0000</pubDate>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=c692ecd9-1497-4cba-a1af-1312062ac2aa</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=c692ecd9-1497-4cba-a1af-1312062ac2aa</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Using-JQuery-to-round-averages-in-an-SharePoint-view.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=c692ecd9-1497-4cba-a1af-1312062ac2aa</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=c692ecd9-1497-4cba-a1af-1312062ac2aa</feedburner:origLink></item>
    <item>
      <title>Dynamically change InfoPath submit connection properties</title>
      <description>&lt;p&gt;If you want to change the properties of the data connection that your InfoPath form is&amp;nbsp;using on submit you can do this in code. You might want to do this if you have lots of sites that use the same structure and each site contains a library that holds a certain type of form. Eg. A project site contains a library for project changes that are submitted using an InfoPath form. Each project site has a project changes library but you don't want to have to create a new project change form with a different submit connection for every site.&lt;/p&gt;
&lt;p&gt;In the submit event use the following for SharePoint 2007&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="font-size: small;"&gt;SPWeb web = SPContext.Current.Web; &lt;br /&gt;FileSubmitConnection dc = (FileSubmitConnection)DataConnections["Submit"];&lt;br /&gt;dc.FolderUrl = web.Url + "/[library name]";&lt;br /&gt;dc.Execute();&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;e.CancelableArgs.Cancel = false;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In SharePoint 2010 there is also the option of using the ServerInfo class that has a property called SharePointListUrl to provide the current&amp;nbsp;list context which can be used as follows&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="font-size: small;"&gt;FileSubmitConnection dc = (FileSubmitConnection)DataConnections["Submit"];&lt;br /&gt;dc.FolderUrl = ServerInfo.SharePointListUrl;&lt;br /&gt;dc.Execute();&lt;br /&gt;e.CancelableArgs.Cancel = false;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/8uMLdrhCxWQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/8uMLdrhCxWQ/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/Dynamically-change-InfoPath-library-for-submit-connections.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=cb268056-5f08-4cb9-abe5-258dbcb2a3f2</guid>
      <pubDate>Tue, 12 Apr 2011 18:49:00 +0000</pubDate>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=cb268056-5f08-4cb9-abe5-258dbcb2a3f2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=cb268056-5f08-4cb9-abe5-258dbcb2a3f2</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/Dynamically-change-InfoPath-library-for-submit-connections.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=cb268056-5f08-4cb9-abe5-258dbcb2a3f2</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=cb268056-5f08-4cb9-abe5-258dbcb2a3f2</feedburner:origLink></item>
    <item>
      <title>SharePoint 2010 SPTimer job won't activate</title>
      <description>&lt;p&gt;...and the error you see in ULS viewer is "The SPPersistedObject, XXXXXXXXXXX, could not be updated because the current user is not a Farm Administrator"&lt;/p&gt;
&lt;p&gt;Solution can be found here - &lt;a href="http://unclepaul84.blogspot.com/2010/06/sppersistedobject-xxxxxxxxxxx-could-not.html"&gt;http://unclepaul84.blogspot.com/2010/06/sppersistedobject-xxxxxxxxxxx-could-not.html&lt;/a&gt;&amp;nbsp;- cheers Paul!&lt;/p&gt;
&lt;p&gt;Script to turn off remote administration security is:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;# AUTHOR: Paul Kotlyar&lt;br /&gt;# CONTACT: &lt;/span&gt;&lt;a href="mailto:unclepaul84@gmail.com"&gt;&lt;span style="font-family: courier new,courier;"&gt;unclepaul84@gmail.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;# DESCRIPTION: sets an option on content web service that allows updating of SP Administration objects such as SPJobDefinition from content web applications&lt;br /&gt;function Set-RemoteAdministratorAccessDenied-False()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;# load sharepoint api libs&lt;br /&gt;&amp;nbsp;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") &amp;gt; $null&lt;br /&gt;&amp;nbsp;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") &amp;gt; $null&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp; # get content web service&lt;br /&gt;&amp;nbsp;$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService&lt;br /&gt;&amp;nbsp; # turn off remote administration security&lt;br /&gt;&amp;nbsp;$contentService.RemoteAdministratorAccessDenied = $false&lt;br /&gt;&amp;nbsp; # update the web service&lt;br /&gt;&amp;nbsp;$contentService.Update()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;Set-RemoteAdministratorAccessDenied-False&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AidanGarnish/~4/qaxUs3WeBPA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/AidanGarnish/~3/qaxUs3WeBPA/post.aspx</link>
      <author>Aidan</author>
      <comments>http://www.aidangarnish.net/post/SharePoint-2010-SPTimer-job-wont-activate.aspx#comment</comments>
      <guid isPermaLink="false">http://www.aidangarnish.net/post.aspx?id=180ff9b5-1f25-4550-b344-84d4148371be</guid>
      <pubDate>Wed, 02 Feb 2011 12:10:00 +0000</pubDate>
      <category>SharePoint 2010</category>
      <dc:publisher>Aidan</dc:publisher>
      <pingback:server>http://www.aidangarnish.net/pingback.axd</pingback:server>
      <pingback:target>http://www.aidangarnish.net/post.aspx?id=180ff9b5-1f25-4550-b344-84d4148371be</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.aidangarnish.net/trackback.axd?id=180ff9b5-1f25-4550-b344-84d4148371be</trackback:ping>
      <wfw:comment>http://www.aidangarnish.net/post/SharePoint-2010-SPTimer-job-wont-activate.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.aidangarnish.net/syndication.axd?post=180ff9b5-1f25-4550-b344-84d4148371be</wfw:commentRss>
    <feedburner:origLink>http://www.aidangarnish.net/post.aspx?id=180ff9b5-1f25-4550-b344-84d4148371be</feedburner:origLink></item>
  </channel>
</rss>

