<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>p u b l i c v o i d . d k</title>
    <link>http://www.publicvoid.dk/</link>
    <description>by Søren Spelling Lund</description>
    <language>en-us</language>
    <copyright>Søren Spelling Lund</copyright>
    <lastBuildDate>Sun, 20 May 2012 00:00:00 PDT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>public@publicvoid.dk</managingEditor>
    <webMaster>public@publicvoid.dk</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/publicvoid" /><feedburner:info uri="publicvoid" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>56.18514381357207</geo:lat><geo:long>9.588189125061035</geo:long><image><link>http://www.publicvoid.dk</link><url>http://www.publicvoid.dk/MyFiles/publicvoid-logo.gif</url><title>p u b l i c v o i d . d k</title></image><item><title>Links for 2012-05-19 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/1HqGShm1mc8/mufoxe</link><pubDate>Sun, 20 May 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2012-05-19</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.syntevo.com/smartgit/index.html"&gt;Prettier UI client for Git. Free.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/1HqGShm1mc8" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2012-05-19</feedburner:origLink></item><item><title>Links for 2012-05-04 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/7QdcmIKcxrk/mufoxe</link><pubDate>Sat, 05 May 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2012-05-04</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://our.umbraco.org/projects/website-utilities/ucommerce/ucommerce-support/29925-step-by-step-Process-on-Ordering"&gt;uCommerce Razor Samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/7QdcmIKcxrk" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2012-05-04</feedburner:origLink></item><item><title>Links for 2012-03-15 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/zsypvvqiOQg/mufoxe</link><pubDate>Fri, 16 Mar 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2012-03-15</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://progress.umbraco.org/"&gt;Umbraco V5 Progress Tracker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/zsypvvqiOQg" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2012-03-15</feedburner:origLink></item><item><title>Links for 2012-03-02 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/EphqNL0984I/mufoxe</link><pubDate>Sat, 03 Mar 2012 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2012-03-02</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.iconfinder.com/"&gt;Icon Search Engine | Iconfinder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/EphqNL0984I" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2012-03-02</feedburner:origLink></item><item><title>Links for 2012-01-09 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/894-iIuyMXs/mufoxe</link><pubDate>Tue, 10 Jan 2012 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2012-01-09</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://lazarus.interclue.com/download"&gt;Lazarus: Form Recovery: Restore lost forms with a single click&lt;/a&gt;&lt;br/&gt;
Using Lazarus, you can recover lost forms with a single click. Lazarus automagically encrypts and saves every form as you type. If the submission fails or if you forget to send it or your computer or browser crashes, then you can return to the page and recover the form data you originally entered.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/894-iIuyMXs" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2012-01-09</feedburner:origLink></item><item><title>Links for 2011-12-05 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/OfITO_0henI/mufoxe</link><pubDate>Tue, 06 Dec 2011 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2011-12-05</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://epplus.codeplex.com/"&gt;EPPlus-Create advanced Excel 2007 spreadsheets on the server&lt;/a&gt;&lt;br/&gt;
EPPlus is a .net library that reads and writes Excel 2007/2010 files using the Open Office Xml format (xlsx).&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/OfITO_0henI" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2011-12-05</feedburner:origLink></item><item><title>Links for 2011-09-23 [del.icio.us]</title><link>http://feedproxy.google.com/~r/publicvoid/~3/3m_oFrCVK74/mufoxe</link><pubDate>Sat, 24 Sep 2011 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/mufoxe#2011-09-23</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/projects/shairport4w/"&gt;Shairport4w - AirPlay for Windows&lt;/a&gt;&lt;br/&gt;
Airtunes emulator. &amp;quot;Shairport&amp;quot; for Windows. Stream music wirelessly to your PC from your iPod/iPad/iPhone/iTunes.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/3m_oFrCVK74" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/mufoxe#2011-09-23</feedburner:origLink></item><item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=f40dbdc8-5181-4605-872d-5d2a3f20814a</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,f40dbdc8-5181-4605-872d-5d2a3f20814a.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,f40dbdc8-5181-4605-872d-5d2a3f20814a.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=f40dbdc8-5181-4605-872d-5d2a3f20814a</wfw:commentRss>
      
      <title>Nice URLs Optimize Webshop Google Page Rank with uCommerce E-commerce Framework for Umbraco</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,f40dbdc8-5181-4605-872d-5d2a3f20814a.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/zeIAyZILHAk/NiceURLsOptimizeWebshopGooglePageRankWithUCommerceEcommerceFrameworkForUmbraco.aspx</link>
      <pubDate>Thu, 10 Mar 2011 21:32:35 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/uCommerce-Nice-Urls_A16A/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/uCommerce-Nice-Urls_A16A/image_thumb.png" width="768" height="81"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; 1.5 introduces nice URLs for catalogs,&#xD;
categories, and products. The basic idea is to provide keyword rich URLs for catalog&#xD;
items to increase page rank in search engines like Google and Bing. Really though,&#xD;
who are we kidding here? It’s just for Google  :)&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Based on Existing Catalog Information&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To keep maintenance low uCommerce generates URLs based on information already present&#xD;
in the catalog. To support multilingual sites display names are used when present&#xD;
otherwise standard internal names are used. This gives webshops built with uCommerce&#xD;
the ability to rank on search terms specific to the culture the online store services,&#xD;
e.g. English terms for English stores, Spanish terms for Spanish stores, etc..&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
URLs are structured in three parts: &#xD;
&lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
The domain name, which also determines the language to use as per Umbraco hostname &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
The search engine friendly soft middle &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
And finally the payload at the end, which enables uCommerce to figure which type of&#xD;
URL it’s dealing with&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
For a sample URL like &lt;strong&gt;www.myonlinestore.com/apparel/c-24&lt;/strong&gt; the three&#xD;
pieces are:&#xD;
&lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
“www.myonlinestore.com” – domain name of the store as set up in Umbraco &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
“apparal” – search engine search term &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
“c-24” – identifier of the catalog for uCommerce to use&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
Basically Umbraco and uCommerce only need the first and last pieces while the rest&#xD;
is all for Google.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Nice URLs from XSLT&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To start using nice URLs in your own uCommerce solution you’ll need to use one of&#xD;
the following XSLT extensions: &#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;GetNiceUrlForCatalog(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; catalogName)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;GetNiceUrlForCategory(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; catalogName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; categoryName)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;GetNiceUrlForProduct(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; catalogName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; categoryName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; sku)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;GetNiceUrlForProduct(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; catalogName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; sku)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;GetNiceUrlForVariant(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; catalogName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; sku, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; variantSku).&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
There are multiple extensions for each type of URL you’ll generate as they have slightly&#xD;
different needs for the final result. The method will generate the following URLs:&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Catalog called “Apparel”&lt;/strong&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;xsl:variable&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="catalogUrl"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="CommerceLibrary:GetNiceUrlForCatalog('Apparel')"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
www.myonlinestore.com/&lt;strong&gt;apparel&lt;/strong&gt;/c-24&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Category called “T-shirts” nested in “Shirts” / “Men”&lt;/strong&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;xsl:variable&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="categoryUrl"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="CommerceLibrary:GetNiceUrlForCategory('Apparel',&#xD;
'TShirts')"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
www.myonlinestore.com/apparel/&lt;strong&gt;shirts&lt;/strong&gt;/&lt;strong&gt;men&lt;/strong&gt;/&lt;strong&gt;t-shirts&lt;/strong&gt;/c-24/c-71&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Product “Short sleeved green t-shirt&lt;/strong&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;xsl:variable&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="categoryUrl"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="CommerceLibrary:GetNiceUrlForProduct('Apparel',&#xD;
'TShirts', 'Green-TShirt')"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
www.myonlinestore.com/apparel/shirts/men/t-shirts/&lt;strong&gt;short-sleeved-green-t-shirt&lt;/strong&gt;/c-24/c-71/p-107&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;xsl:variable&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="categoryUrl"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="CommerceLibrary:GetNiceUrlForProduct('Apparel',&#xD;
'Green-TShirt')"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
www.myonlinestore.com/apparel/&lt;strong&gt;short-sleeved-green-t-shirt&lt;/strong&gt;/c-24/p-107&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Nice URLs from .NET&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To generate those same URLs from .NET you’ll use the IUrlService. Using the ObjectFactory&#xD;
class you can resolve the configured instance for the interface. The default implementation&#xD;
is called UrlSerivce. More on that later.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;IUrlService urlService = ObjectFactory.Instance.Resolve&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;IUrlService&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;ProductCatalog catalog = ProductCatalog.SingleOrDefault(x =&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; x.Name&#xD;
== "Apparel");&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;string catalogUrl = urlService.GetUrl(catalog);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;Category category = Category.SingleOrDefault(x =&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; x.Name&#xD;
= "TShirts");&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;string categoryUrl = urlService.GetUrl(catalog, category);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;Product product = Product.SingleOrDefault(x =&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; x.Sku&#xD;
== "Green-TShirt" &amp;amp;&amp;amp; x.ParentProductId == null);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;string productIncludingCategoryInfoUrl = urlService.GetUrl(catalog, category, product);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;string productUrl = urlService.GetUrl(catalog, product);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;h3&gt;Building Your Own Nice URLs&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/uCommerce-Nice-Urls_A16A/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/uCommerce-Nice-Urls_A16A/image_thumb_1.png" width="387" height="190"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If you wish to customize the default nice URLs you can go ahead and inherit the class&#xD;
UrlService and override any methods you’re not happy with. Should you need to replace&#xD;
the default nice URLs generated by uCommerce you can implement the IUrlService interface&#xD;
from scratch. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If for instance you need complete control over the keywords added to the URL your&#xD;
custom implementation might grab information not from the display name, but from a&#xD;
dedicated field on the category or product. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In any case you have to register your custom implementation via /umbraco/ucommerce/configuration/components.config.&#xD;
Just look for the existing registration of IUrlService. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;URL Rewrite Rules&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
UrlRewriting.NET contains the set of rules, which define what URL the customer sees&#xD;
and what that URL should look like to the system.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You will not have to change the existing rules even if you implement your own UrlService&#xD;
as long as you keep the last part of the URL the same, i.e. the /c-xx/c-yy/c-zz part.&#xD;
This is the marker used for the rules to pick up a rewritten URL so you can include&#xD;
anything before that part. If you don’t want the marker as part of your URL you’ll&#xD;
have to modify the default rules.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Each rule is automatically deployed when uCommerce is installed and is found in /config/UrlRewriting.config&#xD;
in your website folder. If you wish to modify the default rules this is the place&#xD;
to do it.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Summary&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Nice URLs help the search engine optimization process for webshops built with uCommerce&#xD;
and will make pages in your webshop rank higher. Any URL scheme is supported by overriding&#xD;
the default implementation found in UrlService.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=f40dbdc8-5181-4605-872d-5d2a3f20814a"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=zeIAyZILHAk:vnJhCU3oZbQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=zeIAyZILHAk:vnJhCU3oZbQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=zeIAyZILHAk:vnJhCU3oZbQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=zeIAyZILHAk:vnJhCU3oZbQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=zeIAyZILHAk:vnJhCU3oZbQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/zeIAyZILHAk" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,f40dbdc8-5181-4605-872d-5d2a3f20814a.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/NiceURLsOptimizeWebshopGooglePageRankWithUCommerceEcommerceFrameworkForUmbraco.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=a3668422-740b-48a2-8e72-59a68a2005c0</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,a3668422-740b-48a2-8e72-59a68a2005c0.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,a3668422-740b-48a2-8e72-59a68a2005c0.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=a3668422-740b-48a2-8e72-59a68a2005c0</wfw:commentRss>
      
      <title>Building Webshops with Umbraco, Razor, and the uCommerce E-commerce Framework. Oh My!</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,a3668422-740b-48a2-8e72-59a68a2005c0.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/TdyqkEMA23I/BuildingWebshopsWithUmbracoRazorAndTheUCommerceEcommerceFrameworkOhMy.aspx</link>
      <pubDate>Thu, 03 Mar 2011 21:05:36 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Probably the most interesting new feature to come to Umbraco lately (for .NET developers&#xD;
anyway) is support for the Razor view engine. The Razor view engine was originally&#xD;
(sounds like it was year ago when in fact it only happened recently) introduced with&#xD;
MVC 3 to reduce friction when writing UI code.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;XSLT, .NET, or Both&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/NET-logo_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="NET-logo" border="0" alt="NET-logo" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/NET-logo_thumb.png" width="125" height="132"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;img style="margin: 0px 0px 10px 10px; display: inline; float: right" border="0" alt="XSLT" align="right" src="http://www.w3schools.com/images/w3xslt.gif" width="100" height="132"&gt;&lt;/img&gt;One&#xD;
of the first questions I’m asked when I demo uCommerce to new partners is, “should&#xD;
we use XSLT or .NET user control to build our uCommerce sites”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
My advice over the past couple of years has always been to use XSLT for static listings&#xD;
and roll out .NET for the more dynamic pieces like the check out flow or advanced&#xD;
product pickers.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It’s no secret that my background in .NET makes me whip out Visual Studio for almost&#xD;
everything, but XSLT does have some interesting attributes like the ability to build&#xD;
out a UI in no time and reskin existing UIs rapidly. That’s why we built the uCommerce&#xD;
Demo Store in XSLT exclusively and that’s why I originally invested some time in getting&#xD;
to know it.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now, however, my advice might be about to change. Read on and find out why.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;img style="margin: 0px 0px 10px 10px; display: inline; float: right" align="right" src="http://trycatch.me/blog/wp-content/uploads/razor.jpg" width="204" height="165"&gt;&lt;/img&gt;Introducing&#xD;
Razor, Macros on Steroids! &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The answer to make .NET devs as efficient creating UIs as XSLT gurus is Razor. While&#xD;
it won’t make developers better designers it will enable them to roll out UIs very&#xD;
rapidly and in a more fluent manner to boot.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The Razor view engine is basically an advanced parser, which enables you to write&#xD;
code much more fluently than what was possible with the WebForms view engine. Gone&#xD;
are the days of &amp;lt;%%&amp;gt; replaced by @.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Basically you can now write code like this in your macros and it will render properly&#xD;
inside your templates.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@using umbraco.cms.businesslogic.member&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@if (Member.GetCurrentMember() != null)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    @string.Format("Hello there, {0}, nice to see you again!", Member.GetCurrentMember().LoginName)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
And this is what it looks like in Umbraco itself. Pretty straightforward, right? Create&#xD;
a new script file using CSHTML and then create a new macro, select the script you&#xD;
created previously, and you’re good to go.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_thumb_1.png" width="401" height="286"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_thumb.png" width="401" height="286"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;h3&gt;uCommerce and Razor: Product Listing&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
So how does this work with uCommerce? As it turns out, quite well. The Active Record&#xD;
pattern combined with LINQ to uCommerce turns out to be a perfect fit for the Razor&#xD;
coding style. Lets see what it takes to get some products into the mix, shall we?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It’s very straightforward: Import the uCommerce entities and query away!&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; UCommerce.EntitiesV2&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var&#xD;
product &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; Product.All())&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &amp;lt;h1&amp;gt;@product.Name&amp;lt;/h1&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/image_thumb_2.png" width="340" height="299"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Not surprisingly, the code produces the following result.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML1769ec5.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1769ec5" border="0" alt="SNAGHTML1769ec5" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML1769ec5_thumb.png" width="401" height="281"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
But what’s with the 5, 10, and 15? Turns out that the list contains both product,&#xD;
product families, and variants. Lets expand on the query a bit and only display the&#xD;
top level products and families.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Notice how the following query now has a Where clause on the call. What we’re doing&#xD;
is filtering the result to only grab the products we want. See how easy that is? Common&#xD;
operations like filtering, grouping, and even joining is supported which opens up&#xD;
for some very interesting scenarios.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; UCommerce.EntitiesV2&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var&#xD;
product &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; Product.All().Where(x =&amp;gt; x.ParentProductId&#xD;
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;))&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &amp;lt;h1&amp;gt;@product.Name&amp;lt;/h1&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML1704eb3.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1704eb3" border="0" alt="SNAGHTML1704eb3" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML1704eb3_thumb.png" width="401" height="96"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Simple Basket Page&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
How about another one just for kicks? What’s interesting here is that we’re leveraging&#xD;
the context aware API of uCommerce to determine the basket given the current customer.&#xD;
Because the API deals with context you don’t have to worry about getting the right&#xD;
data, it’s just there ready to be consumed.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;@&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; UCommerce.Runtime&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;lt;table&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &amp;lt;th&amp;gt;SKU&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Qty&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Unit Price&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Total&amp;lt;/th&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    @&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var&#xD;
orderLine &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; SiteContext.Current.OrderContext.GetBasket().PurchaseOrder.OrderLines) &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &amp;lt;tr&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &amp;lt;td&amp;gt;@orderLine.Sku&amp;lt;/td&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &amp;lt;td&amp;gt;@orderLine.ProductName&amp;lt;/td&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &amp;lt;td&amp;gt;@orderLine.Quantity&amp;lt;/td&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &amp;lt;td&amp;gt;@orderLine.Price&amp;lt;/td&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &amp;lt;td&amp;gt;@orderLine.Total&amp;lt;/td&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &amp;lt;/tr&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;lt;/table&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
Again the code above is a full Razor macro in Umbraco, which is placed on a template&#xD;
to achieve the output below. With that we’ve got the beginnings of basket overview&#xD;
page. See how clean that is? &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML30278e6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML30278e6" border="0" alt="SNAGHTML30278e6" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Umbraco-4.7-Razor-and-uCommerce.-Oh-My_AF75/SNAGHTML30278e6_thumb.png" width="401" height="148"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Summary&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
While Razor was introduced in Umbraco 4.6 it’s not really until 4.7 it’s become really&#xD;
usable. In testing uCommerce with Umbraco 4.7 I found the combination of Razor and&#xD;
LINQ to uCommerce to work surprisingly well. The flow inherent in Razor is carried&#xD;
over to the uCommerce API. As a result the code flows naturally just the way we like&#xD;
it.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
With Razor .NET developers start to see the same level of productivity which has been&#xD;
exclusive to the XSLT gurus when creating UIs. Not only that but the UI code is very&#xD;
readable and the full .NET framework is available without having to resort to XSLT&#xD;
extensions as is the case with XSLT today.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=a3668422-740b-48a2-8e72-59a68a2005c0"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=TdyqkEMA23I:Qr9cgnkNj5U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=TdyqkEMA23I:Qr9cgnkNj5U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=TdyqkEMA23I:Qr9cgnkNj5U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=TdyqkEMA23I:Qr9cgnkNj5U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=TdyqkEMA23I:Qr9cgnkNj5U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/TdyqkEMA23I" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,a3668422-740b-48a2-8e72-59a68a2005c0.aspx</comments>
      <category>uCommerce</category>
      <category>Umbraco</category>
    <feedburner:origLink>http://www.publicvoid.dk/BuildingWebshopsWithUmbracoRazorAndTheUCommerceEcommerceFrameworkOhMy.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=0fa35212-04df-48cf-983f-913a216cc7e9</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,0fa35212-04df-48cf-983f-913a216cc7e9.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,0fa35212-04df-48cf-983f-913a216cc7e9.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=0fa35212-04df-48cf-983f-913a216cc7e9</wfw:commentRss>
      
      <title>Social Commerce Explained: Product Ratings, Products Reviews, and Comments</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,0fa35212-04df-48cf-983f-913a216cc7e9.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/b6FU-Mvp6_4/SocialCommerceExplainedProductRatingsProductsReviewsAndComments.aspx</link>
      <pubDate>Wed, 02 Mar 2011 10:15:03 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;img style="margin: 0px 0px 10px 10px; display: inline; float: right" align="right" src="http://merinowoolapparel.com/images/global/customerexcell.jpg" width="284" height="189"&gt;&lt;/img&gt;Social&#xD;
commerce is all about customers engaging each other helping online stores and webshops&#xD;
sell more by leveraging the high degree of credibility inherent in personal recommendations&#xD;
and getting the word out to a wider audience. Social commerce is available in many&#xD;
guises: At &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; we tend to think about&#xD;
it as internal- and external social commerce.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Reviews, Ratings, and Comments&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The very first step in adopting social commerce is to enable customers to post reviews.&#xD;
As such we’re dealing with internal social commerce as everything happens in the webshop&#xD;
and doesn’t involve interaction with sites like &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; and &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Even in online stores stores with product lines changing frequently there’s value&#xD;
to adding reviews to products as customers tend to skip past product information and&#xD;
dive straight into the user generated content to see whether or not a product is worth&#xD;
any further the attention.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Product Ratings&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
When a customers look at product information the very first thing that will catch&#xD;
her eye is the star rating of a product. uCommerce enables customers to post ratings.&#xD;
Each rating is aggregated into an average rating stored on each product, which can&#xD;
be used for searches, filtering, and custom product listings like “Most popular in&#xD;
this category”.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Ratings with no additional content require no approval and will be aggregated into&#xD;
the overall score by default. This behavior can be overridden by modifying the Product&#xD;
Review Pipeline.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Star Ratings in Google Search Results&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Social-Commerce-Explained-Product-Rating_BDF8/Product%20review%20in%20Google%20Search_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Product review in Google Search" border="0" alt="Product review in Google Search" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Social-Commerce-Explained-Product-Rating_BDF8/Product%20review%20in%20Google%20Search_thumb.png" width="492" height="317"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
When searching for products online which link would you be more inclined to click?&#xD;
The one with no star rating or the one with star rating?  When searching on Google&#xD;
and Bing you’ve probably noticed that some search results are displayed with a star&#xD;
rating. This helps your search results stand out in the crowd and will bring in new&#xD;
customers.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The uCommerce Store supports this out of the box by leveraging a &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=146645"&gt;micro&#xD;
format that Google and Bing recognizes&lt;/a&gt; and will display as part of the search&#xD;
result bring more “foot traffic” into the webshop.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Product Reviews&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML49abd9.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML49abd9" border="0" alt="SNAGHTML49abd9" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML49abd9_thumb.png" width="320" height="299"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
uCommerce enables customers to add product reviews on individual products and submit&#xD;
them either directly to the site or, if enabled, for approval by store managers. Product&#xD;
reviews consists of a rating, a review headline, and a review body. If a customer&#xD;
is logged in the review can optionally be associated with that particular customer,&#xD;
which will make the reviews even more effective by letting you display information&#xD;
about the reviewer such as the first name. More on that later.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Because uCommerce supports multiple stores and languages each product review is associated&#xD;
with the store in which it was received, which makes it possible to display just the&#xD;
reviews received in a particular store.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Of course you’ll want to get as much review bang for your buck so more often than&#xD;
not reviews will be displayed from all stores, but you do have a choice.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML77c350.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML77c350" border="0" alt="SNAGHTML77c350" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML77c350_thumb.png" width="401" height="179"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Comments and Helpful Reviews&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML815d1f.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML815d1f" border="0" alt="SNAGHTML815d1f" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML815d1f_thumb.png" width="347" height="299"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML7f7061.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML7f7061" border="0" alt="SNAGHTML7f7061" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML7f7061_thumb.png" width="401" height="203"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML95d9ec.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML95d9ec" border="0" alt="SNAGHTML95d9ec" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML95d9ec_thumb.png" width="401" height="98"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To further improve the value of having product reviews on a webshop you can open up&#xD;
for comments on existing reviews. The simplest form of commenting on a review is to&#xD;
indicate whether or not it was helpful, but the customer can go ahead and add a text&#xD;
comment as well to further explain her position or ask questions of the reviewer to&#xD;
get the conversation going.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Customer Information&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
As you can see in the previous screenshots information about the customer adding content&#xD;
is added to the review or comment. Customers are integrated with site members so you’re&#xD;
effectively free to add as much additional information to the customer profile and&#xD;
by extension the reviews themselves.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Optionally you can require the customer to log in before being able to comment as&#xD;
is the case on Amazon.com or just leave the floodgates open and let anyone comment&#xD;
if they provide an e-mail, which leads us to the next topic: Reporting Abuse.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Reporting Abuse&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9746c2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML9746c2" border="0" alt="SNAGHTML9746c2" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9746c2_thumb.png" width="401" height="98"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The internet can be a downright nasty place with scammers and spammers in abundance.&#xD;
When a site opens up to user generated content it better be prepared to deal with&#xD;
spam. Fortunately uCommerce supports multiple kinds of protection. You can enable&#xD;
customers to report abuse and thus bring any unsuitable content to your attention&#xD;
for approval. Abuse can be reported for both reviews and individual commets.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
By default content reported as spam is still displayed on the site to prevent users&#xD;
from removing content from the site until it can be reviewed and approved. If content&#xD;
is to be removed from the site immediately you can do so as well by modifying the&#xD;
filters for user generated content which is not to be displayed.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Approval Workflow&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML990bc5.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML990bc5" border="0" alt="SNAGHTML990bc5" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML990bc5_thumb.png" width="401" height="115"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9930b3.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML9930b3" border="0" alt="SNAGHTML9930b3" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9930b3_thumb.png" width="401" height="124"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Once user generated content is reported as abuse it will show up in the administration&#xD;
backend where store owners and managers approve or unapprove content.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The approval workflow is available both on the product level and more importantly&#xD;
on the store level as well to make sure that the process of approving reviews is as&#xD;
efficient as possible. Reviews can be removed at any time at the store manager’s discretion.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
When viewing the “Pending Reviews” tab on each store only reviews and comments, which&#xD;
require attention are displayed. While everything is displayed on the product level.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Should you want to have all reviews and comments screened before allowing them onto&#xD;
your website, you can indicate so on each of the stores by ticking the “Product reviews&#xD;
require approval” check box.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9aa382.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML9aa382" border="0" alt="SNAGHTML9aa382" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/2263306e03af_7448/SNAGHTML9aa382_thumb.png" width="401" height="266"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Automatic Workflow via Pipelines&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
As new ratings, reviews, and comments are received they are processed by uCommerce&#xD;
Pipelines, which enables automatic steps to be carried out for each piece of user&#xD;
generated content. Developers can extend these pipeline with custom logic to support&#xD;
custom requirements.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To give you an idea of what can be done using the pipelines here are some ideas:&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You might want to check whether the customer has submitted a high number of reviews&#xD;
inside a short timeframe, which might indicate a spammer or you could notify store&#xD;
managers whenever new content requires attention.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This is also true whenever content is approved or unapproved in the backend. You might&#xD;
want to send an e-mail to the customer who submitted the review when it’s approved&#xD;
so they can see their handiwork on your site (thus bringing back the customer to the&#xD;
store) or you could post teasers from reviews on your Facebook fan page or to Twitter.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Please see &lt;a href="http://blog.lasseeskildsen.net/post/uCommerce-Pipelines-Explained.aspx"&gt;uCommerce&#xD;
Pipelines Explained&lt;/a&gt; for detailed information on extending the Product Review and&#xD;
Product Review Comment pipelines.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Summary&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Social commerce is many things to many people, but in the end a good place to start&#xD;
is by opening up for user generated content like ratings, reviews, and comments on&#xD;
your e-commerce site to increase conversion rates. Keep in mind that while user generated&#xD;
content will help sell more there are caveats associated with it. It’s important to&#xD;
ensure that only proper content makes it onto your site either by using an approval&#xD;
workflow like the one previously described, by requiring user login to be able to&#xD;
review, or by letting customers report abuse.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=0fa35212-04df-48cf-983f-913a216cc7e9"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=b6FU-Mvp6_4:ZSy9CEH1cAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=b6FU-Mvp6_4:ZSy9CEH1cAk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=b6FU-Mvp6_4:ZSy9CEH1cAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=b6FU-Mvp6_4:ZSy9CEH1cAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=b6FU-Mvp6_4:ZSy9CEH1cAk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/b6FU-Mvp6_4" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,0fa35212-04df-48cf-983f-913a216cc7e9.aspx</comments>
      <category>Ecommerce</category>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/SocialCommerceExplainedProductRatingsProductsReviewsAndComments.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=a7dc7f03-3610-44bf-bd0d-86dc52149354</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,a7dc7f03-3610-44bf-bd0d-86dc52149354.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,a7dc7f03-3610-44bf-bd0d-86dc52149354.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=a7dc7f03-3610-44bf-bd0d-86dc52149354</wfw:commentRss>
      <slash:comments>1</slash:comments>
      
      <title>Anatomy of an E-commerce Solution: Marketing</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,a7dc7f03-3610-44bf-bd0d-86dc52149354.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/HIrzhKGM4lI/AnatomyOfAnEcommerceSolutionMarketing.aspx</link>
      <pubDate>Mon, 28 Feb 2011 12:50:35 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
To lead off the documentation on how to build the various parts of a uCommerce based&#xD;
e-commerce site I wanted to first describe what those components are. Having worked&#xD;
with a multitude of clients and projects in my career I’ve come to take many of these&#xD;
things for granted. As &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; grows in popularity&#xD;
I wanted to share some of these things in the hopes of making your next e-commerce&#xD;
project a bit smoother.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;em&gt;If you missed the first article in the series called &lt;/em&gt;&#xD;
          &lt;a href="http://http://www.publicvoid.dk/AnatomyOfAnEcommerceSolutionBrowse.aspx"&gt;&#xD;
            &lt;em&gt;Anatomy&#xD;
of an E-commerce Solution: Browse&lt;/em&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;em&gt;, which deals with product catalogs&#xD;
and product presentation.&lt;/em&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Micro Conversions&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_thumb_2.png" width="206" height="195"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;Today&#xD;
e-commerce stores and webshops are all about enabling store owners to tell their story.&#xD;
While the CMS plays a hugely important role in this area, marketing is another story&#xD;
altogether. Marketing can be divided into internal- and external marketing. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Internal marketing is about setting up special offers for customers to further engage&#xD;
them in the buying process. Too often focus is solely on the the macro conversion,&#xD;
i.e. converting the user to a customer when in reality you need to focus equally on&#xD;
micro conversions, i.e. the act of convincing the user to perform minor conversions&#xD;
with the final goal of getting to the macro conversion. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The most common micro conversion is to offer the user to sign up for a newsletter&#xD;
so you might engage her later on  with direct e-mail communication, but there&#xD;
are many opportunities for micro conversions in webshop like getting them to add more&#xD;
demographic information to their profiles to provide better targeting for site ads&#xD;
and discount, getting them to download sales materiales, or get in touch with a sales&#xD;
representative via e-mail or live chat. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Site Ads&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
You want the user to navigate to interesting products, so why not throw up a banner&#xD;
advertising for the unique selling points of the products or offer up some additional&#xD;
information about the product like a PDF or video? Or how about letting your users&#xD;
compare products? Banners range from the run of the mill “Buy for x amount and get&#xD;
free shipping” to more advanced banner where you tell the customer exactly what they&#xD;
need to do to get the discount, “&lt;font style="font-weight: bold"&gt;Buy for x amount&#xD;
more &lt;/font&gt;and get shipping shipping, i.e. the banner is aware of the customer context&#xD;
and shows how much more the customer must buy for the get the discount – a much more&#xD;
actionable banner than the first one.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Social Commerce with Customer Reviews and Ratings&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_thumb_3.png" width="282" height="186"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;One&#xD;
of the most efficient marketing activities is to let customers do marketing on behalf&#xD;
of the store by enabling them to give ratings and perform full product reviews. Reviews&#xD;
and ratings made by actual people have a very high degree of credibility and many&#xD;
users turn to the reviews section of the product page to find out whether the product&#xD;
is right for them or not. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Indeed research today shows an increasing number of customers not willing to buy products&#xD;
without having consulted product reviews prior to the purchase. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Discounts&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
At the end of the day store owners need tools to convince the customer to convert.&#xD;
These tools might include incentives like reduced prices, over all discounts on the&#xD;
order itself, or voucher codes. Discounts come in many shapes and forms and are usually&#xD;
grouped in campaigns, which run for a certain amount of time after which they are&#xD;
removed from the site. In other words we’re dealing with temporary pricing and benefits.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Your most common types of discounts include “buy two for one”, “percentage off the&#xD;
order”, “amount off the order”, “volume discount”, “free shipping”, and more.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Vouchers and Gift Cards&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Vouchers and gift cards are a certain type of discount which be paired with individual&#xD;
products, entire categories, or just the vanilla stand alone voucher. They enable&#xD;
store owners to pass out codes which can be used during checkout to receive a discount.&#xD;
Vouchers are a very effective means of converting the customer or getting repeat business&#xD;
from existing customers.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Vouchers are often used as a means of increasing the effectiveness of external marketing&#xD;
by including voucher codes with e-mail marketing campaigns, in print media, or on&#xD;
billboards.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Gift cards are basically a variation on the voucher with the main difference being&#xD;
that we’re not really dealing with a discount anymore as a customer will pay full&#xD;
price for the privilege of using the &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Targeting&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_10.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Anatomy-of-an-E-commerce-Solution-Market_7D11/image_thumb_4.png" width="256" height="217"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;With&#xD;
ads and discounts in place you’ll want to target customers with your message. For&#xD;
that purpose targeting is often used. Basically targeting will enable a store owner&#xD;
to configure who should be exposed to a particular message and determine when a discount&#xD;
should be triggered for a customer. Targeting often works by collecting information&#xD;
about the anonymous user on the site: Which products did she look at during the visit,&#xD;
which ones are displayed right now, what was the entry point into the store, any search&#xD;
terms which brought her to the store in the first place.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
These are the basics, but often you’ll go a step farther and start building a profile&#xD;
about a given customer. By categorizing content and products the profile will be become&#xD;
more complete over time and as that happens targeting will become ever more precise&#xD;
to the point where the anonymous customer can be placed in a segment.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Once the customer logs in the profile will often be carried over and the store owner&#xD;
will know even more about the particular customer. A scary example of this in practice&#xD;
is Amazon, which it seems will pick up which products you look at and some days later&#xD;
will send a targeted e-mail to you offering a special on…. exactly the products you&#xD;
viewed. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Scary and brilliant at the same time. The mechanics are pretty straightforward when&#xD;
you think about it.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;External Marketing&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
External marketing include all the activities which drive new traffic to your site&#xD;
including search engine optimization, search engine marketing, link building, social&#xD;
marketing, etc.. While support for some of these activities can be characterized as&#xD;
convenient others must be supported directly in the platform for your solution to&#xD;
rank highly. These include the ability to add custom meta data to your products, have&#xD;
pretty URLs laden with search terms, having product reviews formatted using one of&#xD;
the micro formats that Google recognizes to display as part of search listings. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Content is king in this matter. You can optimize all you want, but in the end getting&#xD;
incoming links to the store by having great content is what really counts. And it’s&#xD;
more interesting to create too. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Common Pitfalls&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
One surprise I’ve had far too often when shopping online or dealing with existing&#xD;
webshops is customers getting a discount by accident. By accident I mean the case&#xD;
where customers are never told about the discount until they’re in the check out flow&#xD;
and notice a lower price than what was listed. Store owners who do this sort of thing&#xD;
might as well toss money in the toilet – it’s more fun and would yield the same profit&#xD;
at the end of the day. The customer didn’t know about the discount, she would have&#xD;
bought the product anyway so why bother having a discount at all?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It’s crucial to remember that marketing is not about lowering pricings or giving great&#xD;
discounts it’s about getting the message out. If you don’t get the message out you&#xD;
might as well not bother.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Summary&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
I’ve only started to scratch the surface of what marketing in an online store or webshop&#xD;
entails, but these are some of the scenario that you’ll be expected to support in&#xD;
your e-commerce solution. Some of it is pretty srraightforward to build, other areas&#xD;
not so much. The area which will trip you up is typically the management pieces and&#xD;
targeting of content and discount. These are areas which either require very efficient&#xD;
workflows or complicated logic to achieve. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;em&gt;Check out the first article in the series called &lt;/em&gt;&#xD;
          &lt;a href="http://http://www.publicvoid.dk/AnatomyOfAnEcommerceSolutionBrowse.aspx"&gt;&#xD;
            &lt;em&gt;Anatomy&#xD;
of an E-commerce Soltion: Browse&lt;/em&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;em&gt;, which deals with product catalogs and&#xD;
product presentation.&lt;/em&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=a7dc7f03-3610-44bf-bd0d-86dc52149354"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=HIrzhKGM4lI:LzUoS4Yph4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=HIrzhKGM4lI:LzUoS4Yph4s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=HIrzhKGM4lI:LzUoS4Yph4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=HIrzhKGM4lI:LzUoS4Yph4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=HIrzhKGM4lI:LzUoS4Yph4s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/HIrzhKGM4lI" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,a7dc7f03-3610-44bf-bd0d-86dc52149354.aspx</comments>
      <category>Ecommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/AnatomyOfAnEcommerceSolutionMarketing.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=d2068794-1939-4dce-97a8-905b9e6f45b0</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,d2068794-1939-4dce-97a8-905b9e6f45b0.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,d2068794-1939-4dce-97a8-905b9e6f45b0.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=d2068794-1939-4dce-97a8-905b9e6f45b0</wfw:commentRss>
      
      <title>Building a Custom Shipping Method Service</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,d2068794-1939-4dce-97a8-905b9e6f45b0.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/PQVXXEBR-Jg/BuildingACustomShippingMethodService.aspx</link>
      <pubDate>Thu, 10 Feb 2011 21:26:29 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
One of my favorite features of &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; is&#xD;
the extensible framework lurking underneath the surface. Using the framework you have&#xD;
the opportunity to add, modify, or even completely the out of the box functionality&#xD;
of uCommerce. Shipping methods are no exception to this rule. Specifically you can&#xD;
build custom shipping method services to enable custom calculation of shipping costs&#xD;
during the checkout flow as discussed in &lt;a href="http://www.publicvoid.dk/ShippingMethodsExplained.aspx"&gt;Shipping&#xD;
Methods Explained&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This article covers adding a new shipping method service to uCommerce and having it&#xD;
show up the admin UI like so.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/SNAGHTML9d935c.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML9d935c" border="0" alt="SNAGHTML9d935c" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/SNAGHTML9d935c_thumb.png" width="448" height="246"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;The Framework&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Before you get into the nitty gritty of building your first custom shipping method&#xD;
service you’ll need a little background about the surrounding framework to understand&#xD;
what’s going on. Your shipping method service first needs to be configured in uCommerce&#xD;
via web.config (more on that later), once written the uCommerce pipelines will make&#xD;
sure and trigger your service when appropriate. By default shipping methods services&#xD;
are triggered in the Basket Pipeline by the task called CalculateShippingCostForShipments.&#xD;
If you’re interested in more information about pipeline please see the &lt;a href="http://blog.lasseeskildsen.net/post/uCommerce-Pipelines-Explained.aspx"&gt;uCommerce&#xD;
Pipelines Explained&lt;/a&gt; article.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Notice that the tasks ends on Shipment&lt;strong&gt;s&lt;/strong&gt; plural. uCommerce supports&#xD;
multiple shipments per order and will call the proper shipping method service for&#xD;
each shipment based on the shipping method selected for it.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_thumb.png" width="440" height="255"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Pretty simple stuff. Now for the fun part: Writing your own shipping method service.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The IShippingMethodService Interface&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_thumb_1.png" width="401" height="299"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This interface is what uCommerce uses to be able to calculate shipment costs. As you&#xD;
can see from the code it’s pretty simple. Basically you’ll receive the shipment as&#xD;
created using either the XSLT or .NET API and you’ll have the opportunity to loop&#xD;
through the relevant order lines, which are linked from the shipment. Lets see what’s&#xD;
involved to create a simple volume based IShippingMethodService.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Volume Based Shipping Method Service&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Volume and weight based shipping pricing are probably the most common shipping scenarios&#xD;
for an online store so lets try and build one of them as an example. First you’ll&#xD;
need to create a new Visual Studio project and add a reference to the UCommerce.dll&#xD;
assembly. You will also need a reference to the Subsonic.Core.dll assembly. With that&#xD;
in place you’re ready to start implementing the service.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The Methods and Properties&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_thumb_2.png" width="396" height="256"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
As you can see you just need to implement two methods and a single property to get&#xD;
it going. The names of the methods should make it fairly obvious what they’re for.&#xD;
ValidateForShipping might require some explanation. As discussed in &lt;a href="http://www.publicvoid.dk/ShippingMethodsExplained.aspx"&gt;Shipping&#xD;
Method Explained&lt;/a&gt; each shipping method can be configured to available only to certain&#xD;
stores and for shipment only to certain countries. The ValidateForShipment enforces&#xD;
these rules. If you just need an unrestricted shipment you can go ahead and always&#xD;
return true, but be aware that users might be confused if they set up a shipping method&#xD;
in one way but it doesn’t actually check for the conditions thus behaving differently&#xD;
from what they expect.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;CalculateShippingPrice Method&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
First up lets calculate the shipping price for the shipment:&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Money&#xD;
CalculateShippingPrice(Shipment shipment)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
First sum up the total weight for the shipment.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
We're assumning that a custom order line property &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
was set on the order line prior when the product was added to the order line.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; totalWeight&#xD;
= 0;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (OrderLine&#xD;
orderline &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; shipment.OrderLines)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        totalWeight += orderline.Quantity * Convert.ToDecimal(orderline.OrderProperties.SingleOrDefault(x =&amp;gt; x.Key == &lt;span style="color: #006080"&gt;"Weight"&lt;/span&gt;).Value);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; shippingPrice&#xD;
= 0;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (totalWeight&#xD;
&amp;gt; 10)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        shippingPrice = 100;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (totalWeight&#xD;
&amp;gt; 20)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        shippingPrice = 200;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        shippingPrice = 300;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
To instantiate a new Money object we need the currency,&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
which is set on the purchase order. To get the currency&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
we move through Shipment -&amp;gt; OrderLines -&amp;gt; PurchasrOrder -&amp;gt; Currency&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Money(shippingPrice,&#xD;
shipment.OrderLines.First().PurchaseOrders.Single().Currencies.Single());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
Of course the business rule in this particular case is very simplistic, but you get&#xD;
the idea.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;ValidateForShipping Method&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Next up is the ValidateForShippingMethod, which is actually called prior to CalculateShippingPrice&#xD;
to validate that the shipping method is validate for the current purchase order. The&#xD;
SinglePriceShippingMethod which comes out of the box has rules to ensure that the&#xD;
shipping method has a shipping address set and that the shipment is set to be delivered&#xD;
to one of the allowed countries for the shipping method.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ValidateForShipping(Shipment&#xD;
shipment)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (shipment.ShipmentAddressId&#xD;
&amp;lt;= 0)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span style="color: #006080"&gt;"Cannot&#xD;
validate shipment for country. Remember to set the shipping address for shipment."&lt;/span&gt;);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var shippingMethod = shipment.ShippingMethods.SingleOrDefault();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (shippingMethod&#xD;
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidOperationException(&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #006080"&gt;"Cannot&#xD;
validate destination country for shipment. It does not contain a shipping method.&#xD;
Remember to add a shipping method to your shipment before validating."&lt;/span&gt;);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ValidateShippingDestination(shipment.OrderAddresses.Single(),&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                                shipment.ShippingMethods.Single());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;summary&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
Validates the order lines according to their desired destination and configured contries&#xD;
for shipping method&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;/summary&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ValidateShippingDestination(OrderAddress&#xD;
shippingAddress, ShippingMethod shippingMethod)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var eligibleCountries = shippingMethod.GetEligibleCountries();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
No eligible countries exist - so the shipment isn't valid&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (eligibleCountries&#xD;
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; eligibleCountries.SingleOrDefault(x&#xD;
=&amp;gt; x.CountryId == shippingAddress.CountryId) != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;h3&gt;Name Property&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
I probably should have started out with the easier of the member to implement, but&#xD;
Name ended up with the shortest straw and got to go last. Name will be set externally&#xD;
based on the name used when the shipping method service is configured in web.config,&#xD;
which incidentally is the next topic of this article.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Name&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    get;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    set;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;h3&gt;VolumeShippingMethodService&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
With the name property implemented our VolumeShippingMethodService looks like this:&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; VolumeShippingMethodService&#xD;
: IShippingMethodService&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Money&#xD;
CalculateShippingPrice(Shipment shipment)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
First sum up the total weight for the shipment.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
We're assumning that a custom order line property &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
was set on the order line prior when the product was added to the order line.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; totalWeight&#xD;
= 0;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (OrderLine&#xD;
orderline &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; shipment.OrderLines)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            totalWeight += orderline.Quantity * Convert.ToDecimal(orderline.OrderProperties.SingleOrDefault(x =&amp;gt; x.Key == &lt;span style="color: #006080"&gt;"Weight"&lt;/span&gt;).Value);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; shippingPrice&#xD;
= 0;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (totalWeight&#xD;
&amp;gt; 10)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            shippingPrice = 100;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (totalWeight&#xD;
&amp;gt; 20)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            shippingPrice = 200;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            shippingPrice = 300;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
To instantiate a new Money object we need the currency,&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
which is set on the purchase order. To get the currency&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
we move through Shipment -&amp;gt; OrderLines -&amp;gt; PurchasrOrder -&amp;gt; Currency&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Money(shippingPrice,&#xD;
shipment.OrderLines.First().PurchaseOrders.Single().Currencies.Single());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ValidateForShipping(Shipment&#xD;
shipment)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (shipment.ShipmentAddressId&#xD;
&amp;lt;= 0)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span style="color: #006080"&gt;"Cannot&#xD;
validate shipment for country. Remember to set the shipping address for shipment."&lt;/span&gt;);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        var shippingMethod = shipment.ShippingMethods.SingleOrDefault();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (shippingMethod&#xD;
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidOperationException(&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #006080"&gt;"Cannot&#xD;
validate destination country for shipment. It does not contain a shipping method.&#xD;
Remember to add a shipping method to your shipment before validating."&lt;/span&gt;);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ValidateShippingDestination(shipment.OrderAddresses.Single(),&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                                    shipment.ShippingMethods.Single());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;summary&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
Validates the order lines according to their desired destination and configured contries&#xD;
for shipping method&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;/summary&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;///&#xD;
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ValidateShippingDestination(OrderAddress&#xD;
shippingAddress, ShippingMethod shippingMethod)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        var eligibleCountries = shippingMethod.GetEligibleCountries();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
No eligible countries exist - so the shipment isn't valid&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (eligibleCountries&#xD;
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; eligibleCountries.SingleOrDefault(x&#xD;
=&amp;gt; x.CountryId == shippingAddress.CountryId) != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Name&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        get; set;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;h3&gt;Registering Your ShippingMethodService with uCommerce&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Your custom shipping method service needs to configured with uCommerce so users are&#xD;
able to set up new shipping methods which use your code. This happens in web.config.&#xD;
When uCommerce is rolled out a number of configuration sections are added to web.config&#xD;
one of which called ordersConfiguration.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;ordersConfiguration&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;shippingMethodServices&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;add&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="SinglePriceService"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="UCommerce.Transactions.Shipping.SinglePriceShippingMethodService,&#xD;
UCommerce"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;add&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="VolumeShippingService"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="MyUCommerceApp.VolumeShippingMethod,&#xD;
MyUCommerceApp"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;shippingMethodServices&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;paymentMethodServices&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;add&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="DIBS"&lt;/span&gt;&#xD;
              &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;="UCommerce.Transactions.Payments.DefaultPaymentMethodService,&#xD;
UCommerce"&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;paymentMethodServices&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&#xD;
              &lt;span style="color: #800000"&gt;ordersConfiguration&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
With the web.config updated you’ll now be able to select your new shipping method&#xD;
service in the UI:&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Developing-with-Shipping-Methods_12A73/image_thumb_3.png" width="561" height="308"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Summing It All Up&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Creating your own shipping method service to handle custom calculations takes as little&#xD;
effort as implementing two methods and a property. Once it’s registered with uCommerce&#xD;
users take over and set up the shipping method to their liking. Becuase your shipping&#xD;
method service is rolled into a separate assembly it’s very straightforward to share&#xD;
between projects.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If you’d lie more information about Shipping Method please take a look at the article &lt;a href="http://www.publicvoid.dk/ShippingMethodsExplained.aspx"&gt;Shipping&#xD;
Methods Explained&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=d2068794-1939-4dce-97a8-905b9e6f45b0"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PQVXXEBR-Jg:MvnydGQm_O4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PQVXXEBR-Jg:MvnydGQm_O4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PQVXXEBR-Jg:MvnydGQm_O4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=PQVXXEBR-Jg:MvnydGQm_O4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PQVXXEBR-Jg:MvnydGQm_O4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/PQVXXEBR-Jg" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,d2068794-1939-4dce-97a8-905b9e6f45b0.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/BuildingACustomShippingMethodService.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=577fb34f-6888-45e2-aa10-c74e414d8422</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,577fb34f-6888-45e2-aa10-c74e414d8422.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,577fb34f-6888-45e2-aa10-c74e414d8422.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=577fb34f-6888-45e2-aa10-c74e414d8422</wfw:commentRss>
      
      <title>Shipping Methods Explained</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,577fb34f-6888-45e2-aa10-c74e414d8422.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/BlOXKsennoI/ShippingMethodsExplained.aspx</link>
      <pubDate>Thu, 10 Feb 2011 19:59:43 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_thumb.png" width="157" height="281"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;The&#xD;
wonderful world of shipping is truly a tangle of complicated business rules and pricing.&#xD;
At uCommerce we realized this long ago thus we do not try to supply every single shipping&#xD;
method known to man in the box. Rather we built a framework to allow you, dear developer,&#xD;
to build to specification whatever you need. Indeed this is at the very core of our&#xD;
Framework First methodology.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The Shipping Method&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
A shipping method in uCommerce consists of two discrete parts: data for presenting&#xD;
the shipping method to the customer and calculating costs and logic to calculate costs&#xD;
based on whatever is in each shipment for an order. uCommerce supports multiple shipments&#xD;
per order and your shipping method will have the opportunity to calculate different&#xD;
shippings costs based on whats in each shipment.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
As you can see in the screenshot above a shipping method contains a bunch of different&#xD;
information.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Common Tab&#xD;
&lt;/h3&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_thumb_1.png" width="469" height="219"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
All the base information for your shipping method like the &lt;em&gt;name&lt;/em&gt;, which will&#xD;
be used in code as well as on shipments created with this particular shipping method. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The &lt;em&gt;default payment method &lt;/em&gt;in cases where your shipping method is also a&#xD;
payment like Collect on Delivery.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
For developers the &lt;em&gt;Service drop down list &lt;/em&gt;is of particular interest as this&#xD;
is where you can hook into the shipping system with your own code to calculate shipping&#xD;
costs. More on that in a separate article.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Access Tab&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_thumb_2.png" width="467" height="235"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
When running a multi store set up it’s often handy to be able to set up different&#xD;
shipping methods for different stores and determine which countries each shipping&#xD;
method is available to ship to. The access tabs lets you do just that.Pricing Tab&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Pricing Tab&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_thumb_3.png" width="471" height="220"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Here you’ll set up the pricing for your shipping method. By default each shipping&#xD;
method can have individual pricing in each price group, which means that you differentiate&#xD;
pricing in multi currency scenarios or even for individual customers if they’re working&#xD;
with individual price groups. The pricing strategy can be overridden by creating a&#xD;
custom shipping method service, which is covered in another article. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Multilingual Tabs (English)&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_10.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Extending-uCommerce-with-Custom-Shipping_119DD/image_thumb_4.png" width="471" height="228"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The final tabs covers the multilingual capability of uCommerce. Most areas in the&#xD;
admin UI will have multilingual tabs assigned to them. uCommerce will pick of the&#xD;
configured languages in Umbraco and display a multilingual tabs for each of them where&#xD;
appropriate. For shipping methods this means that you can set up information about&#xD;
each shipping method to match whatever language your customers speak.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Summing It All Up&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
As you’ve seen uCommerce shipping methods are very straightforward to set up. You&#xD;
can have multiple shipping methods configured and you decide which stores each of&#xD;
the shippings method are available to. For each shipping method you can either use&#xD;
the out of the box shipping providers or you can roll your own to match customer requirements&#xD;
exactly.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You might also be interested in reading &lt;a href="http://www.publicvoid.dk/BuildingACustomShippingMethodService.aspx"&gt;Building&#xD;
a Custom Shipping Method Service for Calculating Shipping Costs&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=577fb34f-6888-45e2-aa10-c74e414d8422"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=BlOXKsennoI:NHnT6lKL4io:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=BlOXKsennoI:NHnT6lKL4io:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=BlOXKsennoI:NHnT6lKL4io:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=BlOXKsennoI:NHnT6lKL4io:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=BlOXKsennoI:NHnT6lKL4io:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/BlOXKsennoI" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,577fb34f-6888-45e2-aa10-c74e414d8422.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/ShippingMethodsExplained.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=9af0b86e-0c9d-4df8-bd82-34ea009175e1</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,9af0b86e-0c9d-4df8-bd82-34ea009175e1.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,9af0b86e-0c9d-4df8-bd82-34ea009175e1.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=9af0b86e-0c9d-4df8-bd82-34ea009175e1</wfw:commentRss>
      
      <title>Delete All Products Stored in uCommerce using SQL</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,9af0b86e-0c9d-4df8-bd82-34ea009175e1.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/Lw2JiGeAGkk/DeleteAllProductsStoredInUCommerceUsingSQL.aspx</link>
      <pubDate>Fri, 17 Dec 2010 10:09:01 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
When you delete something in &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; it doesn’t&#xD;
really go away. Rather uCommerce employs soft deletes on various data objects, particularly&#xD;
in the catalog, to enable you to query historical data. e.g. for reporting purposes.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Some times however you’d like to clear test data from your catalogs and you need to&#xD;
get a little heavy handed to do it by going directly to the database and deleting&#xD;
the data.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Of course you have to observe the relations between existing data and delete in the&#xD;
proper order to avoid breaking constraints in the database. The uCommerce product&#xD;
is a rather complex collection of tables, which hold your custom properties, language&#xD;
variations, prices, relations to other catalog items such as other products and categories,&#xD;
which means that getting it right might be a little tricky.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Delete-All-Products-Stored-in-uCommerce-_9A32/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Delete-All-Products-Stored-in-uCommerce-_9A32/image_thumb_1.png" width="498" height="469"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Fortunately we already did the script for you and it goes a little something like&#xD;
this:&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;--&#xD;
PLEASE NOTE: If you run this script against your uCommerce database all products and&#xD;
related data will be deleted.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;--&#xD;
There's no way to get it back unless you keep a database backup handy.&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;TRANSACTION&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_PriceGroupPrice&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_ProductRelation&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_CategoryProductRelation&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_ProductProperty&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_ProductDescriptionProperty&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_ProductDescription&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; uCommerce_Product&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;COMMIT&lt;/span&gt; TRANSACTION&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=9af0b86e-0c9d-4df8-bd82-34ea009175e1"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=Lw2JiGeAGkk:ASpIDo1-WEc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=Lw2JiGeAGkk:ASpIDo1-WEc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=Lw2JiGeAGkk:ASpIDo1-WEc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=Lw2JiGeAGkk:ASpIDo1-WEc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=Lw2JiGeAGkk:ASpIDo1-WEc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/Lw2JiGeAGkk" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,9af0b86e-0c9d-4df8-bd82-34ea009175e1.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/DeleteAllProductsStoredInUCommerceUsingSQL.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=b9b7730d-3536-45ec-9d9b-37c037ad4ce7</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,b9b7730d-3536-45ec-9d9b-37c037ad4ce7.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,b9b7730d-3536-45ec-9d9b-37c037ad4ce7.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=b9b7730d-3536-45ec-9d9b-37c037ad4ce7</wfw:commentRss>
      
      <title>Checklist for Updating uCommerce</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,b9b7730d-3536-45ec-9d9b-37c037ad4ce7.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/eSXQbEfrJCI/ChecklistForUpdatingUCommerce.aspx</link>
      <pubDate>Wed, 01 Dec 2010 13:14:29 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
The basic process of updating &lt;a href="http://www.ucommerce.dk"&gt;uCommerce&lt;/a&gt; from&#xD;
one version to another is straightforward when you’re running a default setup: You&#xD;
install the new package on top of the existing one and uCommerce will figure out what&#xD;
needs to be migrated.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Database updates are handled automatically and will roll you forward without incident.&#xD;
XML files on the other hand are a little more tricky to merge so instead of trying&#xD;
to merge them uCommerce will overwrite existing config files with newer versions to&#xD;
ensure that the config matches the rolled out binary version of uCommerce; exactly&#xD;
as Umbraco does. This means that If you customized any of the uCommerce configuration&#xD;
files you will have to reapply those changes.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Not to worry though uCommerce will back up the files before resetting them. You’ll&#xD;
find the older versions sitting next the orignal file with a .backup extension.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Most of the time getting your settings back is a simple matter of copying back the&#xD;
backed up version of your configuration files and you’re done. The steps for manually&#xD;
reregistering your settings are outlined below.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_thumb_1.png" width="369" height="145"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Web.config&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Web.config is an interesting file because it’s used by Umbraco and uCommerce itself.&#xD;
During installation uCommerce merges its configuration with the existing web.config&#xD;
contents preserving any settings not owned by uCommerce, i.e. Umbraco, .NET, basically&#xD;
anything not known by uCommerce.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Connection Strings&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
During install the Umbraco connection string is picked up and added to the uCommerce&#xD;
configuration section to enable running uCommerce in a separate database. If you’re&#xD;
running with a separate database you need to point uCommerce at the other database&#xD;
once the update is complete. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/SNAGHTML3968cdd.png"&gt;&#xD;
            &lt;img title="SNAGHTML3968cdd" border="0" alt="SNAGHTML3968cdd" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/SNAGHTML3968cdd_thumb.png" width="591" height="35"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Payment Method Services&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Any custom payment method services for integrating payment gateways need to be registered&#xD;
in web.config. If you’ve created your own payment method service you’ll have to remember&#xD;
to reregister it once the update is complete. If you’re using the built-in ones you&#xD;
can omit this step. It’s important that you use the same name for your custom payment&#xD;
method service when you reregister it.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Payment method services are found in the &amp;lt;commerce&amp;gt; &amp;lt;ordersConfiguration&amp;gt;&#xD;
&amp;lt;paymentMethodServices&amp;gt; section in web.config.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_8.png"&gt;&#xD;
            &lt;img style="border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_thumb_3.png" width="591" height="99"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Individual Payment Method Service Configurations&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Each payment method service built into uCommerce comes with a configuration file.&#xD;
As these files are rolled out as part of the standard package install process they’re&#xD;
overwritten when you install a newer version of uCommerce. As with any other file&#xD;
you’ll find your old version of the file sitting next to the new one with a .backup&#xD;
extension.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_14.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_thumb_6.png" width="266" height="172"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Pipelines&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Pipelines are basically XML configuration files which control the tasks executed in&#xD;
each pipeline and the order of execution as well. If you’ve added your own pipeline&#xD;
tasks to the standard uCommerce pipelines Basket, Checkout, ToCompletedOrder, ToCancelled,&#xD;
or SaveOrder you’ll have to add your custom tasks again after updating.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You’ll find the pipelines in the /umbraco/ucommerce/pipelines folder.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/Checklist-for-Upgrading-uCommerce_BA4B/image_thumb_2.png" width="233" height="128"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Components.config, Presenters.config, and XmlRenderings.config&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
All major components of uCommerce are configured in a central XML file, which lets&#xD;
you override any of the default uCommerce behavior by configuring your own components.&#xD;
While this is not the most common extension point used you’ll still have to reregister&#xD;
your custom components if you’ve extended uCommerce in this fashion.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Also web.config contains a reference to components.config in the &amp;lt;commerce&amp;gt;&#xD;
&amp;lt;runtimeConfiguration&amp;gt; which has to point at the correct file.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Presenters.config and XmlRenderings.config are referenced by Components.config and&#xD;
contains config for the UI pieces of uCommerce. Specically the backend (Presenters)&#xD;
and the frontend (XmlRenderings).&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Wrap Up&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
uCommerce makes it very easy to update an existing installation provided that you’re&#xD;
running with a standard configuration. There are a couple of things you need to be&#xD;
aware of if you’ve customized the standard configuration files. This check list will&#xD;
make it easy to ensure that you didn’t miss anything when you update your existing&#xD;
site with a newer version of uCommerce.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=b9b7730d-3536-45ec-9d9b-37c037ad4ce7"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=eSXQbEfrJCI:7M6ClyPcn-E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=eSXQbEfrJCI:7M6ClyPcn-E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=eSXQbEfrJCI:7M6ClyPcn-E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=eSXQbEfrJCI:7M6ClyPcn-E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=eSXQbEfrJCI:7M6ClyPcn-E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/eSXQbEfrJCI" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,b9b7730d-3536-45ec-9d9b-37c037ad4ce7.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/ChecklistForUpdatingUCommerce.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=cfe1bc3a-e188-4484-b9de-17d03446cbe7</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,cfe1bc3a-e188-4484-b9de-17d03446cbe7.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,cfe1bc3a-e188-4484-b9de-17d03446cbe7.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=cfe1bc3a-e188-4484-b9de-17d03446cbe7</wfw:commentRss>
      
      <title>Setup uCommerce to Include SagePay as a Payment Method</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,cfe1bc3a-e188-4484-b9de-17d03446cbe7.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/0pzgu4zrgkM/SetupUCommerceToIncludeSagePayAsAPaymentMethod.aspx</link>
      <pubDate>Tue, 30 Nov 2010 09:26:11 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://ucommerce.dk"&gt;uCommerce&lt;/a&gt; comes with built-in support for &lt;a href="http://www.sagepay.com"&gt;SagePay&lt;/a&gt; payments.&#xD;
This guide will walk you through getting uCommerce to work with &lt;a href="http://www.sagepay.com"&gt;SagePay&lt;/a&gt; for&#xD;
payment processing. &lt;a href="http://www.sagepay.com/help/faq/what_is_sage_pay_go_with_server_integration"&gt;uCommerce&#xD;
integrates with SagePay using server integration&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560096"&gt;Settings in uCommerce&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Add a new payment method, under “uCommerce –&amp;gt; Settings –&amp;gt; Orders –&amp;gt; Payment&#xD;
Methods”. You can call it whatever you like, here I have used “SagePay”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb.png" width="260" height="458"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Click the newly created node and select “SagePay” in the Service drop down list. Fill&#xD;
out the rest of the required information, like where it’s available from under the&#xD;
“Access” tab, pricing and the language tabs. When done click “Save”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_1.png" width="420" height="146"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That’s everything in the uCommerce interface.&lt;a name="_Toc274560097"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;Settings in SagePay Administration Panel&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
You can learn more about how to configure SagePay in the &lt;a href="http://www.sagepay.com/help/userguides/6338"&gt;SagePage&#xD;
Help Centre&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Editing SagePay.config&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Now we need to edit the SagePay.config file. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You will find the SagePay.config file in the following location, where “rootdir” is&#xD;
the directory on the computer where you installed Umbraco: “rootdir\umbraco\UCommerce\Configuration\SagePay.config”.&#xD;
Usually “rootdir” is c:\inetpub. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_2.png" width="545" height="169"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Finding vender&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Vendor is the name you use when you login with SagePay. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_3.png" width="591" height="353"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Finding debug&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Debug mode indicates whether you want to have an intermediate page show up with the&#xD;
values, which will be posted to the payment gateway. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding testmode&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Testmode indicates whether your site is in simulation mode (SIMULATOR), test mode&#xD;
(TEST),  or running in production mode (LIVE). &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding successUrl&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
URL the customer is redirected to once the payment is accepted. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding abortUrl&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
URL the customer is redirect to if she cancels payment authorization. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding FailureUrl&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
URL the customer is redirect to if the payment could not be authorized. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding notificationUrl&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
uCommerce will generate a callback URL for internal use. Leave the setting at (auto)&#xD;
unless you need to handle callbacks yourself. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560109"&gt;Executing a &lt;/a&gt;Pipeline on Callback&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Running a pipeline once payment is authorized can be helpful if you need to complete&#xD;
the order once the customer returns to your site. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To run a “pipeline” once the callback if received and processed, you need to modify&#xD;
the database. If you used the name “SagePay” for the payment method name, you can&#xD;
run this SQL query in the SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
UPDATE uCommerce_PaymentMethod SET Pipeline = &lt;b&gt;'Checkout'&lt;/b&gt; WHERE Name = 'SagePay' &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
or just edit it manually in SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_10.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_4.png" width="591" height="102"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now the default pipeline that comes with uCommerce will be run after each successful&#xD;
callback. This sets the Basket to an Order, gives it an OrderNumber, and other things. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560110"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Optional: Enable Acquire, Cancel, and Refund in uCommerce Back Office&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To be able to acquire, cancel, and refund payments you need to enable two pipeline&#xD;
tasks in the ToCompletedOrder pipeline and ToCancelled pipeline. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The pipeline configuration is found in /umbraco/ucommerce/pipelines. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCancelled.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_12.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_5.png" width="591" height="379"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCompletedOrder.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_14.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/ca03a952f822_87B7/image_thumb_6.png" width="591" height="383"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;FAQ&#xD;
&lt;/h3&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Testmode – Make sure test mode if turned off when going live.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=cfe1bc3a-e188-4484-b9de-17d03446cbe7"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=0pzgu4zrgkM:snjKjaB-Go4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=0pzgu4zrgkM:snjKjaB-Go4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=0pzgu4zrgkM:snjKjaB-Go4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=0pzgu4zrgkM:snjKjaB-Go4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=0pzgu4zrgkM:snjKjaB-Go4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/0pzgu4zrgkM" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,cfe1bc3a-e188-4484-b9de-17d03446cbe7.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/SetupUCommerceToIncludeSagePayAsAPaymentMethod.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=316c08fd-d008-48c9-9e3b-e2101565e5b5</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,316c08fd-d008-48c9-9e3b-e2101565e5b5.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,316c08fd-d008-48c9-9e3b-e2101565e5b5.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=316c08fd-d008-48c9-9e3b-e2101565e5b5</wfw:commentRss>
      
      <title>Setup uCommerce to Include RBS WorldPay as a Payment Method</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,316c08fd-d008-48c9-9e3b-e2101565e5b5.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/PH9PehoG8y4/SetupUCommerceToIncludeRBSWorldPayAsAPaymentMethod.aspx</link>
      <pubDate>Tue, 30 Nov 2010 08:34:23 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://ucommerce.dk"&gt;uCommerce&lt;/a&gt; comes with built-in support for &lt;a href="http://www.rbsworldpay.com/support/bg/index.php?page=login"&gt;RBS&#xD;
WorldPay&lt;/a&gt; payments. This guide will walk you through getting uCommerce to work&#xD;
with &lt;a href="http://www.rbsworldpay.com/support/bg/index.php?page=login"&gt;RBS WordPay&lt;/a&gt; for&#xD;
payment processing. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Authorization is available for all plans with RBS WorldPay. If you wish to acquire&#xD;
(capture) or refund payments you need to mail: &lt;a href="mailto:support@rbsworldpay.com"&gt;support@rbsworldpay.com&lt;/a&gt; and&#xD;
ask them to setup “Remote Admin”. At the moment it’s not possible to cancel an authorization&#xD;
with the “Remote Admin”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560096"&gt;Settings in uCommerce&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Add a new payment method, under “uCommerce –&amp;gt; Settings –&amp;gt; Orders –&amp;gt; Payment&#xD;
Methods”. You can call it whatever you like, here I have used “WorldPay”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_2.png" width="164" height="208"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Click the newly created node and select “Worldpay” in the Service drop down list.&#xD;
Fill out the rest of the required information, like where it’s available from under&#xD;
the “Access” tab, pricing and the language tabs. When done click “Save”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_3.png" width="436" height="139"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That’s everything in the uCommerce interface. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560097"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Settings in WorldPay Administration Panel&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Changes needed in the &lt;a href="https://secure.wp3.rbsworldpay.com/merchant/common/start.html"&gt;WorldPay&#xD;
administration panel&lt;/a&gt;, so it will work with uCommerce. Make sure when you are logged&#xD;
in that you are in “Production” mode or else you want to able to save the changes.&#xD;
If you can see the “Switch to Test” link on the picture below, you are in “Production”&#xD;
mode. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_10.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_4.png" width="170" height="147"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Edit Payment Pages&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This out of scope for this guide, however World Pay offers lots of possibilities for&#xD;
customizing the results pages. You can read more about it &lt;a href="http://www.rbsworldpay.com/support/kb/bg/htmlredirect/rhtml.html"&gt;here&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_12.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_5.png" width="478" height="213"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Instant capture&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
In Denmark it is not allowed to capture a payment before the order is shipped, so&#xD;
we need to turn this off. This can different in other countries. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Settings&lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· “Off” means you need to manually capture the payment. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· “0” Means instant capture. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· “1-14” are delay in days before the capture happens. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Changing the setting&lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Click “Profile” in the menu to the left. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Click “Configuration Details” &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Capture Delay: Set the value as accordingly. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Click “Save” &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_14.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_6.png" width="591" height="152"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
          &lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;General changes to the account&#xD;
&lt;/h4&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
In the menu to the left click “Installations” and you should get a list like the one&#xD;
below.&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Then click the “Edit” button that are on the same line as the text: “Select Junior”,&#xD;
this is the primary account.&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_16.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_7.png" width="586" height="116"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Settings&lt;/strong&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
Payment Response URL.&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Put the following text there without the quotes: “&amp;lt;wpdisplay item=MC_callback&amp;gt;”&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
“Payment Response enabled?&lt;/li&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Make sure it’s checked.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
Payment Response failure email address.&lt;/li&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Write your email address here, if you want to receive email notifications, when an&#xD;
error occurs with the “Payment Response”&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
Check the option “Attach HTTP(s) Payment Message to the failure email?” if you want&#xD;
detailed information attached to the email.&lt;/li&gt;&#xD;
        &lt;li&gt;&#xD;
Payment Response password.&lt;/li&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
A password of your choice. In the next section this is referred to as the “callbackPW”,&#xD;
please take a note of this.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
MD5 secret for transations.&lt;/li&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Custom text of your choice. But less than 32 characters. This is referred to as the&#xD;
“Signature” in the next section, so please take a note of it.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
SignatureFields&lt;/li&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Type the following text below without the quotes, or you will get an “Invalid MD5”&#xD;
signature when trying to make a authentication.&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
“instId:amount:currency:cartId:MC_callback”&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;li&gt;&#xD;
Click “Save” and you are done in this section.&lt;/li&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560100"&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;b&gt;&#xD;
          &lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/WorldPay-control-panel_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WorldPay-control-panel" border="0" alt="WorldPay-control-panel" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/WorldPay-control-panel_thumb.png" width="581" height="293"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;h3&gt;Editing the Worldpay.config File&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Now we need to edit the WorldPay.config file. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You will find the WorldPay.config file in the following location, where “rootdir”&#xD;
is the directory on the computer where you installed Umbraco: “rootdir\umbraco\UCommerce\Configuration\WorldPay.config”.&#xD;
Usually “rootdir” is c:\inetpub. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_18.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_8.png" width="390" height="218"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Some of the below information are found in the &lt;a href="https://secure.wp3.rbsworldpay.com/merchant/common/start.html"&gt;WorldPay&#xD;
administration panel&lt;/a&gt;, so start by logging in you aren’t already. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560101"&gt;Finding debug&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
If set it to “True” you will be prompted to click a button before posting the information&#xD;
to “WorldPay” otherwise it will do an autosubmit using Javascript. When running in&#xD;
production, you will want this set to “False”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding testMode&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Set this value to “True” when testing the integration with WorldPay. When going live&#xD;
set this value to “False”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding instId&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Click “Profile” in the menu. The “instId” is the number (normally 6 digits) in the&#xD;
red cirkel. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_20.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_9.png" width="591" height="173"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Finding callbackPW&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This is the “callbackPW” from the previous section. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560102"&gt;Finding callback&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Leave this at “(auto)” if in doubt. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Optional: Finding remoteInstId and authPW&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Click the “Profile” link in the menu to the left. Then you will see a screen like&#xD;
the one below. &#xD;
&lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
This is the remoteInstId and is normally 6 digits.&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
This is the authPW, random digits and letters&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_22.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_10.png" width="591" height="173"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560104"&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;h4&gt;Finding instantCapture&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
True/False weather instant capture is On or Off. If you choose “Off” in the instantCapture&#xD;
in the previously section, this values needs to be “False” otherwise “True”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560105"&gt;Finding key&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This is just a text string of your choice. Recommended is just using random digits/letters. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560109"&gt;Executing a &lt;/a&gt;Pipeline on Callback&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Running a pipeline once payment is authorized can be helpful if you need to complete&#xD;
the order once the customer returns to your site. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To run a “pipeline” once the callback if received and processed, you need to modify&#xD;
the database. If you used the name “WorldPay” for the payment method name, you can&#xD;
run this SQL query in the SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
UPDATE uCommerce_PaymentMethod SET Pipeline = &lt;b&gt;'Checkout'&lt;/b&gt; WHERE Name = 'WorldPay' &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
or just edit it manually in SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_24.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_11.png" width="591" height="102"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now the default pipeline that comes with uCommerce will be run after each successful&#xD;
callback. This sets the Basket to an Order, gives it an OrderNumber, and other things. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560110"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Optional: Enable Acquire, Cancel, and Refund in uCommerce Back Office&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To be able to acquire, cancel, and refund payments you need to enable two pipeline&#xD;
tasks in the ToCompletedOrder pipeline and ToCancelled pipeline. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The pipeline configuration is found in /umbraco/ucommerce/pipelines. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCancelled.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_26.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_12.png" width="591" height="379"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCompletedOrder.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_28.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/001743f8fef4_C5E2/image_thumb_13.png" width="591" height="383"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;FAQ&#xD;
&lt;/h3&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Testmode – Make sure test mode if turned off when going live.&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;b&gt;I get the error message “Cannot find an available route for the purchase. This&#xD;
may be caused by merchant configuration or remote systems failures.”&lt;br&gt;&lt;/b&gt;The error messages might mean a number of different things. One of the meaning&#xD;
that we encountered during test is that our transaction amounts were greater than&#xD;
GBP 5,000.&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;b&gt;Acquiring a payment and immediately cancelling the same payment moves the order&#xD;
to “Requires Attention”&lt;/b&gt;&#xD;
            &lt;br&gt;&#xD;
RBS WorldPay employs a queuing system for handling payments which means that when&#xD;
uCommerce asks WorldPay to acquire a payment we immediately get back a response which&#xD;
indicates that all went well, but in actuality the transaction is queue for acquire&#xD;
on their end.&lt;br&gt;&#xD;
If a transaction is cancelled immediately after the state on the uCommerce end is&#xD;
different from RBS WorldPay thus an error message is logged in the following form:&#xD;
“Refund failed &amp;gt;&amp;gt; N,-1,PMPPI.invalidStatus”.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=316c08fd-d008-48c9-9e3b-e2101565e5b5"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PH9PehoG8y4:mgDCC6N8Rzo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PH9PehoG8y4:mgDCC6N8Rzo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PH9PehoG8y4:mgDCC6N8Rzo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=PH9PehoG8y4:mgDCC6N8Rzo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=PH9PehoG8y4:mgDCC6N8Rzo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/PH9PehoG8y4" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,316c08fd-d008-48c9-9e3b-e2101565e5b5.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/SetupUCommerceToIncludeRBSWorldPayAsAPaymentMethod.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=9f02a3eb-d91f-4fa8-9fe4-1d613922cd64</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,9f02a3eb-d91f-4fa8-9fe4-1d613922cd64.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,9f02a3eb-d91f-4fa8-9fe4-1d613922cd64.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=9f02a3eb-d91f-4fa8-9fe4-1d613922cd64</wfw:commentRss>
      
      <title>Setup uCommerce to Include PayEx as a Payment Method</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,9f02a3eb-d91f-4fa8-9fe4-1d613922cd64.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/K111bg6LoJk/SetupUCommerceToIncludePayExAsAPaymentMethod.aspx</link>
      <pubDate>Mon, 29 Nov 2010 12:59:52 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://ucommerce.dk"&gt;uCommerce&lt;/a&gt; comes with built-in support for &lt;a href="http://payex.com/"&gt;PayEx&lt;/a&gt; payments.&#xD;
This guide will walk you through getting uCommerce to work with &lt;a href="http://payex.com/"&gt;PayEx&lt;/a&gt; for&#xD;
payment processing. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Authorization, acquire (capture), refund, or cancel (void) are available for all plans&#xD;
with PayEx. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560096"&gt;Settings in uCommerce&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Add a new payment method, under “uCommerce –&amp;gt; Settings –&amp;gt; Orders –&amp;gt; Payment&#xD;
Methods”. You can call it whatever you like, here I have used “PayEx”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/image_2.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/image_thumb.png" width="194" height="260"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Click the newly created node and select “PayEx” in the Service drop down list. Fill&#xD;
out the rest of the required information, like where it’s available from under the&#xD;
“Access” tab, pricing and the language tabs. When you are done click “Save”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image002%5B4%5D.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image002%5B4%5D_thumb.png" width="453" height="151"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That’s everything in the uCommerce interface. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560097"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Settings in PayEx Merchant Admin Panel&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Changes needed in the &lt;a href="https://secure.payex.com/Admin/"&gt;PayEx Merchant Admin&lt;/a&gt;,&#xD;
so it will work with uCommerce. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560098"&gt;Ip filter&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click ”Merchant profile”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Type in the external ip address of the webserver running the shop. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
3. Click “Save”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image003%5B4%5D.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image003[4]" border="0" alt="clip_image003[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image003%5B4%5D_thumb.png" width="591" height="237"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Merchant access list&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click “Merchant access list” in the menu to the left. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Click the “PxOrder.PxOrder” link, so it will be expanded and make sure the following&#xD;
is checked. If they aren’t checked, please contact PayEx support and get them to do&#xD;
it. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Cancel2 &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Complete &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Capture3 &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
· Credit3 &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image005%5B4%5D.jpg"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image005[4]" border="0" alt="clip_image005[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image005%5B4%5D_thumb.jpg" width="591" height="281"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc274560100"&gt;Editing the PayEx.config File&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Now we need to edit the PayEx.config file. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You will find the PayEx.config file in the following location, where “rootdir” is&#xD;
the directory on the computer where you installed Umbraco: “rootdir\umbraco\UCommerce\Configuration\PayEx.config”.&#xD;
Usually “rootdir” is c:\inetpub. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image006%5B4%5D.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image006[4]" border="0" alt="clip_image006[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image006%5B4%5D_thumb.png" width="591" height="161"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Some of the below information are found in the &lt;a href="https://secure.payex.com/Admin/"&gt;PayEx&#xD;
Merchant Admin&lt;/a&gt;, so start by logging in you aren’t already. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560101"&gt;Finding debug&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
If set to “True” you will be prompted to click a button before posting the information&#xD;
to “PayEx” otherwise it will do an autosubmit using Javascript. When running in production,&#xD;
you will want this set to “False”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Finding testMode&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This will most likely be a “False” unless you are using a test account. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560102"&gt;Finding callback&lt;/a&gt;Url&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Leave this at “(auto)” if in doubt. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560103"&gt;Finding acceptUrl&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Url the user is returned to after successfully authorizing her credit card. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560104"&gt;Finding cancelUrl&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Url the user is returned to if she cancels a purchase. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc274560105"&gt;Finding &lt;/a&gt;accountNumber&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click “Merchant profile”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Copy the “Merchant account” number. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image008%5B4%5D.jpg" name="_Toc274560108"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image008[4]" border="0" alt="clip_image008[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image008%5B4%5D_thumb.jpg" width="591" height="115"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;b&gt;&#xD;
          &lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;Finding key&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
The Md5 key is created in the administration panel. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click “Merchant profile” in the menu to the left. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Click “New encryption key”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image009%5B4%5D.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image009[4]" border="0" alt="clip_image009[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image009%5B4%5D_thumb.png" width="591" height="303"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
1. Copy the encryption key. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. If you click “Save encryption key”, please note that it will overwrite the old&#xD;
one. It’s not possible to get the old key from the admin interface, so keep it in&#xD;
a safe place. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image010%5B4%5D.png"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image010[4]" border="0" alt="clip_image010[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image010%5B4%5D_thumb.png" width="455" height="169"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560109"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Executing a Pipeline on Callback&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Running a pipeline once payment is authorized can be helpful if you need to complete&#xD;
the order once the customer returns to your site. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To run a “pipeline” once the callback if received and processed, you need to modify&#xD;
the database. If you used the name “PayEx” for the payment method name, you can run&#xD;
this SQL query in the SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
UPDATE uCommerce_PaymentMethod SET Pipeline = &lt;b&gt;'Checkout'&lt;/b&gt; WHERE Name = 'PayEx' &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
or just edit it manually in SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image012%5B4%5D.jpg"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image012[4]" border="0" alt="clip_image012[4]" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image012%5B4%5D_thumb.jpg" width="591" height="90"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now the default piplline that comes with uCommerce will be run after each successful&#xD;
callback. This sets the Basket to an Order, gives it an OrderNumber, and other things. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a name="_Toc274560110"&gt;&#xD;
            &lt;b&gt;&#xD;
            &lt;/b&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;Optional: Enable Acquire, Cancel, and Refund in uCommerce Back Office&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
To be able to acquire, cancel, and refund payments you need to enable two pipeline&#xD;
tasks in the ToCompletedOrder pipeline and ToCancelled pipeline. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The pipeline configuration is found in /umbraco/ucommerce/pipelines. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCancelled.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image014_2.jpg"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image014_thumb.jpg" width="591" height="380"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
ToCompletedOrder.config &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image016_2.jpg"&gt;&#xD;
            &lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/7125a7721565_C483/clip_image016_thumb.jpg" width="591" height="383"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;FAQ&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
· Test mode – Make sure test mode if turned off when going live. &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=9f02a3eb-d91f-4fa8-9fe4-1d613922cd64"&gt;&lt;/img&gt;&lt;/p&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=K111bg6LoJk:KHZVN_83YVY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=K111bg6LoJk:KHZVN_83YVY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=K111bg6LoJk:KHZVN_83YVY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=K111bg6LoJk:KHZVN_83YVY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=K111bg6LoJk:KHZVN_83YVY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/K111bg6LoJk" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,9f02a3eb-d91f-4fa8-9fe4-1d613922cd64.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/SetupUCommerceToIncludePayExAsAPaymentMethod.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=3f183df7-fd03-4f2e-802f-65be72813493</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,3f183df7-fd03-4f2e-802f-65be72813493.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,3f183df7-fd03-4f2e-802f-65be72813493.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=3f183df7-fd03-4f2e-802f-65be72813493</wfw:commentRss>
      
      <title>Setup uCommerce to Include Payer as a Payment Method</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,3f183df7-fd03-4f2e-802f-65be72813493.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/1_AyAGkoeWc/SetupUCommerceToIncludePayerAsAPaymentMethod.aspx</link>
      <pubDate>Mon, 29 Nov 2010 12:57:02 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://ucommerce.dk"&gt;uCommerce&lt;/a&gt; comes with built-in support for &lt;a href="http://payer.se/"&gt;Payer&lt;/a&gt; payments.&#xD;
This guide will walk you through getting uCommerce to work with &lt;a href="http://payer.se/"&gt;Payer&lt;/a&gt; for&#xD;
payment processing.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Authorization is available for all plans with Payer. Payer don’t support remote acquire&#xD;
(capture), refund, or cancel of payments. When an authorization is made the payment&#xD;
is automatically captured and cannot be overridden using configuration. To refund&#xD;
a payment, you must use the &lt;a href="https://secure.pay-read.se/adminweb/inloggning/inloggning.php"&gt;Adminwebb&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc275866367"&gt;Settings in uCommerce&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Add a new payment method, under “uCommerce –&amp;gt; Settings –&amp;gt; Orders –&amp;gt; Payment&#xD;
Methods”. You can call it whatever you like, here I have used “Payer”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_2.png"&gt;&#xD;
            &lt;img title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb.png" width="191" height="269"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Click the newly created node and select “Payer” in the Service drop down list. Fill&#xD;
out the rest of the required information, like where it’s available from under the&#xD;
“Access” tab, pricing and the language tabs. When you are done click “Save”.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_4.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb_1.png" width="474" height="145"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That’s everything in the uCommerce interface. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
          &lt;/b&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc275866368"&gt;Settings in Payer Administration Panel&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Changes needed in the &lt;a href="https://secure.pay-read.se/adminweb/inloggning/inloggning.php"&gt;Adminwebb&lt;/a&gt;,&#xD;
so it will work with uCommerce. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866369"&gt;Payment Methods&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click “Inställningar”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Click ”Betalsätt”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
3. Make sure the top radio button is selected. If it’s not, select it. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
4. Click the “Spare” button. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_6.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb_2.png" width="566" height="273"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866370"&gt;Debug options&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
1. Click “Inställningar”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
2. Click ”Allmänt”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
3. Make sure all three checkbox’s are unchecked, if not do it. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
4. Click “Spara”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_8.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb_3.png" width="514" height="317"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc275866371"&gt;Editing the Payer.config File&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Now we need to edit the Payer.config file. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You will find the Payer.config file in the following location, where “rootdir” is&#xD;
the directory on the computer where you installed Umbraco: “rootdir\umbraco\UCommerce\Configuration\Payer.config”.&#xD;
Usually “rootdir” is c:\inetpub. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_10.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb_4.png" width="591" height="182"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Some of the below information are found in the &lt;a href="https://secure.pay-read.se/adminweb/inloggning/inloggning.php"&gt;Adminwebb&lt;/a&gt;,&#xD;
so start by logging in you aren’t already. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866372"&gt;Finding agentId, key1 and key2&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
In the compressed starting package, "Startpaket", you can find the Agent ID and the&#xD;
keys beneath the catalog "Resources", in the files called "PayReadConf&lt;i&gt;.*".&lt;/i&gt;&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866373"&gt;Finding debug&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
If set to “True” you will be prompted to click a button before posting the information&#xD;
to “ePay” otherwise it will do an autosubmit using Javascript. When running in production,&#xD;
you will want this set to “False”. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866374"&gt;Finding testMode&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This setting must match the configuration in the Adminwebb. If you followed the steps&#xD;
in “Debug options” above, you should set this to “False”, indicating that we are running&#xD;
in production. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866375"&gt;Finding callback&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Leave this at “(auto)” if in doubt. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866376"&gt;Finding acceptUrl&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Url the user is returned to after successfully authorizing her credit card. &#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;&#xD;
          &lt;a name="_Toc275866377"&gt;Finding cancelUrl&lt;/a&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Url the user is returned to if she cancels a purchase. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;&#xD;
          &lt;a name="_Toc275866378"&gt;Executing a Pipeline on Callback&lt;/a&gt;&#xD;
        &lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Running a pipeline once payment is authorized can be helpful if you need to complete&#xD;
the order once the customer returns to your site. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
To run a “pipeline” once the callback if received and processed, you need to modify&#xD;
the database. If you used the name “Payer” for the payment method name, you can run&#xD;
this SQL query in the SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
UPDATE uCommerce_PaymentMethod SET Pipeline = &lt;b&gt;'Checkout'&lt;/b&gt; WHERE Name = 'Payer' &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
or just edit it manually in SQL Server Management Studio. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_12.png"&gt;&#xD;
            &lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.publicvoid.dk/content/binary/Windows-Live-Writer/4a71f4bae732_C38F/image_thumb_5.png" width="591" height="85"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now the default piplline that comes with uCommerce will be run after each successful&#xD;
callback. This sets the Basket to an Order, gives it an OrderNumber, and other things. &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=3f183df7-fd03-4f2e-802f-65be72813493"&gt;&lt;/img&gt;&lt;/p&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=1_AyAGkoeWc:wsVnFhEwInA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=1_AyAGkoeWc:wsVnFhEwInA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=1_AyAGkoeWc:wsVnFhEwInA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=1_AyAGkoeWc:wsVnFhEwInA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=1_AyAGkoeWc:wsVnFhEwInA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/1_AyAGkoeWc" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,3f183df7-fd03-4f2e-802f-65be72813493.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/SetupUCommerceToIncludePayerAsAPaymentMethod.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.publicvoid.dk/Trackback.aspx?guid=9d76b74f-53e5-4473-b7f3-8d2fd076e78a</trackback:ping>
      <pingback:server>http://www.publicvoid.dk/pingback.aspx</pingback:server>
      <pingback:target>http://www.publicvoid.dk/PermaLink,guid,9d76b74f-53e5-4473-b7f3-8d2fd076e78a.aspx</pingback:target>
      <dc:creator>S�ren Spelling Lund</dc:creator>
      <wfw:comment>http://www.publicvoid.dk/CommentView,guid,9d76b74f-53e5-4473-b7f3-8d2fd076e78a.aspx</wfw:comment>
      <wfw:commentRss>http://www.publicvoid.dk/SyndicationService.asmx/GetEntryCommentsRss?guid=9d76b74f-53e5-4473-b7f3-8d2fd076e78a</wfw:commentRss>
      
      <title>Finding Products Present in Multiple Categories using LINQ to uCommerce</title>
      <guid isPermaLink="false">http://www.publicvoid.dk/PermaLink,guid,9d76b74f-53e5-4473-b7f3-8d2fd076e78a.aspx</guid>
      <link>http://feedproxy.google.com/~r/publicvoid/~3/bvoOXMfuZEY/FindingProductsPresentInMultipleCategoriesUsingLINQToUCommerce.aspx</link>
      <pubDate>Mon, 22 Nov 2010 10:59:22 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Once in a while a question turns up in the &lt;a href="http://our.umbraco.org/projects/website-utilities/ucommerce/ucommerce-support"&gt;uCommerce&#xD;
support forum&lt;/a&gt; which has me stumped for while. As usual with LINQ once the solution&#xD;
presents itself it turns out to be quite simple, dare I say elegant?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So what was the question again? We need a way to find all products present in number&#xD;
of categories as specified by a customer, think search. So we only want products present&#xD;
in both categories A and B, but not products only present in only one or the other.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Here’s how you’d do that:&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #008000"&gt;//&#xD;
These are the categories our products must be present in&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[]&#xD;
categoryNames = { &lt;span style="color: #006080"&gt;"Software"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Support"&lt;/span&gt; };&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;var query = from product &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; Product.All()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;where&lt;/span&gt; product.CategoryProductRelations.Where(x&#xD;
=&amp;gt; categoryNames.Contains(x.Category.Name)).Count() == categoryNames.Count()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;         select product;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
The idea here is to first find all products for the categories we’re looking for.&#xD;
With that done we compare the number of categories found for each product with the&#xD;
number of categories we’re looking for (in our categoryNames array). If they match&#xD;
we’ve got he result we were after in the first place.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The cool thing about this query is that everything is translated to SQL behind the&#xD;
scene so the end result is very efficient execution of the query.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.publicvoid.dk/aggbug.ashx?id=9d76b74f-53e5-4473-b7f3-8d2fd076e78a"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=bvoOXMfuZEY:cfu-ouLFRBc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=bvoOXMfuZEY:cfu-ouLFRBc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=bvoOXMfuZEY:cfu-ouLFRBc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?i=bvoOXMfuZEY:cfu-ouLFRBc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/publicvoid?a=bvoOXMfuZEY:cfu-ouLFRBc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/publicvoid?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/publicvoid/~4/bvoOXMfuZEY" height="1" width="1"/&gt;</description>
      <comments>http://www.publicvoid.dk/CommentView,guid,9d76b74f-53e5-4473-b7f3-8d2fd076e78a.aspx</comments>
      <category>uCommerce</category>
    <feedburner:origLink>http://www.publicvoid.dk/FindingProductsPresentInMultipleCategoriesUsingLINQToUCommerce.aspx</feedburner:origLink></item>
  </channel>
</rss>

