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

<channel>
	<title>Sage Developers&#039; Blog &#187; workspace</title>
	<atom:link href="http://sage.co.uk/devblog/index.php/tag/workspace/feed/" rel="self" type="application/rss+xml" />
	<link>http://sage.co.uk/devblog</link>
	<description>An area for Sage to engage in discussion with its developer community</description>
	<lastBuildDate>Mon, 06 Feb 2012 15:40:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sage 200 Labs &#8211; MetaPack Integration</title>
		<link>http://sage.co.uk/devblog/index.php/2011/03/sage-200-labs-metapack-integration/</link>
		<comments>http://sage.co.uk/devblog/index.php/2011/03/sage-200-labs-metapack-integration/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 09:38:58 +0000</pubDate>
		<dc:creator>paul.gatherar</dc:creator>
				<category><![CDATA[Sage 200 Labs]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Extensibility]]></category>
		<category><![CDATA[labs]]></category>
		<category><![CDATA[sales order processing]]></category>
		<category><![CDATA[workspace]]></category>

		<guid isPermaLink="false">http://sage.co.uk/devblog/?p=639</guid>
		<description><![CDATA[Today we have released a new project into the Sage 200 Labs – an integration with delivery management service provider, MetaPack.
The aim of the project is to demonstrate how to hook into various points of Sage 200 processing using the messaging service. This particular project hooks into the SOP order processing pipeline by subscribing to [...]]]></description>
			<content:encoded><![CDATA[<p>Today we have released a new project into the Sage 200 Labs – an integration with delivery management service provider, <a href="http://www.metapack.com/">MetaPack</a>.</p>
<p>The aim of the project is to demonstrate how to hook into various points of Sage 200 processing using the messaging service. This particular project hooks into the SOP order processing pipeline by subscribing to a message published by Sage 200 after a sales order is saved. There are more extension points published by Sage 200, both in the SOP order processing pipeline, and elsewhere.</p>
<p>Metapack is a provider of delivery management solutions, and it makes its functionality available through a set of web services. There are services to fetch a list of delivery options, for example, and a service to allocate a consignment to a carrier for delivery.</p>
<p>By hooking into the sales order process, the integration module can read information relating to the saved sales order, and construct a request to the MetaPack web services to create a consignment for delivery. It is automatically allocated to the carrier which best fits the requirements of the order. The allocation process can take into account factors such as package size and weight, the pick-up and drop-off locations, and despatch and delivery dates.</p>
<div id="attachment_645" class="wp-caption alignnone" style="width: 668px"><img class="size-full wp-image-645" src="http://sage.co.uk/devblog/wp-content/uploads/2011/03/TrackingWorkspace2.png" alt="A workspace showing order tracking information." width="658" height="477" /><p class="wp-caption-text">A workspace showing order tracking information.</p></div>
<div class="mceTemp">
<p>To read more about the project, and to download the source code, visit the <a href="https://my.sage.co.uk/UK/communities/developers/developer-centres/sage-200/Labs/sop-integration-with-metapack.aspx">MetaPack integration Labs project</a> page (you need to be a registered developer to get there).</div>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fsage.co.uk%2Fdevblog%2Findex.php%2F2011%2F03%2Fsage-200-labs-metapack-integration%2F&amp;linkname=Sage%20200%20Labs%20%26%238211%3B%20MetaPack%20Integration"><img src="http://sage.co.uk/devblog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://sage.co.uk/devblog/index.php/2011/03/sage-200-labs-metapack-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sage 200 Labs</title>
		<link>http://sage.co.uk/devblog/index.php/2010/12/sage-200-labs/</link>
		<comments>http://sage.co.uk/devblog/index.php/2010/12/sage-200-labs/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 12:57:48 +0000</pubDate>
		<dc:creator>mike.goodwin</dc:creator>
				<category><![CDATA[Sage 200 Labs]]></category>
		<category><![CDATA[labs]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[workspace]]></category>

		<guid isPermaLink="false">http://sage.co.uk/devblog/?p=468</guid>
		<description><![CDATA[UPDATE – the Sage 200 2011 release introduced a new naming convention for Content Part Types assemblies required so that we could support a new discovery mechanism. Therefore, if you have already downloaded and installed the package and would like it to run as part of your 2011 release, you will need to find the [...]]]></description>
			<content:encoded><![CDATA[<p><em>UPDATE – the Sage 200 2011 release introduced a new naming convention for Content Part Types assemblies required so that we could support a new discovery mechanism. Therefore, if you have already downloaded and installed the package and would like it to run as part of your 2011 release, you will need to find the CustomMapContentList.dll assembly and rename it to CustomMapContentList.<strong>Plugins</strong>.dll If you have not installed the package the simplest thing to do is rebuild the solution and rename the assembly that is built to CustomMapContentList.Plugins.dll &#8211; you can then repackage the content part type yourself for future distribution.</em></p>
<p>Some people may have heard of a concept called Sage 200 Labs that we floated a while ago. The idea is that we provide an area where developers can download source code for useful, innovative or experimental add-ons to Sage 200 that can then be built on and shipped to customers.</p>
<p>The projects will usually be much bigger and more complete than the samples that we ship with the developer SDK, but at the same time, they are not necessarily release quality. They should provide a really good platform for you to build on though.</p>
<p>The source code is free to download and use and is released under a permissive open source license that is designed to encourage commercial use. Over time we hope that the labs concept will evolve into a genuine open source community with contributions coming from Sage<em> and</em> external developers. From day one though, we expect to be creating the projects ourselves.</p>
<p>Anyway, I&#8217;m very pleased to announce that the <strong>first labs project is now ready!</strong> It is a custom content part type that allows you make workspaces showing Sage 200 data on a map. Like this:</p>
<div class="wp-caption aligncenter" style="width: 635px"><a href="http://www.flickr.com/photos/47358590@N02/4751407849/sizes/z/"><img title="Example workspace with maps" src="http://farm5.static.flickr.com/4135/4751407849_37e4e1d7fe_z.jpg" alt="Example workspace with maps" width="625" height="380" /></a><p class="wp-caption-text">Example workspace with maps</p></div>
<p>To find out more and to download the project source code follow this link to the <a href="https://my.sage.co.uk/UK/communities/developers/developer-centres/sage-200/Labs/custom-map-content-part.aspx" target="_blank">mapping content part landing page</a>. You need to be a registered developer to get there. There is also a <a href="http://developerforum.sage.co.uk/index.php?c=25&amp;sid=7ce304f7f55d8d94ca22c54c0e77acd8" target="_blank">place on the forums</a> where you can comment or ask questions. There is also <a href="https://my.sage.co.uk/UK/communities/developers/developer-centres/sage-200/sage-200-labs.aspx" target="_blank">some general information</a> about the Labs concept.</p>
<p>Hopefully, you will find this interesting and useful. As always, comments and feedback are welcome.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fsage.co.uk%2Fdevblog%2Findex.php%2F2010%2F12%2Fsage-200-labs%2F&amp;linkname=Sage%20200%20Labs"><img src="http://sage.co.uk/devblog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://sage.co.uk/devblog/index.php/2010/12/sage-200-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: Outer joins with LINQ</title>
		<link>http://sage.co.uk/devblog/index.php/2010/04/quick-tip-outer-joins-with-linq/</link>
		<comments>http://sage.co.uk/devblog/index.php/2010/04/quick-tip-outer-joins-with-linq/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 13:23:05 +0000</pubDate>
		<dc:creator>mike.goodwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[outer join]]></category>
		<category><![CDATA[quick tip]]></category>
		<category><![CDATA[workspace]]></category>

		<guid isPermaLink="false">http://sage.co.uk/devblog/?p=410</guid>
		<description><![CDATA[How to do the equivalent of a SQL left outer join in LINQ is not obvious. This post shows how to do it using both lambda sytax and comprehension syntax.]]></description>
			<content:encoded><![CDATA[<p>The syntax for a flat left outer join in LINQ is a bit different from the corresponding SQL. Using Lambda syntax it looks like this.</p>
<p><em>(Note: to make these samples work in <a href="http://www.linqpad.net/" target="_blank">LINQPad </a>you have to remove the references to &#8220;context&#8221;. See <a href="http://sage.co.uk/devblog/?p=54 " target="_blank">this post </a>for details.)</em></p>
<p><code>var q =<br />
context.PCProjectItems<br />
　　　　.GroupJoin<br />
　　　　(<br />
　　　　　　　　context.PCProjectEntries,<br />
　　　　　　　　item=&gt;item.PCProjectItemID,<br />
　　　　　　　　entry=&gt;entry.ProjectItemID,<br />
　　　　　　　　(item,entry)=&gt;new{item.PCProjectItemID,entry}<br />
　　　　)<br />
　　　　.SelectMany<br />
　　　　(<br />
　　　　　　　　itemEntry=&gt;itemEntry.entry.DefaultIfEmpty(),<br />
　　　　　　　　(itemEntry,entry)=&gt;new<br />
　　　　　　　　{<br />
　　　　　　　　　　　　itemEntry.PCProjectItemID,<br />
　　　　　　　　　　　　Goods=(decimal?)entry.GoodsAmountInBaseCurrency<br />
　　　　　　　　}<br />
　　　　);</code></p>
<p>In comprehension syntax, the same query looks like this:</p>
<p><code>var q = from item in context.PCProjectItems<br />
join entry in context.PCProjectEntries<br />
on item.PCProjectItemID equals entry.ProjectItemID into itemEntries<br />
from itemEntry in itemEntries.DefaultIfEmpty()<br />
select new<br />
{<br />
item.PCProjectItemID,<br />
Goods = (decimal?)itemEntry.GoodsAmountInBaseCurrency<br />
};</code></p>
<p>Take your pick which syntax you prefer, or you can mix them in the same query if you like! In any case, both queries result in the same SQL being issued to the database:<br />
<code>SELECT [t0].[PCProjectItemID], [t1].[GoodsAmountInBaseCurrency] AS [Goods]<br />
FROM [PCProjectItem] AS [t0]<br />
LEFT OUTER JOIN [PCProjectEntry]<br />
AS [t1] ON [t0].[PCProjectItemID] = [t1].[ProjectItemID]</code></p>
<p>　　</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fsage.co.uk%2Fdevblog%2Findex.php%2F2010%2F04%2Fquick-tip-outer-joins-with-linq%2F&amp;linkname=Quick%20Tip%3A%20Outer%20joins%20with%20LINQ"><img src="http://sage.co.uk/devblog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://sage.co.uk/devblog/index.php/2010/04/quick-tip-outer-joins-with-linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

