<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>OpenLandscape</title>
	<atom:link href="http://openlandscape.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://openlandscape.wordpress.com</link>
	<description>Living and Solving The Mystery</description>
	<lastBuildDate>Mon, 23 Nov 2009 10:47:51 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='openlandscape.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/b5011a823418bd339c200ea69e4caa75?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>OpenLandscape</title>
		<link>http://openlandscape.wordpress.com</link>
	</image>
			<item>
		<title>Deploying SharePoint Features To A Multiple Server Farm</title>
		<link>http://openlandscape.wordpress.com/2009/11/18/deploying-sharepoint-features-to-multiple-server-farm/</link>
		<comments>http://openlandscape.wordpress.com/2009/11/18/deploying-sharepoint-features-to-multiple-server-farm/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 09:32:19 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[EnterprisePortal]]></category>
		<category><![CDATA[SystemAdmin]]></category>
		<category><![CDATA[MOSS 2007]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[stsadm]]></category>
		<category><![CDATA[Visual Studio 2008 extensions for Windows SharePoint Services]]></category>
		<category><![CDATA[VSeWSS]]></category>
		<category><![CDATA[Windows SharePoint Services]]></category>
		<category><![CDATA[WSS]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=377</guid>
		<description><![CDATA[I recently deployed some features, mainly web parts, to a client&#8217;s load balanced SharePoint farm. The features were created with the Visual Studio 2008 extensions for Windows SharePoint Services. When using features created with VSeWSS they work fine on a simple, non-load balanced, single server farm.
However when I tried to run the setup file produced [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=377&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently deployed some features, mainly web parts, to a client&#8217;s load balanced SharePoint farm. The features were created with the <strong><a title="Visual Studio 2008 extensions for Windows SharePoint Services" href="http://www.microsoft.com/downloads/details.aspx?familyid=FB9D4B85-DA2A-432E-91FB-D505199C49F6&amp;displaylang=en" target="_blank">Visual Studio 2008 extensions for Windows SharePoint Services</a></strong>. When using features created with <strong>VSeWSS </strong>they work fine on a simple, non-load balanced, single server farm.</p>
<p>However when I tried to run the setup file produced by VSeWSS I got an error like &#8220;the feature is not available on the farm&#8221;. The reason is related to the following sentence from the stsadm <a title="Installfeature: Stsadm operation (Office SharePoint Server)" href="http://technet.microsoft.com/en-us/library/cc263123.aspx" target="_blank">installfeature operation&#8217;s help documentation</a>: <em>&#8220;Farm-scoped features are also automatically activated during this [installfeature] stage. Other features might still need to be activated.&#8221;</em></p>
<p>Now, if you open the feature.xml file, created by VSeWSS and look at the Feature element, you&#8217;ll see it has the following attribute: Scope=&#8221;Site&#8221; .</p>
<p><em>This means that the feature is defined at the Site level, and that it needs to be installed and then <a title="Activatefeature: Stsadm operation (Office SharePoint Server)" href="http://technet.microsoft.com/en-us/library/cc262692.aspx" target="_blank">activated</a> on a multiple server farm configuration. </em>The standard VSeWSS setup.bat only takes care of activating the feature: &#8220;%SPAdminTool%&#8221; -o <strong>activatefeature</strong> -id 87f20850-ad52-4785-a680-195942270020 -url %TargetSiteUrl% . Whoops, that will indeed cause some problems.</p>
<h2>Solution</h2>
<p><em>First install the feature before activating it.</em> There is one little gotcha here. Stsadm&#8217;s installfeature operation does not provide an option to specify the feature&#8217;s GUID. It only supports filename or name, and as you can expect VSeWSS only uses features&#8217; GUIDs. So we have to modify setup.bat to use the file name, instead of the GUID and add the installfeature command for each feature:</p>
<p>&#8220;%SPAdminTool%&#8221; -o <strong>installfeature -filename</strong> WebPartFeature\feature.xml<br />
&#8220;%SPAdminTool%&#8221; -o <strong>activatefeature -name</strong> WebPartFeature -url %TargetSiteUrl%</p>
<p>Cool, problem solved! If you don&#8217;t know this before hand, it can take a while to figure out.</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<h1>Visual Studio 2008 extensions for Windows SharePoint Services</h1>
</div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=377&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/11/18/deploying-sharepoint-features-to-multiple-server-farm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>South Africa To Remain Stagnant On The Edge Of Socio Economic Unrest</title>
		<link>http://openlandscape.wordpress.com/2009/11/12/south-africa-to-remain-stagnant-on-the-edge-of-socio-economic-unrest/</link>
		<comments>http://openlandscape.wordpress.com/2009/11/12/south-africa-to-remain-stagnant-on-the-edge-of-socio-economic-unrest/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:22:38 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Finance, Economics & Investing]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=307</guid>
		<description><![CDATA[Headlines like &#8220;clothing workers to reject new wage offer&#8221; truly highlight the harsh reality of the current and future South African economic landscape. On the one hand one cannot help but to feel truly sorry for these factory workers. Surviving on a R1000 cannot be easy.
Every industry in South Africa have striked over the past [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=307&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Headlines like <a title="clothing workers to reject new wage offer" href="http://www.timeslive.co.za/news/local/article121330.ece" target="_blank">&#8220;clothing workers to reject new wage offer&#8221;</a> truly highlight the harsh reality of the current and future South African economic landscape. On the one hand one cannot help but to feel truly sorry for these factory workers. Surviving on a R1000 cannot be easy.</p>
<p>Every industry in South Africa have striked over the past 6 months, or are planning to do so soon. And I can understand why people would want to strike, and demand better pay. But what is surprising is the timing of the strikes and the extent of the demands: Double digit wage increases when the CPI is only 8%, and the rest of the world gets significant pay cuts, or worse, laid off. One would expect a sensible partner of the economic ecosystem to support businesses to keep their doors open, and ultimately save jobs. But instead trade unions come around at the most difficult phase of the business cycle, demanding even more from business, that is already on its knees from the recession.</p>
<p>This clearly demonstrates the complete disconnect between labour and business in South Africa, and how the one views the other as an enemy, rather than seeing themselves as different sides of the solution. Labour&#8217;s ideas and actions are still steeped in Marxist ideology, where free enterprise is the villan always out to abuse poor factory workers (and this often is the case). South African trade unions also sell the fable that a welfare state is the answer to South Africa&#8217;s poor.</p>
<h2>Wellfare State</h2>
<p>Many citizens and trade unions hold the believe that government should provide housing, healthcare, infrastructure, and even jobs. The big problem is that the positive effects of government expenditure are always followed, and often overtaken, by formidable negative consequences. I&#8217;m not even referring to the huge problems of corruption, favoritism, and inefficiency that is often associated with government. Why do I make such an upsetting assertion against our much beloved government?</p>
<p><a href="http://mises.org/story/3535" target="_blank">The big problem</a> with government is that it requires external funding for anything it wants to do. Ultimately it is dependent on individuals and companies for its funding. The more capital government has, the less someone else has. The reason for this is that government produces little of value, and almost never makes a profit, if it is producing and selling something. So where does government get the funding it requires to fund its bureaucratic agenda.</p>
<p>The most obvious way to obtain the necessary funding is through taxes.</p>
<p>The net effect of this is that instead of spending or saving more money on the things that are most important to the company or individual, more money is diverted to the government. This means that everyone else earns less, and if a business earns less it employs less people and is less likely to save and is more vulnerable to a slowdown in the economy.</p>
<p>Another option available to government, to finance its budget, is through the issue of treasury bonds. There are a number of problems with issuing bonds. First of all it competes for the same savings, as other types of securities. This means that when investors acquire government bonds, there are less funds available to entrepreneurs, and funds available cost more. This makes it more challenging to business to obtain start-up or growth funding.</p>
<p>The last option is to inject more money into the economy by creating and spending it or making more of it available through banks. The net effect is the same, the supply of money is increased, which in turn causes inflation. Inflation favors consumption, because if you save money it becomes worth less the longer it is saved. It is also better to borrow money, because the repayments are worth less the further in the future they occur. This creates a very unsustainable business cycle, where capital is poorly allocated until it ends with the bursting of an economic bubble. An economy biased towards consumption or saving is unsustainable. For an economy to become and remain healthy, a good balance between consumption and saving must exist.</p>
<p>For a business to succeed it requires a sustainable, and relatively predictable environment.</p>
<h2>Trade Unions</h2>
<p>One of the key problems South Africa faces is the apolitical nature of <a title="Can Labor Unions Restrict Wages in a Free Market?" href="http://mises.org/story/3590" target="_blank">trade unions</a>. Trade unions support a specific political party, and encourage their members to vote for this party. This provides trade unions with a powerful political voice, and the ability to influence affairs beyond economic and labour spheres.  On the other hand politicians willing to dance to the tune of the trade unions, obtain a single support base that can put them in power. Jacob Zuma used this fact to his advantage with great success, and the detriment of Tabo Mbeki.</p>
<p>This begs the question: Why is South African trade unions so involved with politics? To answer this question we need to revisit the liberation struggle. The trade unions formed a very important part of the liberation struggle against the racist apartheid regime. During the later years of the struggle, the ANC was collaborating closely with the trade unions as one of its revolutionary partners. For instance in 1981, &#8220;the ANC for its part was trying to support workers&#8217; strikes by taking armed action against certain companies.&#8221; The ANC petitioned &#8220;the creation of combat units at factories,&#8221; at a meeting to form a national trade union federation. At that time the ANC assisted as the integration force of the trade unions with other opposition organizations (Vladimir Shubin, ANC a View From Moscow, 2008).</p>
<p>Pre 1994 the ANC and trade unions as a joint political movement, with a common enemy, made complete sense, to mobilise black workers against the apartheid government. But when the ANC came into power it became responsible for more than the social welfare of the country and the people&#8217;s liberation. In this new phase of the ANC&#8217;s life, it is responsible for two opposing forces. Why are they opposing? Because the South African trade unions favor a communist arrangement of the economy and society, instead of seeing business as their partner providing jobs to their members.</p>
<h2>The Entrepreneur&#8217;s Ship Is A Canoe</h2>
<p>After going over the things that got the country to where it is today, the next thing to ask is, what is the solution to these problems? There is only one individual that can truly move South Africa forward, and deliver the improved quality of life that was promised during the liberation struggle. This is the individual, or individuals, that can think critically about problems or opportunities and invent solutions demanded by the market. Government might be able to run some enterprises moderately successful. But let&#8217;s be honest here. Government has never achieved a reputation to efficiently identify new needs and bring innovative solutions to the market, that leads to an improved quality of life for employees and consumers. Government also lacks the ability to extend this beyond its own national borders. The entrepreneur can extend his successes across the globe.</p>
<p>Government and the labour movement has an important role to align their strategy to stimulate, support and sustain entrepreneurial enterprises. They should give consumers the freedom to choose what is most important to them, and allow entrepreneurs to provide a range of options. Not force them to buy, say electricity, from only one supplier, Eskom.</p>
<p>This does not mean that the Department of Trade And Industry&#8217;s budget should be doubled, so they can hand out more loans to entrepreneurs, or that another government programme be launched to lecture people on the virtues of entrepreneurship. What I am referring to is that government must understand the total impact they have on the economy and how it affects entrepreneurs. Rather than spending millions on keeping South African Airways running, sell it and reduce the amount of taxes and bonds issued. This will allow consumers to direct more of their money at what&#8217;s really important to them, which in turn will give entrepreneurs a bigger incentive to start or increase their business based on what is really important.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/307/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=307&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/11/12/south-africa-to-remain-stagnant-on-the-edge-of-socio-economic-unrest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
		<item>
		<title>Call SOAP-XML Web Services With jQuery Ajax</title>
		<link>http://openlandscape.wordpress.com/2009/09/25/call-soap-xm-web-services-with-jquery-ajax/</link>
		<comments>http://openlandscape.wordpress.com/2009/09/25/call-soap-xm-web-services-with-jquery-ajax/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 12:24:07 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=340</guid>
		<description><![CDATA[jQuery&#8217;s popularity has really exploded over last few years. What really stands out about jQuery is its clear and consise JavaScript library. Other things I&#8217;ve come to appreciate over time is its deep functionality and completely non-intrusive configuration. Recently, to improve the responsiveness of my user interfaces, I decided to use jQuery&#8217;s Ajax to call [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=340&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="attachment_367" class="wp-caption alignleft" style="width: 225px"><a href="http://jquery.com/"><img class="size-full wp-image-367    " style="background-color:#000000;margin:0;" title="jQuery: Write less, do more" src="http://openlandscape.files.wordpress.com/2009/09/logo_jquery_215x53.gif?w=215&#038;h=53" alt="jQuery: Write less, do more" width="215" height="53" /></a><p class="wp-caption-text">jQuery: Write less, do more</p></div>
<p><strong>jQuery</strong>&#8217;s popularity has really exploded over last few years. What really stands out about jQuery is its clear and consise <strong>JavaScript</strong> library. Other things I&#8217;ve come to appreciate over time is its deep functionality and completely non-intrusive configuration. Recently, to improve the responsiveness of my user interfaces, I decided to <strong>use jQuery&#8217;s Ajax to call SOAP-XML web services directly</strong>. I struggled to find good information on how this can be done. There are a lot of good examples on the web that demonstrate how to <strong>use JSON web services from jQuery Ajax</strong>, but almost none for <strong>SOAP-XML web services</strong>.</p>
<div id="attachment_342" class="wp-caption alignright" style="width: 310px"><a href="http://openlandscape.files.wordpress.com/2009/09/webserviceinbrowser.png"><img class="size-medium wp-image-342 " title=".NET Web Service Operation Definition" src="http://openlandscape.files.wordpress.com/2009/09/webserviceinbrowser.png?w=300&#038;h=192" alt=".NET Web Service Operation Definition" width="300" height="192" /></a><p class="wp-caption-text">.NET Web Service Operation Definition</p></div>
<p>Before you can call the web service from client script you need to <strong>obtain the web service operation&#8217;s WSDL</strong>. If you&#8217;re using a .NET web service, you can just point your browser to the web service&#8217;s URL, and click on the operation&#8217;s name.</p>
<p>The example web service operation I&#8217;m using, <strong>SaveProduct</strong>, has the following schema:</p>
<pre class="brush: xml;">
POST /ProductService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: &quot;http://sh.inobido.com/SaveProduct&quot;

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;soap:Envelope xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;
&lt;soap:Body&gt;
&lt;SaveProduct xmlns=&quot;http://sh.inobido.com/&quot;&gt;
&lt;productID&gt;int&lt;/productID&gt;
&lt;productName&gt;string&lt;/productName&gt;
&lt;manufactureDate&gt;dateTime&lt;/manufactureDate&gt;
&lt;/SaveProduct&gt;
&lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<p>The method that will contact this operation looks like this:</p>
<pre class="brush: jscript;">
var productServiceUrl = 'http://localhost:57299/ProductService.asmx?op=SaveProduct'; // Preferably write this out from server side

function beginSaveProduct(productID, productName, manufactureDate)
{
var soapMessage =
'&lt;soap:Envelope xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt; \
&lt;soap:Body&gt; \
&lt;SaveProduct xmlns=&quot;http://sh.inobido.com/&quot;&gt; \
&lt;productID&gt;' + productID + '&lt;/productID&gt; \
&lt;productName&gt;' + productName + '&lt;/productName&gt; \
&lt;manufactureDate&gt;' + manufactureDate + '&lt;/manufactureDate&gt; \
&lt;/SaveProduct&gt; \
&lt;/soap:Body&gt; \
&lt;/soap:Envelope&gt;';

$.ajax({
url: productServiceUrl,
type: &quot;POST&quot;,
dataType: &quot;xml&quot;,
data: soapMessage,
complete: endSaveProduct,
contentType: &quot;text/xml; charset=\&quot;utf-8\&quot;&quot;
});

return false;
}

function endSaveProduct(xmlHttpRequest, status)
{
 $(xmlHttpRequest.responseXML)
    .find('SaveProductResult')
    .each(function()
 {
   var name = $(this).find('Name').text();
 }
}
</pre>
<p>In order to call the web service, we need to supply an XML message that match the operation definition specified by the web service&#8217;s WSDL. With the operation&#8217;s schema already in hand, all that is required is to exchange the type names for the operation&#8217;s paramaters, with their actual values. The variable <strong>soapMessage</strong> contains the complete XML message that we&#8217;re going to send to the web service.</p>
<p>To make an Ajax request with  jQuery you use the <strong>ajax method</strong> found on the jQuery object. The <strong>$/dollar sign</strong> is an alias for jQuery, the actual name of the object; the symbol just provides a shortcut to the jQuery object. The ajax method provides a <a title="jQuery.ajax()" href="http://docs.jquery.com/Ajax/jQuery.ajax" target="_blank">wide range of options</a> to manage low level Ajax tasks, but we&#8217;ll only cover the ones we&#8217;ve used here:</p>
<ol>
<li><strong>url</strong>: Should be pretty obvious. This is the <strong>web service&#8217;s end-point URL</strong>. All I&#8217;ve done is instead of hard coding it, I assigned the URL to the variable productServiceUrl when I create the page&#8217;s HTML from the server side.</li>
<li><strong>type</strong>: The <strong>type of request we&#8217;re sending</strong>. jQuery uses &#8220;<strong>GET</strong>&#8221; by default. If you quickly take a look again at the SaveProduct operation&#8217;s definition, you will notice that on the 1st line it specifies that requests should use the &#8220;POST&#8221; HTTP method.</li>
<li><strong>dataType</strong>: The type of data that the response will send back. The usual types are available like html, json, etc. If you&#8217;re working with a SOAP web service, you need to specify the <strong>xml dataType</strong>.</li>
<li><strong>data</strong>: Another easy one. This is the actual data, as XML text, you will be sending to the web service.</li>
<li><strong>complete</strong>: The <strong>callback delegate</strong> that will be executed when the request completes. The callback method must implement the following signature: <strong>function (XMLHttpRequest, textStatus) {  /* Code goes here */ }</strong> .</li>
<li><strong>contentType</strong>: A string representing the <strong>MIME content type of the request</strong>, in this case it&#8217;s <strong>&#8220;text/xml&#8221;</strong> because we&#8217;re working with a SOAP web service that expects XML data.</li>
</ol>
<p>Now you&#8217;re ready to send your XML data off to the web service. Once the server finishes processing the request, the endSaveProduct method gets called. To <strong>process the XML response in jQuery</strong>, you need to know the <strong>SOAP reponse&#8217;s schema/definition</strong>. The SaveProduct web method has the following schema:</p>
<pre class="brush: xml;">
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;soap:Envelope xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;
  &lt;soap:Body&gt;
    &lt;SaveProductResponse xmlns=&quot;http://sh.inobido.com/&quot;&gt;
      &lt;SaveProductResult&gt;
        &lt;ID&gt;int&lt;/ID&gt;
        &lt;Name&gt;string&lt;/Name&gt;
        &lt;ManufactureDate&gt;dateTime&lt;/ManufactureDate&gt;
      &lt;/SaveProductResult&gt;
    &lt;/SaveProductResponse&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<p>From this schema it should be clear that the web method SaveProduct sends back the Product object that was saved. You will find the XML document/data on the <strong>xmlHttpRequest</strong> parameter&#8217;s <strong>responseXML</strong> property. From here you can use the usual jQuery methods to traverse the XML document&#8217;s nodes to extract the data.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/340/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/340/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/340/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/340/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/340/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/340/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/340/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/340/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/340/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/340/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=340&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/09/25/call-soap-xm-web-services-with-jquery-ajax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/09/logo_jquery_215x53.gif" medium="image">
			<media:title type="html">jQuery: Write less, do more</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/09/webserviceinbrowser.png?w=300" medium="image">
			<media:title type="html">.NET Web Service Operation Definition</media:title>
		</media:content>
	</item>
		<item>
		<title>Deploy An Assembly/.dll To The GAC On Windows Server 2008</title>
		<link>http://openlandscape.wordpress.com/2009/09/22/deploy-an-assembly-dll-to-the-gac-on-windows-server-2008/</link>
		<comments>http://openlandscape.wordpress.com/2009/09/22/deploy-an-assembly-dll-to-the-gac-on-windows-server-2008/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 11:26:50 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[SystemAdmin]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[GAC]]></category>
		<category><![CDATA[Windows Server 2008]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/2009/09/22/deploy-an-assembly-dll-to-the-gac-on-windows-server-2008/</guid>
		<description><![CDATA[Problem: You get an error &#8220;Access is denied: [dll name]&#8221; trying to deploy a strong named assembly/.dll to the GAC on Windows Server 2008.
Solution:
1. Run the Command Prompt as Administrator and enter the command: explorer %windir%\assembly .
2. Run the Command Prompt as Administrator and enter the command:
explorer [path to directory where the dll is located].
3. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=337&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Problem: You get an error<strong><em> &#8220;Access is denied: [dll name]&#8221; </em></strong>trying to deploy a strong named assembly/.dll to the GAC on Windows Server 2008.</p>
<div id="attachment_336" class="wp-caption alignleft" style="width: 330px"><a href="http://openlandscape.files.wordpress.com/2009/09/accessisdenied.jpg"><img class="size-full wp-image-336" title="Windows Server 2008 deploy to GAC - &quot;Access Is Denied&quot; error message" src="http://openlandscape.files.wordpress.com/2009/09/accessisdenied.jpg?w=320&#038;h=149" alt="&quot;Access Is Denied&quot; error message" width="320" height="149" /></a><p class="wp-caption-text">&quot;Access Is Denied&quot; error message</p></div>
<p>Solution:</p>
<p>1. Run the Command Prompt as Administrator and enter the command: explorer %windir%\assembly .</p>
<p>2. Run the Command Prompt as Administrator and enter the command:<br />
explorer [path to directory where the dll is located].</p>
<p>3. Drag and drop the dll from the source directory to the GAC.</p>
<p>That should be it. Your assembly is now deployed to tha Global Assembly Cache. Remember to recycle your web application&#8217;s Application Pool, so that the new .dll can be loaded.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=337&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/09/22/deploy-an-assembly-dll-to-the-gac-on-windows-server-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/09/accessisdenied.jpg" medium="image">
			<media:title type="html">Windows Server 2008 deploy to GAC - &#34;Access Is Denied&#34; error message</media:title>
		</media:content>
	</item>
		<item>
		<title>The Joy, Blood, Sweat And Tears Of InfoPath 2007</title>
		<link>http://openlandscape.wordpress.com/2009/06/13/microsoft-office-infopath-2007-how-to-problem-error/</link>
		<comments>http://openlandscape.wordpress.com/2009/06/13/microsoft-office-infopath-2007-how-to-problem-error/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 09:01:20 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[InfoTech]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[InfoPath]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[MOSS 2007]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Native XML Web Services]]></category>
		<category><![CDATA[SQL Web Services]]></category>
		<category><![CDATA[Visual SourceSafe]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=281</guid>
		<description><![CDATA[I recently completed a project based on InfoPath 2007 (Office client version) and Microsoft Office SharePoint Services 2007 (MOSS 2007). Looking back I can say that InfoPath has its uses, but before you build a solution around it you have to be very sure about its limitations. InfoPath has a number of limitations, especially with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=281&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://openlandscape.files.wordpress.com/2009/06/infopath.gif"><img class="alignleft size-full wp-image-301" style="margin:10px;" title="InfoPath" src="http://openlandscape.files.wordpress.com/2009/06/infopath.gif?w=49&#038;h=51" alt="InfoPath" width="49" height="51" /></a>I recently completed a project based on<strong><em> InfoPath 2007 (Office client version) </em></strong>and <strong><em>Microsoft Office SharePoint Services 2007 (MOSS 2007)</em></strong>. Looking back I can say that <strong><em>InfoPath </em></strong>has its uses, <em>but before you build a solution around it you have to be very sure about its limitations</em>. InfoPath has a number of limitations, especially with regards to submitting data, that aren&#8217;t that apparent at first sight. If you don&#8217;t watch out, you can quickly get caught up in what feels like a never ending maize of dead ends.</p>
<p>InfoPath is often pitched as a solution that doesn&#8217;t require writing custom code. This project was no different, and its time lines were made accordingly. In the end we had to write a fair amount of custom code, which was fun, but took more time.</p>
<h2>The Many Limitations Of InfoPath DataBase Data Source</h2>
<p>InfoPath generally works well viewing standard enterprise data sources such as database tables or SharePoint lists.<em> The limitations become apparent when you attempt to submit to a database using an InfoPath SQL connection, or perform advanced queries</em>. There are a number of limitations when you work with an <strong><em>InfoPath SQL database data source/connection</em></strong>:</p>
<ol>
<li><strong><em>Only submit to a single table.</em></strong> This excludes database data sources such as views, and queries with joins. You cannot submit to views or SQL DataSources with joins.</li>
<li><strong><em>To submit to a database you can only use the main data connection.</em></strong> In other words you can&#8217;t have a database-view as the main data source, and setup another simple single table select to submit to.</li>
<li><strong><em>Range queries are not possible.</em></strong> You can only use a field once in a query&#8217;s WHERE clause with an equality operator.</li>
<li> <strong><em>SQL data source dependent on table schema. </em></strong>If a SQL data source&#8217;s underlying table is modified, even just adding a column (in other words InfoPath&#8217;s SELECT statement doesn&#8217;t actually change), the data source will break.</li>
</ol>
<div id="attachment_278" class="wp-caption alignleft" style="width: 490px"><a href="http://openlandscape.files.wordpress.com/2009/06/data-connection-wizard.jpg"><img class="size-full wp-image-278" title="Data Connection Wizard" src="http://openlandscape.files.wordpress.com/2009/06/data-connection-wizard.jpg?w=480&#038;h=321" alt="Data Connection Wizard" width="480" height="321" /></a><p class="wp-caption-text">Data Connection Wizard</p></div>
<p>With SharePoint lists you cannot query the data source with queryfields like relational data sources.</p>
<p>The above limitations, especially regarding relational data sources, mean one thing: <em><strong>Web services are mandatory for working with your relational data. </strong>Using web services allows you to overcome all the limitations of the standard InfoPath SQL data source, and work with a consistent schema.</em></p>
<p><strong><em>Another thing to watch out for is that InfoPath&#8217;s performance deteriorates quickly when you have more than 50 rows in your result set. </em></strong>Sometimes this figure is much lower. In the project I worked on the data was coming lightning fast from the data base through the web service. But when the data hits the form, and InfoPath starts parsing the XML document, it completely froze for quite a while. I have decided not to torture myself trying to page my form data, so I haven&#8217;t looked into this yet (and I believe InfoPath is not meant to be used in this manner).<strong><em> The quickest and most effective solution I could come up with is to allow users to load data into their form incrementally. </em></strong>How this works is that you&#8217;ll do a normal retrieve of your data from the data source, but instead of clearing the form, you&#8217;ll just add the new result set to the rest of the form&#8217;s data. The big drawback of this is that you need to write custom code to modify the XML document directly using XmlWriter: Not a too pleasant exercise.</p>
<pre class="brush: csharp;">
public void Load_Clicked(object sender, ClickedEventArgs e)
{
  // Call the web service of the secondary DataSource, which will populate it         
  DataSources[&quot;ClientWS2&quot;].QueryConnection.Execute();
  var clients = DataSources[&quot;ClientWS2&quot;].CreateNavigator().Select(&quot;/dfs:myFields/dfs:dataFields/tns:GetClientsResponse/tns:GetClientsResult/tns:Client&quot;, NamespaceManager);

  // The 1st time rows are added GetClientsResult might not exist, only GetClientsResponse
  var main = MainDataSource.CreateNavigator().SelectSingleNode(&quot;/dfs:myFields/dfs:dataFields/tns:GetClientsResponse/tns:GetClientsResult&quot;, NamespaceManager);
  if (main == null) main = MainDataSource.CreateNavigator().SelectSingleNode(&quot;/dfs:myFields/dfs:dataFields/tns:GetClientsResponse&quot;, NamespaceManager);

  using (XmlWriter writer = main.AppendChild())
  {
    // Make sure we are adding Client elements to /dfs:myFields/dfs:dataFields/tns:GetClientsResponse/tns:GetClientsResult and not, /dfs:myFields/dfs:dataFields/tns:GetClientsResponse
    if (main.LocalName == &quot;GetClientsResponse&quot;)
    {
      // So if it doesn't exist, create it first
      writer.WriteStartElement(&quot;GetClientsResult&quot;, &quot;http://sh.inobido.com/CRM/Service&quot;);
    }

    while (clients.MoveNext())
    {
      writer.WriteStartElement(&quot;Client&quot;, &quot;http://sh.inobido.com/CRM/Service&quot;);

      // Select all the client element's child elements
      var fields = proposals.Current.Select(&quot;*&quot;, NamespaceManager);
      while (fields.MoveNext())
      {
        // Write each element and value to the Main DataSource
        writer.WriteStartElement(fields.Current.Name, &quot;http://sh.inobido.com/CRM/Service&quot;);
        writer.WriteString(fields.Current.Value);
        writer.WriteEndElement();
      }

      writer.WriteEndElement();
    }

    if (main.LocalName == &quot;GetClientsResponse)
    {
      writer.WriteEndElement();
    }
    writer.Close();
  }
}
</pre>
<p>The above event fires when a user clicks the Load button. <em>The trick to load data incrementally is that you need a second DataSource exactly the same as the Main DataSource (they should point to the same data store). </em>Whenever you call DataSource.QueryConnection.Execute() InfoPath will wipe any previous data from that DataSource, and reload it with the new data. That&#8217;s why you need a separate second DataSource that you call Execute on, and then copy that data to the Main DataSource. The end result is the Main DataSource doesn&#8217;t lose its data, but data gets added to it on each query.</p>
<p>Just another side note on InfoPath: <strong><em>Pivot tables are not possible</em></strong>, because you have to know exactly which columns your binding to at design time, and cannot create columns dynamically at runtime. This shouldn&#8217;t be a show stopper to most projects, but I&#8217;m just mentioning it. All the InfoPath forms we had to do came from Excel spreadsheets, and the one spreadsheet was a monster pivot table.</p>
<h2>Hacking The DataConnection</h2>
<p><em><strong>It&#8217;s possible to query a data connection directly from InfoPath, change the SQL command dynamically, or extract the connection string. </strong>The biggest drawback of this hack (apart from being a hack, i.e. not recommended) is that it requires FullTrust and Sql Code Access Security (CAS) permissions.</em> That means you have to certify your InfoPath form, or create an installer so users have to install it locally onto their machines. This doesn&#8217;t really work well when the form is made available to users through a SharePoint document library.</p>
<p>Anyways, here is a very <em>unrefined sample</em> to achieve this:</p>
<pre class="brush: csharp;">
private const string CONNECTION_STRING = &quot;Server={0};Database={1};User ID={2};Password={3};Trusted_Connection=False;&quot;;

private string GetConnectionString(AdoQueryConnection queryConnection)
{
  var password = GetConnectionStringParameter(queryConnection, &quot;Password&quot;);
  var user = GetConnectionStringParameter(queryConnection, &quot;User ID&quot;);
  var server = GetConnectionStringParameter(queryConnection, &quot;Data Source&quot;);
  var db = GetConnectionStringParameter(queryConnection, &quot;Initial Catalog&quot;);
  return string.Format(CONNECTION_STRING, server, db, user, password);
}

// Hmmm, if your using my wonderful hack, then you might want to
// consider rewriting this method to use regular expressions instead <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
private string GetConnectionStringParameter(AdoQueryConnection queryConnection, string name)
{
  var paramIndex = queryConnection.Connection.IndexOf(name + &quot;=&quot;);
  var parameter = queryConnection.Connection.Substring(paramIndex, queryConnection.Connection.IndexOf(&quot;;&quot;, paramIndex) - paramIndex);
  return parameter.Substring(parameter.IndexOf(&quot;=&quot;) + 1);
}

private IDataReader SelectWorksheetItems(SqlConnection connection, int pocketID)
{
  using (var dbCommand = new SqlCommand(&quot;WorksheetItemGetByPocket&quot;, connection))
  {
    connection.Open();
    dbCommand.Parameters.Add(&quot;@pocketID&quot;, SqlDbType.Int).Value = pocketID;
    dbCommand.CommandType = CommandType.StoredProcedure;
    return dbCommand.ExecuteReader();
  }
}

worksheetItemCurrentDS = DataSources[&quot;WorksheetItemCurrent&quot;];
worksheetItemCurrentCmd = ((AdoQueryConnection)worksheetItemCurrentDS.QueryConnection).Command + &quot; where \&quot;PocketID\&quot;={0}&quot;;

using (var connection = new SqlConnection(GetConnectionString((AdoQueryConnection)worksheetItemCurrentDS.QueryConnection)))
{
  using (var reader = SelectWorksheetItems(connection, 24))
  {
    // Do some stuff with the DataReader here...
  }
}
</pre>
<p>InfoPath&#8217;s different data sources each use a specific data connection that inherits from the abstract class Microsoft.Office.InfoPath.DataConnection. <strong><em>The main point of the above example is that you can cast your InfoPath&#8217;s DataConnections to its specific implementation.</em></strong> For SQL database data sources InfoPath uses AdoQueryConnection. With AdoQueryConnection you have the ability to extract or manipulate the data source&#8217;s command and connection string.</p>
<h2>Using SQL Server To Store InfoPath Documents</h2>
<p>You cannot call store procedures directly from InfoPath, but if you <strong><em>develop on SQL Server 2005 or later, you can use <a title="SQL Web Services" href="http://msdn.microsoft.com/en-us/library/ms181591.aspx" target="_blank">SQL Web Services</a> to call stored procedures as a web service.</em></strong> <em><strong>The big catch here is that SQL authentication and SQL Web Services don&#8217;t really go well together.</strong></em> Therefore when using SQL authentication for your InfoPath DataConnections you will either have to support integrated authentication for calls coming through the SQL Web Service (and SQL authetication for direct calls from the InfoPath form), or you will have to throw open access to your stored procedure to all users. If your using SQL authentication, there&#8217;s usually a good reason your doing so, so additionally supporting integrated authentication might not be an option. Giving access to anyone is an even worse idea.</p>
<pre class="brush: sql;">
CREATE ENDPOINT ClientInsertEndpoint
STATE = STARTED
AS HTTP
(
  SITE = 'ServerName',
  PATH = '/WebServiceName',
  AUTHENTICATION = (NTLM),
  PORTS = (CLEAR)
)
FOR SOAP
(
  WEBMETHOD 'ClientInsert'
  (
    NAME = 'DataBase.dbo.ClientInsert',
    SCHEMA = DEFAULT,
    FORMAT = ROWSETS_ONLY
  ),
  WSDL = DEFAULT,
  BATCHES = DISABLED,
  DATABASE = 'DataBase'
)
GO
</pre>
<p>If is possible to support SQL authentication for SQL Server Web Services, but this requires a SSL server certificate. Microsoft also plans to <a href="http://msdn.microsoft.com/en-us/library/ms180919.aspx" target="_blank">remove this feature from SQL Server in future releases</a>.</p>
<p>&#8220;This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.&#8221;</p>
<p>Definitely read Microsoft&#8217;s <a href="http://msdn.microsoft.com/en-us/library/ms190399.aspx" target="_blank">best practices for <em><strong>SQL Server Native XML Web Services</strong></em></a>.</p>
<p>Finally, you can use SQL Server 2005&#8217;s XML data type to save an InfoPath Form or query it in a relational format. Here&#8217;s a sample stored procedure that takes in the root node of the InfoPath&#8217;s XML document, and inserts the items into a table:</p>
<pre class="brush: sql;">
ALTER PROCEDURE [dbo].[ClientUpdate]
(
  @clientsXml XML
)
AS
  INSERT INTO  Client (FirstName,
               LastName,
               CellNo,
               TelNo,
               WorkNo)
SELECT         Clients.Client.query('data(@FirstName)').value('.', 'VARCHAR(25)') as FirstName,
               Clients.Client.query('data(@LastName)').value('.', 'VARCHAR(25)') as LastName,
               Clients.Client.query('data(@CellNo)').value('.', 'VARCHAR(25)') as CellNo,
               Clients.Client.query('data(@TelNo)').value('.', 'VARCHAR(25)') as TelNo,
               Clients.Client.query('data(@WorkNo)').value('.', 'VARCHAR(25)') as WorkNo
FROM           @clientsXml.nodes('declare namespace d=&quot;http://schemas.microsoft.com/office/infopath/2003/ado/dataFields namespace dfs=&quot;http://schemas.microsoft.com/office/infopath/2003/dataFormSolution&quot;; //d:Client') Clients(Client)
</pre>
<p>The new SQL XML syntax is a bit tricky, but once you get it right it works wonderfully well.</p>
<h2>XPath Expressions Are Your Friend</h2>
<div id="attachment_279" class="wp-caption alignright" style="width: 490px"><a href="http://openlandscape.files.wordpress.com/2009/06/conditional-format.jpg"><img class="size-full wp-image-279" title="Conditional Format" src="http://openlandscape.files.wordpress.com/2009/06/conditional-format.jpg?w=480&#038;h=222" alt="Conditional Format" width="480" height="222" /></a><p class="wp-caption-text">Conditional Format</p></div>
<p>Conditional formatting and XPath expressions are very handy to display unique values in a RepeatingTable. For instance say you&#8217;ve got a Client object, with multiple Addresses &#8211; street, postal, and work. Say you only wanted to show a client&#8217;s name once, and list each of his addresses without repeating his name. When you&#8217;re using a SQL DataSource, you will do a left join with the address table from the client table. This means you&#8217;ll repeat the same client name for each address.</p>
<p>To solve the aforementioned you need to make sure you order by client name, and then hide the textbox with a XPath expression:</p>
<pre class="brush: xml;">
tns:ClientName = preceding-sibling::tns:Client/tns:ClientName
</pre>
<p>What this expression is saying is that if the current Client&#8217;s ClientName is the same as the previous Client&#8217;s, then do something. That something is the action you&#8217;ll check on the Conditional Formatting window, that will be &#8220;hide&#8221; in our case.</p>
<p>This approach can be extended to multiple fields. All you have to do is make sure your order sequence is correct. So just by ordering your resultset corrrectly and using the right XPath expression, you&#8217;ll achieve quite a bit without having to write code.</p>
<h2>InfoPath And Visual SourceSafe <em>Does Not</em> Play Well Together</h2>
<p>If you&#8217;re creating InfoPath forms with <strong><em>Visual Studio Tools for Office </em></strong>and using <strong><em>Visual SourceSafe</em></strong> for source control, you will quickly get a whole range of different and meaningless error messages. Here are the general things to do to resolve them:</p>
<ol>
<li> Make sure all files in your Visual Studio InfoPath project&#8217;s <strong>&#8220;InfoPath Form Template&#8221;</strong> directory are checked out, before doing any work on <strong>manifest.xsf</strong> (the InfoPath form).</li>
<li><em><strong>If you&#8217;re having trouble checking files out of SourceSafe, from within Visual Studio</strong></em>:a. Close Visual Studio.b. Open the Visual SourceSafe application, and check out the files for the project from there. Once you&#8217;ve done this you can close Visual SourceSafe.c. Make the directory &#8220;InfoPath Form Template&#8221; and all its content writeable, by unchecking the Read-only option from the folder&#8217;s Options.d. Reopen Visual Studio, and continue working as usual.</li>
</ol>
<h2>Most Annoying InfoPath Deployment</h2>
<p>Another aspect of InfoPath you need to consider is how you&#8217;re deploying your forms.<em><strong> To deploy a form you need to manually, that&#8217;s right manually, update each DataConnection to point to your production environment.</strong></em> Ouch! If you have say 5 forms, with 5 DataConnections each, then your looking at 25 DataConnections to manually update. Nasty! And if you mess one connection up, you&#8217;ve got a problem.</p>
<p><strong><em>SQL DataConnections are the worst to update.</em></strong> When you want to change to a new DataBase, <em><strong>InfoPath completely clears your original select statement and forgets which table you were using, and you have to reselect the columns/table.</strong></em> Should your DataSource&#8217;s schema change (i.e. your select statement is not exactly the same as previously), InfoPath will do you the favor of removing your controls&#8217; databindings. Most of the time you&#8217;ll probably use all the table&#8217;s columns, but you still have to go and re-select that table.</p>
<p><strong><em>Web Service DataConnections are the easiest to reconfigure (but still pretty painful)</em></strong>. You can just take the URL of the new web service, and copy it into the web service address box, and quickly click Next through the DataConnection wizard. InfoPath doesn&#8217;t forget which web method your DataConnection uses, like it does with SQL table DataConnections.</p>
<p>The aforementioned makes it extremely time consuming and error prone to deploy InfoPath forms between development, QA and production environments.</p>
<h2>Conclusion</h2>
<ol>
<li><strong><em>Use web services to retrieve and save form data, and plan accordingly.</em></strong> I cannot state this enough. Yes, maybe for the simplest of simple forms you can get away with using InfoPath&#8217;s SQL DataConnection (and I mean really simple), but for everything else a web service is an absolute must.</li>
<li><strong><em>Try to avoid large editable, repeating data grids (or referred to as a RepeatingTable in InfoPath lingo).</em></strong> Be extra cautious when you&#8217;re planning on editing large result sets, with lots of drop down lists and lookup data. Forms that work best are ones that displays and edits a single entity, and apposed to forms that edit multiple instances of an entity on the same form.</li>
<li> <strong><em>Don&#8217;t think you&#8217;re going to deploy those 5 forms in a few minutes.</em></strong> Give yourself enough time for the deployment, and to test each form afterwards to check that you didn&#8217;t mess a DataConnection up.</li>
<li><strong><em>Do a quick prototype of your forms to check whether InfoPath can really handle it.</em></strong> In my case the person who recommended InfoPath for the solution should have checked that it can accommodate pivot tables. This is general good software dev practice, but I think because of all InfoPath&#8217;s restrictions, I think one needs to be particularly careful.We&#8217;ve gotten so used to having control over every element of the user interface with ASP .NET and Windows Forms that we expect the same of other technologies we use. Remember InfoPath&#8217;s controls and their behaviour dictate how your information is displayed. You do not have access to the underlying API that these controls are based on. In other words know what InfoPath&#8217;s UI controls can do, because you won&#8217;t be able to write your own.</li>
</ol>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/281/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=281&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/06/13/microsoft-office-infopath-2007-how-to-problem-error/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/infopath.gif" medium="image">
			<media:title type="html">InfoPath</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/data-connection-wizard.jpg" medium="image">
			<media:title type="html">Data Connection Wizard</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/conditional-format.jpg" medium="image">
			<media:title type="html">Conditional Format</media:title>
		</media:content>
	</item>
		<item>
		<title>A Minor Battle That Declared The Begining Of British Rule Of South Africa</title>
		<link>http://openlandscape.wordpress.com/2009/06/07/battle-of-muizenberg/</link>
		<comments>http://openlandscape.wordpress.com/2009/06/07/battle-of-muizenberg/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 12:56:53 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Journeys]]></category>
		<category><![CDATA[Battle of Muizenberg]]></category>
		<category><![CDATA[British East India Company]]></category>
		<category><![CDATA[Cape Town]]></category>
		<category><![CDATA[Cape Town History]]></category>
		<category><![CDATA[Forts]]></category>
		<category><![CDATA[French Revolution]]></category>
		<category><![CDATA[Muizenberg]]></category>
		<category><![CDATA[Netherland East India Company]]></category>
		<category><![CDATA[Netherland Revolution]]></category>
		<category><![CDATA[Prince William V]]></category>
		<category><![CDATA[Royal Navy]]></category>
		<category><![CDATA[Simon's Town]]></category>
		<category><![CDATA[South African History]]></category>
		<category><![CDATA[VOC]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=225</guid>
		<description><![CDATA[The Battle of Muizenberg was a minor military skirmish between the invading British forces and the Dutch defenders. It was fought over a small piece of ground on the hillside between Muizenberg and St James, between 12:00pm and 2:00pm on Sunday 7 August 1795 and resulted in the Dutch retreating around the corner of the hill into Muizenberg. Few lives were lost. Six weeks later the Dutch East India Company (the VOC) surrendered the Cape to the British and the First British Occupation began.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=225&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="attachment_262" class="wp-caption alignright" style="width: 310px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-001.png"><img class="size-medium wp-image-262" title="Battle of Muizenberg Artist Painting" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-001.png?w=300&#038;h=165" alt="Battle of Muizenberg Artist Painting" width="300" height="165" /></a><p class="wp-caption-text">HMS America, HMS Stately, HMS Rattlesnake and HMS Echo at the Battle of Muizenberg</p></div>
<p><span>Soon after the start of the American War of Independence from Britain, tension mounted between Holland and Britain, because of the Dutch&#8217;s trade <span>wi</span></span><span><span>th</span></span><span> France and the American revolutionaries. In 1779 the Dutch Republic joined the First League of Armed Neutrality to seek protection from Britain. The British government saw the complications of getting embroiled in a war <span>wi</span></span><span><span>th</span></span> Russia, Sweden and Denmark (members of the <span><span>leage</span></span>), and declared war on Holland in 1780. This was the beginning of the four<span><span>th</span></span><span>, and last, Anglo-Dutch War. The Dutch&#8217;s naval capacity has been deteriorating since 1712, and their fleet was in dismal shape. <span>Wi</span></span><span><span>th</span></span> only twenty naval warships at the start of the war, the Dutch fleet was no match for the British Royal Navy. The Four<span><span>th</span></span> Anglo-Dutch War resulted in ruin for the Dutch Republic that was ruled by William V, Prince of Orange. Prince William was pro British and also grandson of king George I of Great Britain. Therefore when Holland lost the war, he was blamed by the pro French elements in Dutch politics for mismanagement. The Patriots formed out of discontent for the Republic&#8217;s poor performance and in an attempt to turn around its decline.</p>
<div id="attachment_257" class="wp-caption alignright" style="width: 160px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-2.png"><img class="size-thumbnail wp-image-257" title="Battle Of Muizenberg Fort Lower 1" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-2.png?w=150&#038;h=112" alt="Battle Of Muizenberg Fort Lower 1" width="150" height="112" /></a><p class="wp-caption-text">Muizenberg Dutch Fort Lower Part</p></div>
<p>By 1785 the Patriots threatened to overthrow the <span><span>Stadholder</span></span> led government, even though most people still gave their full support to the House of Orange. The same year the Patriot<span> revolution commenced. However in 1787 they were forced out by a Prussian led force that supported William&#8217;s wife, Princess Wilhelmina daughter of Prince Augustus William of Prussia. Since its formation the Patriots associated themselves <span>wi</span></span><span><span>th</span></span> the French revolutionaries, and fled to France.</p>
<p><span>In 1795  the Patriots returned <span>wi</span></span><span><span>th</span></span><span> the full support of the French revolutionary armies. <span>Wi</span></span><span><span>th</span></span> force they took control of the Netherlands, and established the new <span><span>Batavian</span></span> Republic. Prince William V fled to his ally, Britain, abandoning his country to the French backed revolutionaries.</p>
<div id="attachment_259" class="wp-caption alignright" style="width: 310px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-4.png"><img class="size-medium wp-image-259" title="Battle Of Muizenberg Cannon Mark" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-4.png?w=300&#038;h=225" alt="Battle Of Muizenberg Fort Gun Mark" width="300" height="225" /></a><p class="wp-caption-text">Battle Of Muizenberg Cannon Mark</p></div>
<p>Britain now lost a strategic ally and with it access to the Cape of Good Hope. The Cape was a key midway point for ships to replenish crew and equipment on their way to important colonies in the east and far east. The British East India Company realised they had to take control of the Cape to retain access to India. Lord Baring the Chairman of the British East India Company, persuaded the British Government to intervene with a military force.</p>
<div id="attachment_258" class="wp-caption alignleft" style="width: 160px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-3.png"><img class="size-thumbnail wp-image-258" title="Battle Of Muizenberg Dutch Fort Lower Part" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-3.png?w=150&#038;h=112" alt="Battle Of Muizenberg Fort Lower 2" width="150" height="112" /></a><p class="wp-caption-text">Muizenberg Dutch Fort Lower Part</p></div>
<p>A fleet of seven Royal Navy ships was sent to the Cape under command of Vice-Admiral <span><span>Elphinstone</span></span>. Five were third-rate ships of the line: HMS Monarch (His/Her Majesty&#8217;s Ship, 74 guns), HMS Victorious (74 guns), HMS Arrogant (74 guns); two were 4<span><span>th</span></span> rate ships of the line: HMS America (64 guns) and HMS Stately (64 guns); two were 16-gun sloops: HMS Echo and HMS Rattlesnake. The fleet left Britain on the 1st of March, and reached Simon&#8217;s Bay in early June 1795. <span><span>Elphinstone</span></span><span> attempted to negotiate <span>wi</span></span><span><span>th</span></span> the Dutch governor <span><span>Sluysken</span></span>, to handover the Cape Colony to Britain, but was refused. On June 14 the Dutch was unable to <span><span>scorche</span></span> Simon&#8217;s Towns, when 350 Royal Marines and 450 men of the 78<span><span>th</span></span> Highlanders infantry regiment took control of the town.</p>
<p>The Dutch retreated to their fort just outside <span><span>Muizenberg</span></span><span>, where their military force could defend against the British forces <span>wi</span></span><span><span>th</span></span> artillery fire. The British assembled another 1,000 sailors from the fleet into two battalions of five hundred men each, commanded by Commander Temple Hardy, captain of Echo, and Commander John William <span><span>Spranger</span></span>, captain of Rattlesnake, <span>bringing</span> the total number of soldiers to  1,800 men. The British used <span><span>carronades</span></span><span>, a powerful, short-range anti-ship and anti-crew weapon, from the ships&#8217; launches, to serve as close artillery. The Dutch waited <span>wi</span></span><span><span>th</span></span> 800 soldiers at their <span><span>Muizenberg</span></span> fort.</p>
<div id="attachment_254" class="wp-caption alignleft" style="width: 310px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-0.png"><img class="size-medium wp-image-254" title="Battle Of Muizenberg Fort Middle Battery" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-0.png?w=300&#038;h=225" alt="Battle Of Muizenberg Fort Middle Battery" width="300" height="225" /></a><p class="wp-caption-text">Muizenberg Dutch Fort Middle Battery</p></div>
<p>The Dutch had three days to prepare their defences. Today some of these fortifications are still visible, like the middle battery. The middle battery is a small lookout post halfway up the hillside, on small promontory which gives it an excellent 180 degrees view from Simon&#8217;s Town to <span><span>Muizenberg</span></span> Beach. At least one gun was mounted at this location, since it was recorded as a battery. The gun was most likely a 4-<span><span>pounder</span></span>, of which several were known to have been deployed on the site. A 4-<span><span>pounder</span></span> weighed about 900 kg, and was used for signalling or to fire grape and musket-shot at infantry. The little battery is also home to the ruins of a stone hut built using cement, which indicates it was built by the British. The hut is currently demolished.</p>
<div id="attachment_261" class="wp-caption alignright" style="width: 160px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-6.png"><img class="size-thumbnail wp-image-261" title="Battle Of Muizenberg From Boyes Drive" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-6.png?w=150&#038;h=112" alt="Battle Of Muizenberg From Boyes Drive" width="150" height="112" /></a><p class="wp-caption-text">Battle Of Muizenberg From Boyes Drive</p></div>
<p>On Sunday 7 August 1795 at 12:00pm the skirmish commenced, when the British marched towards <span><span>Muizenberg</span></span> in a column formation, for speed and <span>manoeuvrability</span>, through Fish <span><span>Hoek</span></span> and <span><span>Kalk</span></span> Bay, supported by the the big 4<span><span>th</span></span><span> rate America and Stately, and the smaller Echo and Rattlesnake from the sea <span>wi</span></span><span><span>th</span></span> their <span><span>carronade</span></span> cannons</p>
<p>In a hurry the Dutch constructed defences, and assembled the guns from various sources. Two 4-<span><span>pounder</span></span><span> field guns <span>wi</span></span><span><span>th</span></span><span> their large wheels were the easiest to be transported <span>wi</span></span><span><span>th</span></span><span> horses to the site. A couple of days later a 13-inch mortar and a howitzer, a kind of short, heavy cannon, and also a powder wagon, a kind of box on wheels <span>wi</span></span><span><span>th</span></span> a steep roof, arrived at the fort. These were used for dropping explosive shells, instead of solid shot, on the British infantry. Next the Dutch sent two big 24-<span><span>pounder</span></span> cannons and their gun carriages.</p>
<div id="attachment_260" class="wp-caption alignright" style="width: 310px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-5.png"><img class="size-medium wp-image-260" title="Battle Of Muizenberg 4-Pounder Cannon" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-5.png?w=300&#038;h=225" alt="Dutch 4-Pounder Field Cannon" width="300" height="225" /></a><p class="wp-caption-text">Dutch 4-Pounder Field Cannon</p></div>
<p>These were meant to be operated from mounted positions as ship or battery guns. Apparently they arrived without their wooden platforms. Weighing 2500 kg, they quickly sank into the sand and impossible to aim. Two more 4-<span><span>pounders</span></span> were sent to the fight. In the Dutch&#8217;s retreat to <span><span>Zandvlei</span></span> they would&#8217;ve taken the 4-<span><span>pounders</span></span>. However the large 24-<span><span>pounders</span></span>, mortar and howitzer were left behind, and captured by the English. The Dutch most likely disabled them before deserting them.</p>
<p>Because the Dutch fort was built so close to the sea, it was within range of the ships guns. The warships anchored close to the rocks and in half an hour fired 800 cannon balls at the defenders. The column of British soldiers and troops then overran the position. Some of the Dutch and especially the <span><span>Pandouren</span></span> or native troops fought well, but Dutch morale was low and they <span>abandoned</span> the fight. The <span><span>Pandouren</span></span> were Coloured or Khoisan men who were either slaves of the Dutch or free men subject to the authority of the <span><span>VOC</span></span>. By 2:00pm the Dutch retreated around the corner to <span><span>Zandvlei</span></span>.</p>
<p>The fighting continued for weeks, but the British eventually pushed the Dutch back to <span><span>Wynberg</span></span> Hill. On the 14<span><span>th</span></span><span> of September 1795 a fresh assault <span>wi</span></span><span><span>th</span></span> reinforcements was made on the Dutch. On 16 September 1795 the Dutch finally surrendered the Cape to Britain.</p>
<div id="attachment_256" class="wp-caption alignleft" style="width: 235px"><a href="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-1.png"><img class="size-medium wp-image-256" title="Muizenberg Dutch Fort Parapet" src="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-1.png?w=225&#038;h=300" alt="Battle Of Muizenberg Fort Parapet" width="225" height="300" /></a><p class="wp-caption-text">Muizenberg Dutch Fort Parapet</p></div>
<p>This first, temporary, British occupation led to the second in 1806, which was permanent, and is the reason we speak English in South Africa rather than French. The consequences of this little skirmish was huge.</p>
<p>Today, next to the Main Road in <span><span>Muizenberg</span></span> is a crude rock fort started by the Dutch in 1795 and expanded by the British from 1796 onwards. Higher up the mountainside, below <span><span>Boyes</span></span> Drive is a crudely built defensive protective wall in front of a trench (parapet) that was probably built by the Dutch.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/225/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=225&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/06/07/battle-of-muizenberg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-001.png?w=300" medium="image">
			<media:title type="html">Battle of Muizenberg Artist Painting</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-2.png?w=150" medium="image">
			<media:title type="html">Battle Of Muizenberg Fort Lower 1</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-4.png?w=300" medium="image">
			<media:title type="html">Battle Of Muizenberg Cannon Mark</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-3.png?w=150" medium="image">
			<media:title type="html">Battle Of Muizenberg Dutch Fort Lower Part</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-0.png?w=300" medium="image">
			<media:title type="html">Battle Of Muizenberg Fort Middle Battery</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-6.png?w=150" medium="image">
			<media:title type="html">Battle Of Muizenberg From Boyes Drive</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-5.png?w=300" medium="image">
			<media:title type="html">Battle Of Muizenberg 4-Pounder Cannon</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/06/2009-slag-van-muizenberg-1.png?w=225" medium="image">
			<media:title type="html">Muizenberg Dutch Fort Parapet</media:title>
		</media:content>
	</item>
		<item>
		<title>Old English Fort And The Most Southern Battle Of The Anglo Boer War</title>
		<link>http://openlandscape.wordpress.com/2009/04/26/old-english-fort-and-the-southern-most-battle-of-the-anglo-boer-war/</link>
		<comments>http://openlandscape.wordpress.com/2009/04/26/old-english-fort-and-the-southern-most-battle-of-the-anglo-boer-war/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:27:15 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Journeys]]></category>
		<category><![CDATA[Anglo Boer War]]></category>
		<category><![CDATA[Cogmanskloof]]></category>
		<category><![CDATA[Jan Theron]]></category>
		<category><![CDATA[Kogmanskloof]]></category>
		<category><![CDATA[Langeberge]]></category>
		<category><![CDATA[Montagu]]></category>
		<category><![CDATA[Old English Fort]]></category>
		<category><![CDATA[South African History]]></category>
		<category><![CDATA[Stilbaai]]></category>
		<category><![CDATA[Thomas Bain]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=203</guid>
		<description><![CDATA[On easter weekend we traveled on the Kogman&#8217;s pass (also spelt as Cogman) to Montagu on our way to Stilbaai. From 1875 to 1877 Thomas Charles John Bain (1830 to 1893), son of the pioneer road builder Andrew Geddes Bain, constructed the Kogman&#8217;s Kloof Pass. Thomas Bain, was a renowned road builder and designed and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=203&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://openlandscape.files.wordpress.com/2009/04/img_1778.jpg"><img class="size-medium wp-image-212 alignleft" style="margin:5px;" title="Old English Fort Faraway" src="http://openlandscape.files.wordpress.com/2009/04/img_1778.jpg?w=300&#038;h=225" alt="Old English Fort Faraway" width="300" height="225" /></a>On easter weekend we traveled on the Kogman&#8217;s pass (also spelt as Cogman) to Montagu on our way to Stilbaai. From 1875 to 1877 Thomas Charles John Bain (1830 to 1893), son of the pioneer road builder Andrew Geddes Bain, constructed the Kogman&#8217;s Kloof Pass. Thomas Bain, was a renowned road builder and designed and built many of the spectacular mountain passes in South Africa. The pass goes through a little tunnel in the mountain. In 1899, during the Anglo Boer War, the English built a small fort on top of it. It&#8217;s a very small fort, resembling a blockhouse without a roof, with rugged walls and loopholes (embrasure) on the north and south walls.</p>
<p><a href="http://openlandscape.files.wordpress.com/2009/04/img_1755.jpg"><img class="size-thumbnail wp-image-211 alignright" style="margin:5px;" title="Old English Fort Close-up" src="http://openlandscape.files.wordpress.com/2009/04/img_1755.jpg?w=150&#038;h=112" alt="Old English Fort Close-up" width="150" height="112" /></a>Cogmanskloof passes through folded layers of the Table Mountain Group in the Langeberge. Rivers deposited the sediment of which these rocks (mostly sandstone) are composed along the coastline some 400 to 450 milltion years ago. Burial below other deposits compacted the beds and transformed them to stone. <a href="http://openlandscape.files.wordpress.com/2009/04/img_1737.jpg"><img class="size-thumbnail wp-image-210 alignleft" style="margin:5px;" title="Kogmanskloof Pass" src="http://openlandscape.files.wordpress.com/2009/04/img_1737.jpg?w=150&#038;h=112" alt="Kogmanskloof Pass" width="150" height="112" /></a>About 280 million years ago, compressional forces in the earth&#8217;s crust began folding the beds and continued to do so for the next 60 million years. Upon this followed tensional forces, which formed large crustal fractures roughly parallel to the present coastline. One of the largest of these, the Worcester Fault, passes near the southern entrance to the Kloof and displaced beds to the south of it downward by several kilometers. Cogmanskloof is but one of several deep gorges carved into the tough sandstone of the Cape mountains by the erosive action of swiftly flowing rivers over millions of years.</p>
<h3><a href="http://openlandscape.files.wordpress.com/2009/04/img_1816.jpg"><img class="size-medium wp-image-213 alignleft" style="margin:5px;" title="Anglo Boer War Memorial At Stilbaai" src="http://openlandscape.files.wordpress.com/2009/04/img_1816.jpg?w=225&#038;h=300" alt="Anglo Boer War Memorial At Stilbaai" width="225" height="300" /></a></h3>
<h3>Most Southern Battle Of The Anglo Boer War</h3>
<p>About 10km after turning off from the N2 to Stilbaai you&#8217;ll find a memorial at the location of the most southern battle of the Anglo Boer War. The battle took place on 12 September 1901. Commandant Jan Theron&#8217;s Boer commando clashed with the District Mounted Troops and Riversdale Town Guards of Lieutenant Smalberger and a unit of British troops under the command of Major Kavanagh. The Boers were on the hills North-West, West, South-West and South-East of the valley. Two Boers, field-cornet J.A. Van Biljon from Kroonstad and R.C.H. Tiell of Johannesburg, were injured. They recovered and got banned. The British troops incur numerous incidents, but exact numbers are unknown.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=203&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/04/26/old-english-fort-and-the-southern-most-battle-of-the-anglo-boer-war/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/04/img_1778.jpg?w=300" medium="image">
			<media:title type="html">Old English Fort Faraway</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/04/img_1755.jpg?w=150" medium="image">
			<media:title type="html">Old English Fort Close-up</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/04/img_1737.jpg?w=150" medium="image">
			<media:title type="html">Kogmanskloof Pass</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/04/img_1816.jpg?w=225" medium="image">
			<media:title type="html">Anglo Boer War Memorial At Stilbaai</media:title>
		</media:content>
	</item>
		<item>
		<title>No turnaround confirmed yet</title>
		<link>http://openlandscape.wordpress.com/2009/03/28/no-turnaround-confirmed-yet/</link>
		<comments>http://openlandscape.wordpress.com/2009/03/28/no-turnaround-confirmed-yet/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 11:19:10 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[Finance, Economics & Investing]]></category>
		<category><![CDATA[Confirmation]]></category>
		<category><![CDATA[Dow Jones]]></category>
		<category><![CDATA[Dow Theory]]></category>
		<category><![CDATA[INDT]]></category>
		<category><![CDATA[JSE]]></category>
		<category><![CDATA[JSE Top 40]]></category>
		<category><![CDATA[Technical Analysis]]></category>
		<category><![CDATA[TOPI]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=189</guid>
		<description><![CDATA[A cornerstone of Dow Theory is confirmation. Dow Jones used industrial and railroad indexes as indicators of the state of the economy and business. Confirmation is the process of comparing two averages, to assert the direction of the primary trend. What this means is that if the one index reaches a new high, yet the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=189&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>A cornerstone of <strong>Dow Theory</strong> is <strong>confirmation</strong></em>. Dow Jones used industrial and railroad indexes as indicators of the state of the economy and business. Confirmation is the process of comparing two averages, to assert the direction of the primary trend. What this means is that if the one index reaches a new high, yet the other index doesn&#8217;t, it means the primary trend is running out of steam. <em>If one index reaches a new high, then the other index should also, around the same time.</em> They don&#8217;t need to reach new highs or lows at exactly the same time &#8211; a few weeks is acceptable. The primary and secondary indexes should perform together. If not, a divergence suggests a reversal is likely.</p>
<p>The secondary index should complement the primary index. The secondary index should also consist of securities that are completely different from those in the primary index. For instance in Dow&#8217;s time he used the industrial and rail indexes. Today the modern version of the rails index is the transportation index. The American transport index is the Dow Jones Transportation Average. On the Johannesburg Stock Exchange (JSE), the equivalent index is the <strong>Industrial Transportation Index</strong> (<strong>INDT</strong> &#8211; Black Line Chart).</p>
<div id="attachment_191" class="wp-caption alignright" style="width: 490px"><img class="size-full wp-image-191" style="border:0 none;margin-left:8px;margin-right:8px;" title="JSE INDT TOPI" src="http://openlandscape.files.wordpress.com/2009/03/picture-1.png?w=480&#038;h=221" alt="JSE INDT TOPI" width="480" height="221" /><p class="wp-caption-text">JSE INDT TOPI</p></div>
<p>If we compare the <strong>JSE&#8217;s Top 40 Index</strong> (<strong>TOPI</strong> &#8211; Blue Line Chart) with INDT, we can clearly see that the Top 40 reached a new high on 20 June 2007, yet INDT failed to reflect this peak. On 6 March 2008 another divergence occurred, when the Top 40 reached another new high, and INDT continued its downward trend. On 22 May 2008 the Top 40 reached its all time high, and the INDT yet again told us otherwise.</p>
<p>What can we say about the past 5 months? Well it looks as if the Top 40 is trending sideways, and INDT is continuing its downward trend. This is yet another divergence. Not as strong as the ones produced during 2007, and 2008, but still suggesting that the Top 40 might fall even further than its lowest point on 20 November 2008. It looks like the Top 40&#8217;s current support is around the 16000 to 16800 range. On the 3rd of March 2009 INDT reached an all time low, but TOPI has not yet reached an all time new low. I believe there is a strong likelihood that the TOPI  will continue trending downwards during the next 6 weeks, and reach a new low. It will be interesting to see if this is indeed the case.</p>
<p>What&#8217;s so powerful about Dow&#8217;s confirmation is that it provides a strong early warning signal that the big trend is changing. In the recent past we were warned almost a year before the JSE finally came crashing down.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/189/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=189&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/03/28/no-turnaround-confirmed-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/03/picture-1.png" medium="image">
			<media:title type="html">JSE INDT TOPI</media:title>
		</media:content>
	</item>
		<item>
		<title>Executing Shell Commands From A Visual Studio Deployment Project</title>
		<link>http://openlandscape.wordpress.com/2009/03/23/executing-shell-commands-from-a-visual-studio-deployment-project/</link>
		<comments>http://openlandscape.wordpress.com/2009/03/23/executing-shell-commands-from-a-visual-studio-deployment-project/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 15:03:41 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[SoftwareConfiguration]]></category>
		<category><![CDATA[.vbs]]></category>
		<category><![CDATA[Commandline]]></category>
		<category><![CDATA[Custom Action]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[SQL Server Express]]></category>
		<category><![CDATA[Visual Basic script]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio Deployment Project]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=175</guid>
		<description><![CDATA[Visual Studio&#8217;s Deployment Projects are quite limited. To get them to do more complicated setup tasks require writing custom deployment actions in C#. The problem with writing code is that it places an additional maintenance and testing burden on the developer. Often all that&#8217;s needed is to perform a few small operating system tasks. In [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=175&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em><strong>Visual Studio&#8217;s Deployment Projects</strong></em> are quite limited. To get them to do more complicated setup tasks require writing <strong>custom deployment actions</strong> in C#. The problem with writing code is that it places an additional maintenance and testing burden on the developer. Often all that&#8217;s needed is to perform a few small operating system tasks. In these scenarios it just feels unjustified to revert to writing a bunch of C# setup logic.</p>
<p>I recently ran into such a scenario. As part of the deployment application, SQL Server 2005 Express had to be automatically unpacked. When the <em>SQL Server Express</em> setup utility is runned with the <em>/x argument</em>, it unpacks its contents, instead of installing SQL Server. The trick is how to execute this shell command with the minimum effort? The answer is to write a little <strong>Visual Basic script file (.vbs)</strong> that uses the <strong>WScript.Shell </strong>object. The emphasis is on little. I wouldn&#8217;t recommend sticking huge complicated installation logic in a script file. When you have lots of setup logic, then it&#8217;s time to write those C# custom actions, together with unit tests, and mocks. But for all those 1 liner shell commands, a script file is just the thing you need.</p>
<h2>Visual Basic Scripts (.vbs) Are Your Friend</h2>
<p>The VB script:</p>
<pre class="brush: vb;">
Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
WshShell.Exec(Property(&quot;CustomActionData&quot;) &amp; &quot;\SQLEXPR32.EXE /x:&quot;&quot;&quot; &amp; Property(&quot;CustomActionData&quot;) &amp; &quot;\SQLEXPR2005&quot;&quot;&quot;)
Set WshShell = Nothing
</pre>
<p>The <strong>Windows Script Host (WScript.Shell)</strong> object has two candidate methods to execute commands &#8211; <strong>Run </strong>and <strong><em>Exec</em></strong>. According to Microsoft, <em>if you need access to command-line output, you should use the <strong>Exec </strong>method instead</em>. In this case I did not specifically need access to shell output, but for whatever reason I was unable to get Run to work.</p>
<p><img class="size-full wp-image-178 aligncenter" style="border:1px solid black;" title="customactionproperties" src="http://openlandscape.files.wordpress.com/2009/03/customactionproperties.jpg?w=377&#038;h=340" alt="customactionproperties" width="377" height="340" /></p>
<p style="text-align:left;">Each<strong> custom action</strong> has access to the <strong>CustomActionData </strong>argument. This handy little argument is set on the custom action&#8217;s properties. It allows you to pass through the directory where the application was installed, using the global variable <strong>[TARGETDIR]</strong>.</p>
<p><strong>WScript.Shell.Exec</strong> allows you to execute any standard command line argument in a manner similar to using the <strong>Run</strong>&#8230; dialog box from the Start menu.</p>
<p><img class="size-full wp-image-177 alignright" style="border:1px solid black;margin-left:10px;margin-right:10px;" title="visualstudiodeploymentproject" src="http://openlandscape.files.wordpress.com/2009/03/visualstudiodeploymentproject.jpg?w=278&#038;h=143" alt="visualstudiodeploymentproject" width="278" height="143" />What&#8217;s nice about this solution is that it allows you to package SQL Server Express with your solution in one file, and then unpack it during the installation process. The other option is to unpack SQL Server beforehand and add the individual files to your deployment solution. If you&#8217;re using Visual SourceSafe, you will run into problems with some of SQL Server&#8217;s files that have very long names, and are not DOS compatible.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=175&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/03/23/executing-shell-commands-from-a-visual-studio-deployment-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/03/customactionproperties.jpg" medium="image">
			<media:title type="html">customactionproperties</media:title>
		</media:content>

		<media:content url="http://openlandscape.files.wordpress.com/2009/03/visualstudiodeploymentproject.jpg" medium="image">
			<media:title type="html">visualstudiodeploymentproject</media:title>
		</media:content>
	</item>
		<item>
		<title>Content Managment With SharePoint And Kentico</title>
		<link>http://openlandscape.wordpress.com/2009/03/11/content-managment-with-sharepoint-and-kentico/</link>
		<comments>http://openlandscape.wordpress.com/2009/03/11/content-managment-with-sharepoint-and-kentico/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 16:02:15 +0000</pubDate>
		<dc:creator>openlandscape</dc:creator>
				<category><![CDATA[EnterprisePortal]]></category>
		<category><![CDATA[ASP Membership]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Authorization]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[FBA]]></category>
		<category><![CDATA[Forms Based Authentication]]></category>
		<category><![CDATA[Kentico]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[MOSS 2007]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint 2007]]></category>

		<guid isPermaLink="false">http://openlandscape.wordpress.com/?p=165</guid>
		<description><![CDATA[Since I&#8217;ve joined Intervate Cape Town, I&#8217;ve been assigned to three projects. Two are Microsoft Office SharePoint Server 2007 (MOSS) solutions, and a small web site based on the Kentico Content Management System (CMS). It&#8217;s been a while since I worked with MOSS, so I had to relearn a lot of things.  The one [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=165&subd=openlandscape&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Since I&#8217;ve joined <a title="Intervate" href="http://www.intervate.com" target="_blank">Intervate Cape Town</a>, I&#8217;ve been assigned to three projects. Two are Microsoft Office SharePoint Server 2007 (MOSS) solutions, and a small web site based on the Kentico Content Management System (CMS). It&#8217;s been a while since I worked with MOSS, so I had to relearn a lot of things.  The one MOSS solution was an extranet application, that used Windows (Active Directory) and <strong>Forms Based Authentication (FBA)</strong>. Initially I was a bit confused at how SharePoint handles FBA, and to make matters worse there are some overlapping terms between FBA and the rest of SharePoint&#8217;s security model.</p>
<p>Here&#8217;s briefly what I learned:</p>
<ul>
<li>Permissions assigned to SharePoint groups and users are referred to as roles in the <strong><em>SharePoint Object Model (SOM)</em></strong>.</li>
<li>FBA, which is just standard ASP .NET Forms authentication, also has roles. These roles <em>correspond with SharePoint Security&#8217;s concept of a group</em>, and has nothing to do with SharePoint permissions.</li>
<li> SharePoint handles users and roles coming from ASP .NET Membership the same way as those coming from Windows AD. ASP .NET&#8217;s Membership becomes just another credential store to SharePoint.  You add an ASP .NET user/role in the same manner as you&#8217;d add a Windows AD user/group to a SharePoint user/group. When you search for users/groups you&#8217;ll notice that those coming from ASP .NET Membership are <em>prefixed with <strong>AspNetSqlRoleProvider</strong>:, or </em><em><strong>aspnetsqlmembershipprovider</strong>:</em> for ASP .NET roles, and users respectively.</li>
<li>It&#8217;s best to <strong><em>deploy SharePoint customizations using a SharePoint solution file (.wsp)</em></strong>. But where&#8217;s a good guide to explain how this works? Well, luckily we have good blogs like the <a href="http://paulsiu.wordpress.com/2009/03/06/sharepoint-solutions-file-wsp-schema" target="_blank">The Bonobo Journal</a> to explain it in layman&#8217;s terms.</li>
<li>Make sure you understand the <em><strong>do&#8217;s and don&#8217;ts of writing optimal code for SharePoint&#8217;s Object Model</strong></em>. Andreas Grabner from InfoQ did an <em><a title="SharePoint Object Model Performance Considerations" href="http://www.infoq.com/articles/SharePoint-Andreas-Grabner" target="_blank">excellent post</a></em> on this subject.</li>
</ul>
<p>The other project I got assigned to was done in <a title="Kentico" href="http://www.kentico.com" target="_blank"><strong><em>Kentico</em></strong></a>. Yes, I had the same confused expression when I heard about it. Turns out Kentico is a really neat .NET CMS that doesn&#8217;t get in your way. It&#8217;s jam packed with features, and has every standard web technology, like blogs and wikis, out of the box (and they are all really well implemented). What I really appreciate about Kentico is that it&#8217;s got a really well designed and simple architecture, based on standard ASP .NET components. When you <em>extend Kentico with custom code you literally open the Kentico Visual Studio solution and start creating ASP web pages (modules), and user controls (web parts)</em>. To debug something you just run the solution, and debug it as you&#8217;d do with any normal .NET web app. This enables developers to use a familiar development and deployment process.</p>
<p>Kentico <strong><em>arranges it&#8217;s web sites as a hierarchy of nodes</em></strong>. Each node has a document type (with its own table in the database), a form/data view, and a page/UI view. To retrieve any document is a straightforward matter:</p>
<pre class="brush: csharp;">

CMS.TreeEngine.TreeProvider tree = new CMS.TreeEngine.TreeProvider();

treeNode = tree.SelectSingleDocument(CMSContext.CurrentDocument.DocumentID);         

var nodeSet = tree.SelectNodes(CMSContext.CurrentSiteName, treeNode.NodeAliasPath + &quot;/%&quot;, treeNode.DocumentCulture, true, &quot;cms.file&quot;);
</pre>
<p>The above code finds the node of the current document shown to the user, and then retrieves all its child nodes. This kind of simplicity is found throughout Kentico, from the application itself, right down to the database. It also provides multiple extension points. You can <em>use the application itself to create new document types, and plug your own code in without using Visual Studio</em>. Your other options are to <em>write your own web parts, and modules in Visual Studio</em>. And lastly if you really wanted to, you can <em>directly query the database</em>. Corresponding directly with the database should not be your first choice, but <em>Kentico provides a database API</em> that assists you in this regard.</p>
<p>The <em><strong>deployment process</strong></em> is also as easy as it gets. To install Kentico you can either use the setup file, or just copy your solution over and connect it to the database. From there on you just export your sites, and import them again on the target server. And yes, <em>Kentico even exports/imports any custom classes that you might have added to it&#8217;s Visual Studio solution</em>.</p>
<p>And if you think Kentico is only for small web sites, think again. There&#8217;s support for load balancing and <em><strong>server farms</strong></em>. Definitely give Kentico&#8217;s free version a try next time your client doesn&#8217;t demand SharePoint.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openlandscape.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openlandscape.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openlandscape.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openlandscape.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openlandscape.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openlandscape.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openlandscape.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openlandscape.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openlandscape.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openlandscape.wordpress.com/165/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openlandscape.wordpress.com&blog=1902180&post=165&subd=openlandscape&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://openlandscape.wordpress.com/2009/03/11/content-managment-with-sharepoint-and-kentico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d7f27f723b0027be16efd595ee2b5a1b?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">openlandscape</media:title>
		</media:content>
	</item>
	</channel>
</rss>