<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Footprints in the snow of a warped mind - eCommerce</title>
    <link>http://blogs.thesitedoctor.co.uk/test/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Tim</copyright>
    <lastBuildDate>Tue, 26 Oct 2010 10:31:55 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>timgaunt@gmail.com</managingEditor>
    <webMaster>timgaunt@gmail.com</webMaster>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/test/Trackback.aspx?guid=f136b7cb-f755-4011-83f2-a1e2192fd666</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/test/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,f136b7cb-f755-4011-83f2-a1e2192fd666.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,f136b7cb-f755-4011-83f2-a1e2192fd666.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/test/SyndicationService.asmx/GetEntryCommentsRss?guid=f136b7cb-f755-4011-83f2-a1e2192fd666</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <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="header[1]" border="0" alt="header[1]" align="right" src="http://blogs.thesitedoctor.co.uk/tim/images/64eb161c0baa_93C0/header1.jpg" width="240" height="320" />Probably
one of the most common features of an ecommerce systems is to "retrieve my details"
when logging in -after all that's why you create an account with the seller isn't
it?
</p>
        <p>
Out of the box, <a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank">uCommerce</a> has
XSLT to retrieve the customer's last x addresses but one thing it didn't do was automatically
re-assign the customer's details when logging in using the built in Umbraco membership
code so we need to work around it ourselves -don't worry, it's not too hard (all the
code is below for you).
</p>
        <h2>Background
</h2>
        <p>
All customer addresses are stored in the uCommerce_Address table automatically, there
should be one unique address per customer however if you're on an earlier release
you may find you have several copies of the same address for each customer -this is
a bug that's been sorted in v1.0.5.0 so upgrade if you can.
</p>
        <p>
Now you'd be forgiven for thinking that you can just select the address from the uCommerce_Address
table and then assign the id to the BillingAddressId property of your purchase order
however if you do that, you'll find you get the error:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d9065df3-b3b8-496d-a9a1-63b491ac4cd1" class="wlWriterEditableSmartContent">
          <pre class="brush: text;">The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_uCommerce_PurchaseOrder_uCommerce_OrderAddress". 
The conflict occurred in database "CommsReadyCMS", table "dbo.uCommerce_OrderAddress", column 'OrderAddressId'.
The statement has been terminated.</pre>
        </div>
        <p>
 
</p>
        <p>
You'll get this because there is also a second table involved -uCommerce_OrderAddress.
uCommerce_OrderAddress stores the actual address used throughout the order process
incase the customer changes an address in the future, the order will always have the
correct address.
</p>
        <h2>The Solution
</h2>
        <p>
Working around this isn't actually too difficult as mentioned before. The easiest
solution is to create a new User Control in Visual Studio (I'll call mine login.ascx)
and hook into the LoggedIn event. Once logged in, get the Umbraco member and from
that, get the customer's billing address.
</p>
        <p>
There's one caveat that I found with uCommerce and that's the way it gets the address.
At the moment, there is a function on customer "GetAddress", this is great however
if you check out the code it calls, it actually gets the customer's first address
from the database -rather than the last address used. I don't think this is a bug
as in most cases the first address you enter is your main address. I'll blog separately
about managing a default address within the members section.
</p>
        <p>
The code below however retrieves the most recently added address from the database
</p>
        <h3>Login.ascx
</h3>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d68c8cf3-8452-49f9-b0bb-8289818fa29a" class="wlWriterEditableSmartContent">
          <pre class="brush: html;">&lt;asp:literal runat="server" ID="litLoggedIn" /&gt;
&lt;asp:literal runat="server" ID="litLoggedOut" /&gt;
&lt;asp:Login runat="server" id="lgnForm" CssClass="checkout-details" 
	DisplayRememberMe="false" TitleText="" OnLoggedIn="lgnForm_LoggedIn"
	UserNameLabelText="Email Address" /&gt;</pre>
        </div>
        <p>
 
</p>
        <h3>Login.ascx.cs
</h3>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:3dd0ffef-512f-4f41-908f-26b340668e45" class="wlWriterEditableSmartContent">
          <pre class="brush: c#;">protected void lgnForm_LoggedIn(object sender, EventArgs e)
{
    //If the user has a basket, wire up the shipping address with their last order details
    var basket = SiteContext.Current.OrderContext.GetBasket(true);
    if (basket != null)
    {
        //Get the customers current order
        var po = basket.PurchaseOrder;
        //Look for a shipping address
        var add = po.GetBillingAddress();
        //We only need to assign the address if there isn't already one assigned to this order
        if (add == null)
        {
            //Get the customer who's just logged in
            var mem = Membership.GetUser(lgnForm.UserName);
            //To be safe check that we have a member
            if (mem != null)
            {
                //Find the customer
                var customer = Customer.ForUmbracoMember(Convert.ToInt32(mem.ProviderUserKey));
                if (customer != null)
                {
                    //Get the customer's most recent address
                    var previousAddress = customer.Addresses.ToList().LastOrDefault(a =&gt; a.AddressName == "Billing");
                    //If you want to get the customer's first address just uncomment this line
                    //var previousAddress = customer.GetAddress("Billing");

                    //Populate the billing address with the address)
                    if (previousAddress != null)
                    {
                        OrderAddress address = new OrderAddress
                                {
                                    FirstName = previousAddress.FirstName,
                                    LastName = previousAddress.LastName,
                                    EmailAddress = previousAddress.EmailAddress,
                                    PhoneNumber = previousAddress.PhoneNumber,
                                    MobilePhoneNumber = previousAddress.MobilePhoneNumber,
                                    CompanyName = previousAddress.CompanyName,
                                    Line1 = previousAddress.Line1,
                                    Line2 = previousAddress.Line2,
                                    PostalCode = previousAddress.PostalCode,
                                    City = previousAddress.City,
                                    State = previousAddress.State,
                                    Attention = previousAddress.Attention,
                                    CountryId = previousAddress.CountryId,
                                    AddressName = "Billing",
                                    OrderId = new int?(po.OrderId)
                                };
                        //Store the address in the database
                        address.Save();
                        //Assign the address to the purchase order
                        po.BillingAddressId = new int?(address.OrderAddressId);
                        //Save the purchase order (shopping cart)
                        po.Save();
                    }
                }
            }
        }
    }
}
</pre>
        </div>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=f136b7cb-f755-4011-83f2-a1e2192fd666" />
      </body>
      <title>Retrieve the customer’s last address when logging into uCommerce</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,f136b7cb-f755-4011-83f2-a1e2192fd666.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/test/2010/10/26/RetrieveTheCustomersLastAddressWhenLoggingIntoUCommerce.aspx</link>
      <pubDate>Tue, 26 Oct 2010 10:31:55 GMT</pubDate>
      <description>&lt;p&gt;
&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="header[1]" border="0" alt="header[1]" align="right" src="http://blogs.thesitedoctor.co.uk/tim/images/64eb161c0baa_93C0/header1.jpg" width="240" height="320" /&gt;Probably
one of the most common features of an ecommerce systems is to "retrieve my details"
when logging in -after all that's why you create an account with the seller isn't
it?
&lt;/p&gt;
&lt;p&gt;
Out of the box, &lt;a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank"&gt;uCommerce&lt;/a&gt; has
XSLT to retrieve the customer's last x addresses but one thing it didn't do was automatically
re-assign the customer's details when logging in using the built in Umbraco membership
code so we need to work around it ourselves -don't worry, it's not too hard (all the
code is below for you).
&lt;/p&gt;
&lt;h2&gt;Background
&lt;/h2&gt;
&lt;p&gt;
All customer addresses are stored in the uCommerce_Address table automatically, there
should be one unique address per customer however if you're on an earlier release
you may find you have several copies of the same address for each customer -this is
a bug that's been sorted in v1.0.5.0 so upgrade if you can.
&lt;/p&gt;
&lt;p&gt;
Now you'd be forgiven for thinking that you can just select the address from the uCommerce_Address
table and then assign the id to the BillingAddressId property of your purchase order
however if you do that, you'll find you get the error:
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d9065df3-b3b8-496d-a9a1-63b491ac4cd1" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: text;"&gt;The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_uCommerce_PurchaseOrder_uCommerce_OrderAddress". 
The conflict occurred in database "CommsReadyCMS", table "dbo.uCommerce_OrderAddress", column 'OrderAddressId'.
The statement has been terminated.&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
You'll get this because there is also a second table involved -uCommerce_OrderAddress.
uCommerce_OrderAddress stores the actual address used throughout the order process
incase the customer changes an address in the future, the order will always have the
correct address.
&lt;/p&gt;
&lt;h2&gt;The Solution
&lt;/h2&gt;
&lt;p&gt;
Working around this isn't actually too difficult as mentioned before. The easiest
solution is to create a new User Control in Visual Studio (I'll call mine login.ascx)
and hook into the LoggedIn event. Once logged in, get the Umbraco member and from
that, get the customer's billing address.
&lt;/p&gt;
&lt;p&gt;
There's one caveat that I found with uCommerce and that's the way it gets the address.
At the moment, there is a function on customer "GetAddress", this is great however
if you check out the code it calls, it actually gets the customer's first address
from the database -rather than the last address used. I don't think this is a bug
as in most cases the first address you enter is your main address. I'll blog separately
about managing a default address within the members section.
&lt;/p&gt;
&lt;p&gt;
The code below however retrieves the most recently added address from the database
&lt;/p&gt;
&lt;h3&gt;Login.ascx
&lt;/h3&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d68c8cf3-8452-49f9-b0bb-8289818fa29a" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: html;"&gt;&amp;lt;asp:literal runat="server" ID="litLoggedIn" /&amp;gt;
&amp;lt;asp:literal runat="server" ID="litLoggedOut" /&amp;gt;
&amp;lt;asp:Login runat="server" id="lgnForm" CssClass="checkout-details" 
	DisplayRememberMe="false" TitleText="" OnLoggedIn="lgnForm_LoggedIn"
	UserNameLabelText="Email Address" /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;h3&gt;Login.ascx.cs
&lt;/h3&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:3dd0ffef-512f-4f41-908f-26b340668e45" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: c#;"&gt;protected void lgnForm_LoggedIn(object sender, EventArgs e)
{
    //If the user has a basket, wire up the shipping address with their last order details
    var basket = SiteContext.Current.OrderContext.GetBasket(true);
    if (basket != null)
    {
        //Get the customers current order
        var po = basket.PurchaseOrder;
        //Look for a shipping address
        var add = po.GetBillingAddress();
        //We only need to assign the address if there isn't already one assigned to this order
        if (add == null)
        {
            //Get the customer who's just logged in
            var mem = Membership.GetUser(lgnForm.UserName);
            //To be safe check that we have a member
            if (mem != null)
            {
                //Find the customer
                var customer = Customer.ForUmbracoMember(Convert.ToInt32(mem.ProviderUserKey));
                if (customer != null)
                {
                    //Get the customer's most recent address
                    var previousAddress = customer.Addresses.ToList().LastOrDefault(a =&amp;gt; a.AddressName == "Billing");
                    //If you want to get the customer's first address just uncomment this line
                    //var previousAddress = customer.GetAddress("Billing");

                    //Populate the billing address with the address)
                    if (previousAddress != null)
                    {
                        OrderAddress address = new OrderAddress
                                {
                                    FirstName = previousAddress.FirstName,
                                    LastName = previousAddress.LastName,
                                    EmailAddress = previousAddress.EmailAddress,
                                    PhoneNumber = previousAddress.PhoneNumber,
                                    MobilePhoneNumber = previousAddress.MobilePhoneNumber,
                                    CompanyName = previousAddress.CompanyName,
                                    Line1 = previousAddress.Line1,
                                    Line2 = previousAddress.Line2,
                                    PostalCode = previousAddress.PostalCode,
                                    City = previousAddress.City,
                                    State = previousAddress.State,
                                    Attention = previousAddress.Attention,
                                    CountryId = previousAddress.CountryId,
                                    AddressName = "Billing",
                                    OrderId = new int?(po.OrderId)
                                };
                        //Store the address in the database
                        address.Save();
                        //Assign the address to the purchase order
                        po.BillingAddressId = new int?(address.OrderAddressId);
                        //Save the purchase order (shopping cart)
                        po.Save();
                    }
                }
            }
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=f136b7cb-f755-4011-83f2-a1e2192fd666" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,f136b7cb-f755-4011-83f2-a1e2192fd666.aspx</comments>
      <category>ASP.Net</category>
      <category>C#</category>
      <category>eCommerce</category>
      <category>The Site Doctor</category>
      <category>uCommerce</category>
      <category>Umbraco</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/test/Trackback.aspx?guid=24a92c7d-a542-453a-ba32-20d44e192d8a</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/test/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,24a92c7d-a542-453a-ba32-20d44e192d8a.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,24a92c7d-a542-453a-ba32-20d44e192d8a.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/test/SyndicationService.asmx/GetEntryCommentsRss?guid=24a92c7d-a542-453a-ba32-20d44e192d8a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After my last <a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank">UCommerce</a> post
on <a href="http://blogs.thesitedoctor.co.uk/tim/2010/10/01/Deleting+Test+Orders+And+Baskets+From+UCommerce.aspx" target="_blank">how
to delete test orders and baskets from UCommerce</a>, Søren suggested I extended the
delete all baskets code to take into account when it was created. As my last code
was relating to deleting test orders/baskets (and so would want to get rid of them
all), I decided to post this one separately.
</p>
        <h2>Delete all baskets older than x days
</h2>
        <p>
To use this, all you need to do is change the @addedBefore parameter to whatever date/time
you want (or just adjust the –7 which represents seven days in the past.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:45241e23-0c18-443a-941a-ce974b893ca9" class="wlWriterEditableSmartContent">
          <pre class="brush: sql;">--Delete all carts purchaseorders and associated data within x days
DECLARE @addedBefore smalldatetime
--By default the script deletes everything older than 7 days
SET @addedBefore = DATEADD(dd, -7, GETDATE())

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber IS NULL AND CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &lt;= @addedBefore
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber IS NULL AND CreatedDate &lt;= @addedBefore

--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN</pre>
        </div>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=24a92c7d-a542-453a-ba32-20d44e192d8a" />
      </body>
      <title>Delete all UCommerce baskets older than x days</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,24a92c7d-a542-453a-ba32-20d44e192d8a.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/test/2010/10/04/DeleteAllUCommerceBasketsOlderThanXDays.aspx</link>
      <pubDate>Mon, 04 Oct 2010 09:14:31 GMT</pubDate>
      <description>&lt;p&gt;
After my last &lt;a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank"&gt;UCommerce&lt;/a&gt; post
on &lt;a href="http://blogs.thesitedoctor.co.uk/tim/2010/10/01/Deleting+Test+Orders+And+Baskets+From+UCommerce.aspx" target="_blank"&gt;how
to delete test orders and baskets from UCommerce&lt;/a&gt;, Søren suggested I extended the
delete all baskets code to take into account when it was created. As my last code
was relating to deleting test orders/baskets (and so would want to get rid of them
all), I decided to post this one separately.
&lt;/p&gt;
&lt;h2&gt;Delete all baskets older than x days
&lt;/h2&gt;
&lt;p&gt;
To use this, all you need to do is change the @addedBefore parameter to whatever date/time
you want (or just adjust the –7 which represents seven days in the past.
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:45241e23-0c18-443a-941a-ce974b893ca9" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql;"&gt;--Delete all carts purchaseorders and associated data within x days
DECLARE @addedBefore smalldatetime
--By default the script deletes everything older than 7 days
SET @addedBefore = DATEADD(dd, -7, GETDATE())

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber IS NULL AND CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL AND b.CreatedDate &amp;lt;= @addedBefore
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber IS NULL AND CreatedDate &amp;lt;= @addedBefore

--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=24a92c7d-a542-453a-ba32-20d44e192d8a" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,24a92c7d-a542-453a-ba32-20d44e192d8a.aspx</comments>
      <category>Development</category>
      <category>eCommerce</category>
      <category>SQL</category>
      <category>SQL Server</category>
      <category>uCommerce</category>
      <category>Umbraco</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/test/Trackback.aspx?guid=fcd3400c-32cd-4b96-819f-ce4adf0cab19</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/test/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,fcd3400c-32cd-4b96-819f-ce4adf0cab19.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,fcd3400c-32cd-4b96-819f-ce4adf0cab19.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/test/SyndicationService.asmx/GetEntryCommentsRss?guid=fcd3400c-32cd-4b96-819f-ce4adf0cab19</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Although Søren has posted a helpful post on how to <a href="http://www.publicvoid.dk/DeletingPurchaseOrdersAndBasketsFromTheDatabaseInUCommerce.aspx" target="_blank">delete
entire purchase orders from the database here</a>, we needed something a little less
“all or nothing” so put the below together.
</p>
        <h2>Delete a specific order id
</h2>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:c810ee8f-ccc4-4cc1-a251-bd161573c8f7" class="wlWriterEditableSmartContent">
          <pre class="brush: sql;">--Delete purchaseorders and associated data based on order id
DECLARE @OrderNumber nvarchar(50)
SET @OrderNumber = 'TEST-40'

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber = @OrderNumber
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber = @OrderNumber

--TODO: Expand this so it checks for other orders
--DELETE a FROM uCommerce_Address a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
--DELETE a FROM uCommerce_Customer a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber

--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN</pre>
        </div>
        <br />
        <p>
 
</p>
        <p>
 
</p>
        <h2>Delete all baskets
</h2>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9b400326-be37-4795-bd43-3a5fd26fa77d" class="wlWriterEditableSmartContent">
          <pre class="brush: sql;">--Delete all carts purchaseorders and associated data

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber IS NULL
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber IS NULL

--TODO: Expand this so it checks for other orders
--DELETE a FROM uCommerce_Address a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.NULL = @NULL
--DELETE a FROM uCommerce_Customer a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.NULL = @NULL


--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN</pre>
        </div>
        <br />
        <p>
 
</p>
        <p>
          <strong>Update:</strong> At the request of Søren, I’ve altered the delete all baskets
post so it allows you to delete all baskets older than a given date, see: <a href="http://blogs.thesitedoctor.co.uk/tim/2010/10/04/Delete+All+UCommerce+Baskets+Older+Than+X+Days.aspx" target="_blank">Delete
all UCommerce baskets older than x days</a></p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=fcd3400c-32cd-4b96-819f-ce4adf0cab19" />
      </body>
      <title>Deleting test orders and baskets from uCommerce</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,fcd3400c-32cd-4b96-819f-ce4adf0cab19.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/test/2010/10/01/DeletingTestOrdersAndBasketsFromUCommerce.aspx</link>
      <pubDate>Fri, 01 Oct 2010 11:53:43 GMT</pubDate>
      <description>&lt;p&gt;
Although Søren has posted a helpful post on how to &lt;a href="http://www.publicvoid.dk/DeletingPurchaseOrdersAndBasketsFromTheDatabaseInUCommerce.aspx" target="_blank"&gt;delete
entire purchase orders from the database here&lt;/a&gt;, we needed something a little less
“all or nothing” so put the below together.
&lt;/p&gt;
&lt;h2&gt;Delete a specific order id
&lt;/h2&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:c810ee8f-ccc4-4cc1-a251-bd161573c8f7" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql;"&gt;--Delete purchaseorders and associated data based on order id
DECLARE @OrderNumber nvarchar(50)
SET @OrderNumber = 'TEST-40'

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber = @OrderNumber
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber = @OrderNumber

--TODO: Expand this so it checks for other orders
--DELETE a FROM uCommerce_Address a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber
--DELETE a FROM uCommerce_Customer a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber = @OrderNumber

--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;h2&gt;Delete all baskets
&lt;/h2&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9b400326-be37-4795-bd43-3a5fd26fa77d" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: sql;"&gt;--Delete all carts purchaseorders and associated data

BEGIN TRAN

UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL WHERE OrderNumber IS NULL
DELETE a FROM uCommerce_Shipment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderAddress a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderProperty a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderLine a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_Payment a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE a FROM uCommerce_OrderStatusAudit a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.OrderNumber IS NULL
DELETE FROM uCommerce_PurchaseOrder WHERE OrderNumber IS NULL

--TODO: Expand this so it checks for other orders
--DELETE a FROM uCommerce_Address a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.NULL = @NULL
--DELETE a FROM uCommerce_Customer a INNER JOIN uCommerce_PurchaseOrder b ON a.OrderId = b.OrderId WHERE b.NULL = @NULL


--Uncomment this
--COMMIT TRAN

--And comment out this
ROLLBACK TRAN&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; At the request of Søren, I’ve altered the delete all baskets
post so it allows you to delete all baskets older than a given date, see: &lt;a href="http://blogs.thesitedoctor.co.uk/tim/2010/10/04/Delete+All+UCommerce+Baskets+Older+Than+X+Days.aspx" target="_blank"&gt;Delete
all UCommerce baskets older than x days&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=fcd3400c-32cd-4b96-819f-ce4adf0cab19" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,fcd3400c-32cd-4b96-819f-ce4adf0cab19.aspx</comments>
      <category>Development</category>
      <category>eCommerce</category>
      <category>SQL</category>
      <category>SQL Server</category>
      <category>uCommerce</category>
      <category>Umbraco</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/test/Trackback.aspx?guid=431f46cd-283c-4fc8-b38c-4bb5de06fdc8</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/test/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,431f46cd-283c-4fc8-b38c-4bb5de06fdc8.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,431f46cd-283c-4fc8-b38c-4bb5de06fdc8.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/test/SyndicationService.asmx/GetEntryCommentsRss?guid=431f46cd-283c-4fc8-b38c-4bb5de06fdc8</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="ucommerce-logo-symbol[1]" border="0" alt="ucommerce-logo-symbol[1]" align="right" src="http://blogs.thesitedoctor.co.uk/tim/images/GettingstartedwithuCommerce_C43D/ucommercelogosymbol1.png" width="260" height="260" />I
thought seeing as <a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank">uCommerce</a> is
now an actual product I would start to overview an install/configuration of <a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank">uCommerce</a> assuming
no prior knowledge of <a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank">uCommerce</a>.
Firstly, let me start of by saying that once you've got your head around uCommerce
and some of it's complexities, you'll find it a fantastic product that makes creating
a new ecommerce website as easy as setting up a standard Umbraco website. It is still
missing a few features, but you can easily work around these with a bit of custom
XSLT/C#.
</p>
        <p>
Ok, back to setting up your first uCommerce website. I've grouped these into what
I feel are logical sections but if I've missed something, please let me know.
</p>
        <h2>1. Install the uCommerce Package
</h2>
        <p>
If you've not already done so, go to the <a href="http://ucommerce.dk/en/get-it-now/download.aspx">uCommerce
Download page</a> and download the uCommerce package (at time of writing, I'm using
1.0.4.2) and then download the uCommerce Store package (currently 1.0.1.2).
</p>
        <p>
Install the uCommerce package as you do any other package in Umbraco. Once installed
you'll be able to install the store package.
</p>
        <p>
Assuming all your permissions on your Umbraco install are correct, refresh your browser
and you should have a new section "Commerce". If they're not right, you'll
be told to add a few web.config settings.
</p>
        <h2>2. Wire up the catalog
</h2>
        <p>
This is the step that I didn’t “do” when we first got started and it turns out it’s
one of the most important steps as it joins the uCommerce catalog to the front end.
</p>
        <ol>
          <li>
Go to your Umbraco "Content" section 
</li>
          <li>
Right click on the page you would like to be the store's "home" page (in
the example store, this would be "Shop") 
</li>
          <li>
Click "Manage hostnames" (see figure below) 
<br /><img alt="Manage Hostnames Context Menu" src="http://blogs.thesitedoctor.co.uk/tim/images/1-ManageHostnames.png" width="235" height="304" /></li>
          <li>
Enter your hostname (the domain name the site runs on) in the "Domain" box
and then choose the default language for the website 
<br /><img alt="Manage Hostnames screen" src="http://blogs.thesitedoctor.co.uk/tim/images/1-ManageHostnames2.png" width="539" height="457" /></li>
          <li>
Click "Add new Domain" and then "Close this window" 
</li>
          <li>
Click the "Commerce" section button (in the bottom left) 
</li>
          <li>
Click the little arrow to the left of "Product Catalog" 
</li>
          <li>
Left click the relevant catalog (if you've installed the store package this will be
"uCommerce") 
</li>
          <li>
Select your new domain from the "Host name" drop down list 
<br /><img alt="Manage Hostnames screen" src="http://blogs.thesitedoctor.co.uk/tim/images/2-AssignHostnames.png" width="541" height="127" /></li>
          <li>
Click the save disk button in the top left 
<br /></li>
        </ol>
        <h2>3. Setup Your Product Definitions
</h2>
        <p>
A “Product Definition” is uCommerce’s concept of document types, it allows you to
add additional information to the product. If you’re using the uCommerce starter store,
you’ll get a couple of product definitions out of the box –software and support. At
the moment, you can't add additional properties through the uCommerce back end (i.e.
if you wanted to add additional information such as Meta Keywords/Descriptions etc
-I'll cover how we got around this in a later post) but there are a number of default
the category/product properties (I've put their XML reference in brackets where relevant):
</p>
        <h3>uCommerce Category Properties
</h3>
        <ul>
          <li>
Image (@image) 
</li>
          <li>
Display Name (@displayName) 
</li>
          <li>
Description (@description) 
</li>
        </ul>
        <p>
The default XML looks like this:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a578f360-4bab-4a8d-878a-665fb6791381" class="wlWriterEditableSmartContent">
          <pre class="brush: xml;">&lt;category parentCategoryId="" parentCategoryName="" index="0" id="67" name="Software" displayName="Software" displayOnSite="True" description="" image="" /&gt;</pre>
        </div>
        <h3>uCommerce Product Properties
</h3>
        <ul>
          <li>
SKU (@sku) 
</li>
          <li>
Internal name 
</li>
          <li>
Display on web site (@<span class="brush: xml;">displayOnSite</span>) 
</li>
          <li>
Allow ordering (@<span class="brush: xml;">allowOrdering</span>) 
</li>
          <li>
Thumbnail (@<span class="brush: xml;">thumbnailImage</span>) 
</li>
          <li>
Primary image (@<span class="brush: xml;">primaryImage</span>) 
</li>
          <li>
Display name (@<span class="brush: xml;">displayName</span>) 
</li>
          <li>
Short description (@<span class="brush: xml;">shortDescription</span>) 
</li>
          <li>
Long description (@<span class="brush: xml;">longDescription</span>) 
</li>
        </ul>
        <p>
The default XML looks like this (the variants are not standard but are there because
they're setup as part of the store package):
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:8384e736-156c-4085-9c18-c79db697c4be" class="wlWriterEditableSmartContent">
          <pre class="brush: xml;">&lt;product index="0" sku="100-000-001" displayName="uCommerce 1.0 RTM" shortDescription="uCommerce is a full featured e-commerce platform with content management features powered by Umbraco. Everything you need to build a killer e-commerce solution for your clients!" longDescription="uCommerce is fully integrated with the content management system Umbraco, which provides not only the frontend renderendering enabling you to create beautifully designed stores, but also the back office capabilities where you configure and cuztomize the store to your liking.&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;uCommerce_ foundations provide the basis for an e-commerce solution. Each foundation addresses a specific need for providing a full e-commerce solution to your clients. foundations in the box include a Catalog Foundation, a Transactions Foundation, and an Analytics Foundation.&amp;#xD;&amp;#xA;&amp;#xD;&amp;#xA;Each of the foundations within uCommerce_ are fully configurable right in Umbraco. No need to switch between a multitude of tools to manage your stores. It's all available as you would expect in one convenient location." thumbnailImage="1097" primaryImage="1097" allowOrdering="True" isVariant="False" displayOnSite="True" hasVariants="True" price="3495.0000" currency="EUR"&gt;
  &lt;variants&gt;
    &lt;product index="0" sku="100-000-001" displayName="Developer Edition" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="001" price="0.0000" currency="EUR" Downloadable="on" License="Dev" /&gt;
    &lt;product index="1" sku="100-000-001" displayName="30 Days Evaluation" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="002" price="3495.0000" currency="EUR" Downloadable="on" License="Eval" /&gt;
    &lt;product index="2" sku="100-000-001" displayName="Go-Live" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="003" price="3495.0000" currency="EUR" Downloadable="on" License="Live" /&gt;
  &lt;/variants&gt;
&lt;/product&gt;</pre>
        </div>
        <p>
Adding additional product properties is simple.
</p>
        <ol>
          <li>
Click the "Commerce" section button 
</li>
          <li>
Navigate to: Settings --&gt; Catalog --&gt; Product Definitions 
</li>
          <li>
Choose the product definition you would like to edit (or create a new one in the same
way that you would with Umbraco document types) 
</li>
          <li>
Right click the product definition you need to add extra properties to and click "Create" 
</li>
          <li>
Type in a name for your new property i.e. Size 
</li>
          <li>
Choose the Data Type for the property (if you need something that's not listed see
"Creating your own Data Type" below): 
<ul><li>
ShortText -A textbox 
</li><li>
LongText -A text area 
</li><li>
Number -Beleive it or not, a numeric value 
</li><li>
Boolean -A checkbox 
</li><li>
Image -A media selector 
</li></ul></li>
          <li>
Click the "Create" button 
</li>
          <li>
You can now choose a few additional options for the new property including how it
should be shown to the user and whether it's Multilingual. 
<ul><li>
Name -the text used as the label in the uCommerce product editor (it's also the name
of the attribute on the XML that will contain it's value) 
</li><li>
Data Type -the type of control to render in the uCommerce product editor 
</li><li>
Multilingual -whether the control should be shown on the "Common" tab of
the uCommerce product editor or the language specific tab 
</li><li>
Display On Web Site -A flag that's sent out in the XML so you can decide whether or
not to show it on the website 
</li><li>
Variant Property -Whether this should appear as a table column heading under the "Variants"
tab (I'll go into variants more in a later post) 
<br /><strong>Note:</strong> Do not set Multilingual and Variant property to both true as
at the moment, it won't be shown in the uCommerce product editor -you've been warned! 
</li><li>
Render in Editor -Whether the control should be shown in the uCommerce product editor
screen or hidden from the administrator (i.e. for data you want to use internally
only and should be editable) 
</li></ul></li>
          <li>
Finally you'll need to enter in a Display Name for the various languages. This is
what's shown to the user if you dynamically pull through the various properties on
the product details page. 
</li>
        </ol>
        <h2>4. Creating Your Own Data Type
</h2>
        <p>
Now, you may be thinking that using that set of data types is a little limiting for
something like "Size" or "Colour" and you might want to display
something a little more flexible to the user -such as a drop down list. This is easy
enough:
</p>
        <ol>
          <li>
Right click the "Data Types" node 
</li>
          <li>
Enter a name i.e. "Size" 
</li>
          <li>
Choose the definition for the Data Type (for size we will use "Enum") 
</li>
          <li>
Save and Refresh the "Data Types" node 
</li>
          <li>
Right click your new Data Type and click Create 
</li>
          <li>
Enter your Option's value i.e. "Small" 
</li>
          <li>
Repeat 5-6 until all your options are set i.e. add "Medium" and "Large" 
</li>
        </ol>
        <p>
          <strong>Note:</strong> At the moment, the enum values cannot be re-ordered through
the UI so make sure you add them in the order you want them in the editor!
</p>
        <h2>5. Load Your Catalog
</h2>
        <p>
Once you've finished creating your various product types, it's time to create your
catalog. Creating categories and products within uCommerce is as simple as creating
pages in Umbraco. Using the same right click menu concept you can create nested categories
as deep as your catalog requires. You can add products and categories at any level
by choosing either the "Category" or "Product" radio button and
choosing your product type.
</p>
        <h2>6. You're Done!
</h2>
        <p>
Assuming you've followed the steps above, you should now have a (fairly basic) store
setup. Go to your site's homepage and click the "uCommerce" menu item and
voila, your categories and products should be listed.
</p>
        <p>
Not getting the categories you were expecting? Perform the helpful xsl “copy-of” trick
within either the "RootCategories[XSLT].xslt" file or "Category[XSLT].xslt"
file:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:cb6e146f-4afc-4025-8b37-a6e647a6b248" class="wlWriterEditableSmartContent">
          <pre class="brush: xml;">&lt;pre&gt;&lt;xsl:copy-of select="$categories" /&gt;&lt;/pre&gt;</pre>
        </div>
        <p>
and then have a look at the output:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:b812a9c5-51a5-404b-8b41-aee3b4d05fa3" class="wlWriterEditableSmartContent">
          <pre class="brush: xml;">&lt;errors&gt;&lt;error&gt;No product catalog group found supporting the current URL.&lt;/error&gt;&lt;/errors&gt;</pre>
        </div>
        <p>
If you're getting the above error, currently (and this may be a misunderstanding/changed
later) you have to have the catalog and catalogue group names the same –in the example
site, they’re both “uCommerce”.
</p>
        <p>
As I think the concept store offered with Software/Support isn't particularly real-world,
I'm going to work on creating a basic store that you can use to better understand
uCommerce and it's intricacies.
</p>
        <p>
Check back soon as I'll be posting an overview of the checkout process, the various
XSLT files and integrating payment gateways into uCommerce (initially SagePay, PayPoint,
WorldPay and PayPal). 
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=431f46cd-283c-4fc8-b38c-4bb5de06fdc8" />
      </body>
      <title>Getting started with uCommerce</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/test/PermaLink,guid,431f46cd-283c-4fc8-b38c-4bb5de06fdc8.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/test/2010/08/17/GettingStartedWithUCommerce.aspx</link>
      <pubDate>Tue, 17 Aug 2010 16:49:45 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="ucommerce-logo-symbol[1]" border="0" alt="ucommerce-logo-symbol[1]" align="right" src="http://blogs.thesitedoctor.co.uk/tim/images/GettingstartedwithuCommerce_C43D/ucommercelogosymbol1.png" width="260" height="260" /&gt;I
thought seeing as &lt;a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank"&gt;uCommerce&lt;/a&gt; is
now an actual product I would start to overview an install/configuration of &lt;a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank"&gt;uCommerce&lt;/a&gt; assuming
no prior knowledge of &lt;a title="e-commerce package for Umbraco" href="http://www.ucommerce.dk" target="_blank"&gt;uCommerce&lt;/a&gt;.
Firstly, let me start of by saying that once you've got your head around uCommerce
and some of it's complexities, you'll find it a fantastic product that makes creating
a new ecommerce website as easy as setting up a standard Umbraco website. It is still
missing a few features, but you can easily work around these with a bit of custom
XSLT/C#.
&lt;/p&gt;
&lt;p&gt;
Ok, back to setting up your first uCommerce website. I've grouped these into what
I feel are logical sections but if I've missed something, please let me know.
&lt;/p&gt;
&lt;h2&gt;1. Install the uCommerce Package
&lt;/h2&gt;
&lt;p&gt;
If you've not already done so, go to the &lt;a href="http://ucommerce.dk/en/get-it-now/download.aspx"&gt;uCommerce
Download page&lt;/a&gt; and download the uCommerce package (at time of writing, I'm using
1.0.4.2) and then download the uCommerce Store package (currently 1.0.1.2).
&lt;/p&gt;
&lt;p&gt;
Install the uCommerce package as you do any other package in Umbraco. Once installed
you'll be able to install the store package.
&lt;/p&gt;
&lt;p&gt;
Assuming all your permissions on your Umbraco install are correct, refresh your browser
and you should have a new section &amp;quot;Commerce&amp;quot;. If they're not right, you'll
be told to add a few web.config settings.
&lt;/p&gt;
&lt;h2&gt;2. Wire up the catalog
&lt;/h2&gt;
&lt;p&gt;
This is the step that I didn’t “do” when we first got started and it turns out it’s
one of the most important steps as it joins the uCommerce catalog to the front end.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Go to your Umbraco &amp;quot;Content&amp;quot; section 
&lt;/li&gt;
&lt;li&gt;
Right click on the page you would like to be the store's &amp;quot;home&amp;quot; page (in
the example store, this would be &amp;quot;Shop&amp;quot;) 
&lt;/li&gt;
&lt;li&gt;
Click &amp;quot;Manage hostnames&amp;quot; (see figure below) 
&lt;br /&gt;
&lt;img alt="Manage Hostnames Context Menu" src="http://blogs.thesitedoctor.co.uk/tim/images/1-ManageHostnames.png" width="235" height="304" /&gt; 
&lt;/li&gt;
&lt;li&gt;
Enter your hostname (the domain name the site runs on) in the &amp;quot;Domain&amp;quot; box
and then choose the default language for the website 
&lt;br /&gt;
&lt;img alt="Manage Hostnames screen" src="http://blogs.thesitedoctor.co.uk/tim/images/1-ManageHostnames2.png" width="539" height="457" /&gt; 
&lt;/li&gt;
&lt;li&gt;
Click &amp;quot;Add new Domain&amp;quot; and then &amp;quot;Close this window&amp;quot; 
&lt;/li&gt;
&lt;li&gt;
Click the &amp;quot;Commerce&amp;quot; section button (in the bottom left) 
&lt;/li&gt;
&lt;li&gt;
Click the little arrow to the left of &amp;quot;Product Catalog&amp;quot; 
&lt;/li&gt;
&lt;li&gt;
Left click the relevant catalog (if you've installed the store package this will be
&amp;quot;uCommerce&amp;quot;) 
&lt;/li&gt;
&lt;li&gt;
Select your new domain from the &amp;quot;Host name&amp;quot; drop down list 
&lt;br /&gt;
&lt;img alt="Manage Hostnames screen" src="http://blogs.thesitedoctor.co.uk/tim/images/2-AssignHostnames.png" width="541" height="127" /&gt; 
&lt;/li&gt;
&lt;li&gt;
Click the save disk button in the top left 
&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;3. Setup Your Product Definitions
&lt;/h2&gt;
&lt;p&gt;
A “Product Definition” is uCommerce’s concept of document types, it allows you to
add additional information to the product. If you’re using the uCommerce starter store,
you’ll get a couple of product definitions out of the box –software and support. At
the moment, you can't add additional properties through the uCommerce back end (i.e.
if you wanted to add additional information such as Meta Keywords/Descriptions etc
-I'll cover how we got around this in a later post) but there are a number of default
the category/product properties (I've put their XML reference in brackets where relevant):
&lt;/p&gt;
&lt;h3&gt;uCommerce Category Properties
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Image (@image) 
&lt;/li&gt;
&lt;li&gt;
Display Name (@displayName) 
&lt;/li&gt;
&lt;li&gt;
Description (@description) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The default XML looks like this:
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a578f360-4bab-4a8d-878a-665fb6791381" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;category parentCategoryId="" parentCategoryName="" index="0" id="67" name="Software" displayName="Software" displayOnSite="True" description="" image="" /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;uCommerce Product Properties
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
SKU (@sku) 
&lt;/li&gt;
&lt;li&gt;
Internal name 
&lt;/li&gt;
&lt;li&gt;
Display on web site (@&lt;span class="brush: xml;"&gt;displayOnSite&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Allow ordering (@&lt;span class="brush: xml;"&gt;allowOrdering&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Thumbnail (@&lt;span class="brush: xml;"&gt;thumbnailImage&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Primary image (@&lt;span class="brush: xml;"&gt;primaryImage&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Display name (@&lt;span class="brush: xml;"&gt;displayName&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Short description (@&lt;span class="brush: xml;"&gt;shortDescription&lt;/span&gt;) 
&lt;/li&gt;
&lt;li&gt;
Long description (@&lt;span class="brush: xml;"&gt;longDescription&lt;/span&gt;) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The default XML looks like this (the variants are not standard but are there because
they're setup as part of the store package):
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:8384e736-156c-4085-9c18-c79db697c4be" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;product index="0" sku="100-000-001" displayName="uCommerce 1.0 RTM" shortDescription="uCommerce is a full featured e-commerce platform with content management features powered by Umbraco. Everything you need to build a killer e-commerce solution for your clients!" longDescription="uCommerce is fully integrated with the content management system Umbraco, which provides not only the frontend renderendering enabling you to create beautifully designed stores, but also the back office capabilities where you configure and cuztomize the store to your liking.&amp;amp;#xD;&amp;amp;#xA;&amp;amp;#xD;&amp;amp;#xA;uCommerce_ foundations provide the basis for an e-commerce solution. Each foundation addresses a specific need for providing a full e-commerce solution to your clients. foundations in the box include a Catalog Foundation, a Transactions Foundation, and an Analytics Foundation.&amp;amp;#xD;&amp;amp;#xA;&amp;amp;#xD;&amp;amp;#xA;Each of the foundations within uCommerce_ are fully configurable right in Umbraco. No need to switch between a multitude of tools to manage your stores. It's all available as you would expect in one convenient location." thumbnailImage="1097" primaryImage="1097" allowOrdering="True" isVariant="False" displayOnSite="True" hasVariants="True" price="3495.0000" currency="EUR"&amp;gt;
  &amp;lt;variants&amp;gt;
    &amp;lt;product index="0" sku="100-000-001" displayName="Developer Edition" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="001" price="0.0000" currency="EUR" Downloadable="on" License="Dev" /&amp;gt;
    &amp;lt;product index="1" sku="100-000-001" displayName="30 Days Evaluation" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="002" price="3495.0000" currency="EUR" Downloadable="on" License="Eval" /&amp;gt;
    &amp;lt;product index="2" sku="100-000-001" displayName="Go-Live" shortDescription="" longDescription="" thumbnailImage="0" primaryImage="0" allowOrdering="False" isVariant="True" displayOnSite="False" hasVariants="False" variantSku="003" price="3495.0000" currency="EUR" Downloadable="on" License="Live" /&amp;gt;
  &amp;lt;/variants&amp;gt;
&amp;lt;/product&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Adding additional product properties is simple.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Click the &amp;quot;Commerce&amp;quot; section button 
&lt;/li&gt;
&lt;li&gt;
Navigate to: Settings --&amp;gt; Catalog --&amp;gt; Product Definitions 
&lt;/li&gt;
&lt;li&gt;
Choose the product definition you would like to edit (or create a new one in the same
way that you would with Umbraco document types) 
&lt;/li&gt;
&lt;li&gt;
Right click the product definition you need to add extra properties to and click &amp;quot;Create&amp;quot; 
&lt;/li&gt;
&lt;li&gt;
Type in a name for your new property i.e. Size 
&lt;/li&gt;
&lt;li&gt;
Choose the Data Type for the property (if you need something that's not listed see
&amp;quot;Creating your own Data Type&amp;quot; below): 
&lt;ul&gt;
&lt;li&gt;
ShortText -A textbox 
&lt;/li&gt;
&lt;li&gt;
LongText -A text area 
&lt;/li&gt;
&lt;li&gt;
Number -Beleive it or not, a numeric value 
&lt;/li&gt;
&lt;li&gt;
Boolean -A checkbox 
&lt;/li&gt;
&lt;li&gt;
Image -A media selector 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Click the &amp;quot;Create&amp;quot; button 
&lt;/li&gt;
&lt;li&gt;
You can now choose a few additional options for the new property including how it
should be shown to the user and whether it's Multilingual. 
&lt;ul&gt;
&lt;li&gt;
Name -the text used as the label in the uCommerce product editor (it's also the name
of the attribute on the XML that will contain it's value) 
&lt;/li&gt;
&lt;li&gt;
Data Type -the type of control to render in the uCommerce product editor 
&lt;/li&gt;
&lt;li&gt;
Multilingual -whether the control should be shown on the &amp;quot;Common&amp;quot; tab of
the uCommerce product editor or the language specific tab 
&lt;/li&gt;
&lt;li&gt;
Display On Web Site -A flag that's sent out in the XML so you can decide whether or
not to show it on the website 
&lt;/li&gt;
&lt;li&gt;
Variant Property -Whether this should appear as a table column heading under the &amp;quot;Variants&amp;quot;
tab (I'll go into variants more in a later post) 
&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; Do not set Multilingual and Variant property to both true as
at the moment, it won't be shown in the uCommerce product editor -you've been warned! 
&lt;/li&gt;
&lt;li&gt;
Render in Editor -Whether the control should be shown in the uCommerce product editor
screen or hidden from the administrator (i.e. for data you want to use internally
only and should be editable) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Finally you'll need to enter in a Display Name for the various languages. This is
what's shown to the user if you dynamically pull through the various properties on
the product details page. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. Creating Your Own Data Type
&lt;/h2&gt;
&lt;p&gt;
Now, you may be thinking that using that set of data types is a little limiting for
something like &amp;quot;Size&amp;quot; or &amp;quot;Colour&amp;quot; and you might want to display
something a little more flexible to the user -such as a drop down list. This is easy
enough:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Right click the &amp;quot;Data Types&amp;quot; node 
&lt;/li&gt;
&lt;li&gt;
Enter a name i.e. &amp;quot;Size&amp;quot; 
&lt;/li&gt;
&lt;li&gt;
Choose the definition for the Data Type (for size we will use &amp;quot;Enum&amp;quot;) 
&lt;/li&gt;
&lt;li&gt;
Save and Refresh the &amp;quot;Data Types&amp;quot; node 
&lt;/li&gt;
&lt;li&gt;
Right click your new Data Type and click Create 
&lt;/li&gt;
&lt;li&gt;
Enter your Option's value i.e. &amp;quot;Small&amp;quot; 
&lt;/li&gt;
&lt;li&gt;
Repeat 5-6 until all your options are set i.e. add &amp;quot;Medium&amp;quot; and &amp;quot;Large&amp;quot; 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Note:&lt;/strong&gt; At the moment, the enum values cannot be re-ordered through
the UI so make sure you add them in the order you want them in the editor!
&lt;/p&gt;
&lt;h2&gt;5. Load Your Catalog
&lt;/h2&gt;
&lt;p&gt;
Once you've finished creating your various product types, it's time to create your
catalog. Creating categories and products within uCommerce is as simple as creating
pages in Umbraco. Using the same right click menu concept you can create nested categories
as deep as your catalog requires. You can add products and categories at any level
by choosing either the &amp;quot;Category&amp;quot; or &amp;quot;Product&amp;quot; radio button and
choosing your product type.
&lt;/p&gt;
&lt;h2&gt;6. You're Done!
&lt;/h2&gt;
&lt;p&gt;
Assuming you've followed the steps above, you should now have a (fairly basic) store
setup. Go to your site's homepage and click the &amp;quot;uCommerce&amp;quot; menu item and
voila, your categories and products should be listed.
&lt;/p&gt;
&lt;p&gt;
Not getting the categories you were expecting? Perform the helpful xsl “copy-of” trick
within either the &amp;quot;RootCategories[XSLT].xslt&amp;quot; file or &amp;quot;Category[XSLT].xslt&amp;quot;
file:
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:cb6e146f-4afc-4025-8b37-a6e647a6b248" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;pre&amp;gt;&amp;lt;xsl:copy-of select="$categories" /&amp;gt;&amp;lt;/pre&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
and then have a look at the output:
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:b812a9c5-51a5-404b-8b41-aee3b4d05fa3" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;errors&amp;gt;&amp;lt;error&amp;gt;No product catalog group found supporting the current URL.&amp;lt;/error&amp;gt;&amp;lt;/errors&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
If you're getting the above error, currently (and this may be a misunderstanding/changed
later) you have to have the catalog and catalogue group names the same –in the example
site, they’re both “uCommerce”.
&lt;/p&gt;
&lt;p&gt;
As I think the concept store offered with Software/Support isn't particularly real-world,
I'm going to work on creating a basic store that you can use to better understand
uCommerce and it's intricacies.
&lt;/p&gt;
&lt;p&gt;
Check back soon as I'll be posting an overview of the checkout process, the various
XSLT files and integrating payment gateways into uCommerce (initially SagePay, PayPoint,
WorldPay and PayPal). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/test/aggbug.ashx?id=431f46cd-283c-4fc8-b38c-4bb5de06fdc8" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/test/CommentView,guid,431f46cd-283c-4fc8-b38c-4bb5de06fdc8.aspx</comments>
      <category>ASP.Net</category>
      <category>eCommerce</category>
      <category>uCommerce</category>
      <category>Umbraco</category>
      <category>Web Development</category>
    </item>
  </channel>
</rss>