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

<channel>
	<title>Bendsoft</title>
	<atom:link href="http://blog.bendsoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bendsoft.com</link>
	<description>The industry standard ADO.NET Connector for SharePoint</description>
	<lastBuildDate>Tue, 01 May 2012 14:39:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Joomla Tools 2.5 for SharePoint Released, now with NTLM support</title>
		<link>http://blog.bendsoft.com/2012/04/joomla-tools-2-5-for-sharepoint-released-now-with-ntlm-support/</link>
		<comments>http://blog.bendsoft.com/2012/04/joomla-tools-2-5-for-sharepoint-released-now-with-ntlm-support/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 21:55:28 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[Joomla]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=704</guid>
		<description><![CDATA[We implemented NTLM support with personal or global (static) authentication. This provide safer integrations and personalized content from SharePoint. Ensure that you use the latest version of the Camelot SharePoint Integration Toolkit when using this version of Joomla Tools. Using &#8230; <a href="http://blog.bendsoft.com/2012/04/joomla-tools-2-5-for-sharepoint-released-now-with-ntlm-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We implemented NTLM support with personal or global (static) authentication. This provide safer integrations and personalized content from SharePoint.</p>
<p>Ensure that you use the latest version of the Camelot SharePoint Integration Toolkit when using this version of Joomla Tools.</p>
<h2>Using NTLM Authentication</h2>
<p>To use this features please ensure your Camelot SharePoint Integration Toolkit is version 2.0.4 or newer.</p>
<hr />
<h2>Static vs. Personal Credentials</h2>
<p>Each connection holds which authentication to use. If you simply enable NTLM and leave the NTLM Username and Password fields’ blank personal authentication is used. This will trigger a login form to show whenever the connection is requested</p>
<p><a href="http://blog.bendsoft.com/wp-content/uploads/2012/04/NTLM-Authentication-Form.png"><img class="alignnone size-full wp-image-705" title="NTLM-Authentication-Form" src="http://blog.bendsoft.com/wp-content/uploads/2012/04/NTLM-Authentication-Form.png" alt="" width="236" height="104" /></a></p>
<p><em>Login dialog for personal login</em></p>
<hr />
<h2>Setting up a NTLM Connection to SharePoint</h2>
<p>This is done in the “<a href="http://blog.bendsoft.com/administrator/index.php?option=com_camelot_sharepoint&amp;view=camelotsharepointconnections">Camelot SharePoint Connections</a>”<br />
section where we added a few new options.</p>
<table style="border-collapse: collapse;" border="1">
<tbody>
<tr>
<td style="border: solid #D8D8D8 1px; padding: 2px;">Use NTLM</td>
<td style="border: solid #D8D8D8 1px; padding: 2px;">This enables NTLM authentication</td>
</tr>
<tr>
<td style="border: solid #D8D8D8 1px; padding: 2px;">NTLM Username (Static)</td>
<td style="border: solid #D8D8D8 1px; padding: 2px;">If you enter credentials here these will be used at any time, leave this field blank if you want personal credentials.</td>
</tr>
<tr>
<td style="border: solid #D8D8D8 1px; padding: 2px;">NTLM Password</td>
<td style="border: solid #D8D8D8 1px; padding: 2px;">Password associated with the static username</td>
</tr>
</tbody>
</table>
<h3>Setting modes summary</h3>
<h4>NTLM Off</h4>
<p><a href="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Off.png"><img class="alignnone size-full wp-image-706" title="Joomla-NTLM-settings-Off" src="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Off.png" alt="" width="322" height="68" /></a></p>
<h4>NTLM On with personal authentication</h4>
<p><a href="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Personal.png"><img class="alignnone size-full wp-image-707" title="Joomla-NTLM-settings-Personal" src="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Personal.png" alt="" width="322" height="68" /></a></p>
<h4>NTLM On with static authentication</h4>
<p><a class="lightbox" title="Joomla-NTLM-settings-Static" href="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Static.png"><img class="alignnone size-full wp-image-708" title="Joomla-NTLM-settings-Static" src="http://blog.bendsoft.com/wp-content/uploads/2012/04/Joomla-NTLM-settings-Static.png" alt="" width="322" height="68" /></a></p>
<hr />
<h2>Setting up the Camelot SharePoint Integration Toolkit for NTLM authentication</h2>
<p>Please review the NTLM section of the toolkit documentation at <a href="http://camelottoolkit.codeplex.com/documentation" target="_blank">http://camelottoolkit.codeplex.com/documentation</a>.</p>
<hr />
<h2>Download Joomla Tools for SharePoint</h2>
<p><a title="Download" href="http://www.bendsoft.com/downloads/sharepoint-joomla-tools/"><img src="http://www.bendsoft.com/media/2325/download_button.png" alt="Download Button" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/04/joomla-tools-2-5-for-sharepoint-released-now-with-ntlm-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Camelot PHP Tools 1.5</title>
		<link>http://blog.bendsoft.com/2012/02/introducing-camelot-php-tools-1-5/</link>
		<comments>http://blog.bendsoft.com/2012/02/introducing-camelot-php-tools-1-5/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 19:39:06 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Tools]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=688</guid>
		<description><![CDATA[This release fixes a few minor errors in the previous release and introduces two new commands that we made available in the latest release of the Camelot SharePoint Integration Toolkit available at http://camelottoolkit.codeplex.com/. We always keep the documentation up to &#8230; <a href="http://blog.bendsoft.com/2012/02/introducing-camelot-php-tools-1-5/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p>This release fixes a few minor errors in the previous release and introduces two new commands that we made available in the latest release of the Camelot SharePoint Integration Toolkit available at <a href="http://camelottoolkit.codeplex.com/">http://camelottoolkit.codeplex.com/</a>. We always keep the documentation up to date, checkout <a href="http://docs.bendsoft.com/camelot-php-tools/latest/">http://docs.bendsoft.com/camelot-php-tools/latest/</a> for the latest version of the PHP Tools documentation.</p>
<h2>The goodies in this update</h2>
<ul>
<li>ExecuteCount</li>
<li>ExecuteCamelotXmlLimit</li>
</ul>
<p>View the <a href="http://docs.bendsoft.com/camelot-php-tools/latest/changelog/">changelog</a> for complete details. </p>
<h2>Counts</h2>
<p>The counting method is reached through the SharePointQuery class by replacing the SQL argument name with count</p>
<p><pre class="brush: php">$SharePointQuery = new SharePointQuery(array(
    'count' =&gt; &quot;SELECT ID FROM Tasks Where ID &gt; 10&quot;,
    'connection_name' =&gt; 'SharePointConnection1'
));
$recordCount = $SharePointQuery-&gt;CamelotSoap-&gt;_count;
</pre></p>
<h2>Limits, or skip and take</h2>
<p>The SharePoint API does not support offset in limit commands so we had to implement this in a separate method. This query looks like an ordinary SharePointQuery but we added skip and take parameters.</p>
<p><pre class="brush: php">$SharePointQuery = new SharePointQuery(array(
    'sql' =&gt; &quot;SELECT * FROM Tasks Where ID &gt; 10&quot;,
    'connection_name' =&gt; &quot;SharePointConnection1&quot;,
    'skip' =&gt; 7,
    'take' =&gt; 10
));
</pre></p>
<p>The above command would select stuff from the Tasks list and skip the first 7 result rows returning row 8 to 17.</p>
<p>A good way to use this is to first run a count to verify the amount of records available and then run the skip/take query</p>
<p><pre class="brush: php">// Query arguments
$query = &quot;SELECT * FROM Tasks Where ID &gt; 10&quot;;
$connection = &quot;SharePointConnection1&quot;;
$skip = 5;
$take = 4;

// Get the total amount of records
$CountQuery = new SharePointQuery(array(
    'count' =&gt; $query,
    'connection_name' =&gt; $connection
));

$recordCount = $CountQuery-&gt;CamelotSoap-&gt;_count;

// Cannot perform query, to many skips
if($skip &gt; $recordCount){
    die(&quot;You cannot skip more records than available&quot;);
}

// The results are returned to the $SharePointQuery variable
$SharePointQuery = new SharePointQuery(array(
    'sql' =&gt; $query,
    'connection_name' =&gt; $connection,
    'skip' =&gt; $skip,
    'take' =&gt; $take
));

// Print the result
pr($SharePointQuery); // or print_r($SharePointQuery);
</pre></p>
<p>Let us know if you have any questions; also consider using the forums <a href="http://forum.bendsoft.com">http://forum.bendsoft.com</a></p>
<p><a title="Download" href="http://www.bendsoft.com/downloads/sharepoint-php-tools/download/"><img src="http://www.bendsoft.com/media/2325/download_button.png" alt="Download Button" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/02/introducing-camelot-php-tools-1-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Downloading SharePoint Attachments with PHP, a snippet</title>
		<link>http://blog.bendsoft.com/2012/02/downloading-sharepoint-attachments-with-php-a-snippet/</link>
		<comments>http://blog.bendsoft.com/2012/02/downloading-sharepoint-attachments-with-php-a-snippet/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 16:32:57 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=681</guid>
		<description><![CDATA[To use this code, please download the latest version of Camelot PHP Tools and the Camelot SharePoint Integration Toolkit We have gotten a few questions how to download attachments from SharePoint List Items using Camelot PHP Tools. Originally we planned to &#8230; <a href="http://blog.bendsoft.com/2012/02/downloading-sharepoint-attachments-with-php-a-snippet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p>To use this code, please download the latest version of <a href="http://www.bendsoft.com/downloads/sharepoint-php-tools/">Camelot PHP Tools</a> and the <a href="http://camelottoolkit.codeplex.com/" target="_blank">Camelot SharePoint Integration Toolkit</a></p>
<p>We have gotten a few questions how to download attachments from SharePoint List Items using Camelot PHP Tools. Originally we planned to implement a separate library doing this but recently came to the conclusion that it wasn’t really necessary. Instead we will rely on Camelot XML and the original SQL syntax.</p>
<p><pre class="brush: php">$SharePointQuery = new SharePointQuery(array(
    'sql' =&gt; &quot;SELECT FileName, Data FROM Testlist.Attachments WHERE ItemID = 1&quot;,
    'connection_name' =&gt; 'SharePointConnection1'
));</pre></p>
<h2>Snippet</h2>
<p>The snippet below illustrates how to download the first attachment available with ItemId 1<br />
<pre class="brush: php">/*
 * Camelot PHP Tools
 *
 * @version 1.5
 * @author Bendsoft
 * @package PHP Tools
 * @subpackage Camelot
 * @license FreeBSD License (www.bendsoft.com/licensing/)
 *
 * Note! 
 * Set up settings.php before using this file
 */
error_reporting(E_COMPILE_ERROR);
ini_set('display_errors', '1');


// Load all required files for Camelot PHP Tools
require_once '../loader.php';

try {
    $SharePointQuery = new SharePointQuery(array(
                'sql' =&gt; &quot;SELECT FileName, Data FROM Testlist.Attachments WHERE ItemID = 1&quot;,
                'connection_name' =&gt; 'SharePointConnection1'
            ));

    // Store the file info, change the index [0] if you have multiple attachments
    $file = $SharePointQuery-&gt;CamelotSoap-&gt;_sorted-&gt;_content[0];
    
    // Send the file to the browser
    header(&quot;Content-type: application/data&quot;);
    header('Content-Disposition: attachment; filename=&quot;' . $file[&quot;FileName&quot;] . '&quot;');
    header(&quot;Content-Description: PHP Generated Data&quot;);
    
    echo base64_decode($file[&quot;Data&quot;]);
    
    $file = null;
    
} catch (Exception $exc) {
    echo $exc-&gt;getTraceAsString();
}</pre></p>
<p>It doesn&#8217;t really get harder than this, enjoy.<br />
&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/02/downloading-sharepoint-attachments-with-php-a-snippet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New free web part, Introducing the Camelot SharePoint SQL Commander Web Part</title>
		<link>http://blog.bendsoft.com/2012/01/new-free-web-part-introducing-the-camelot-sharepoint-sql-commander-web-part/</link>
		<comments>http://blog.bendsoft.com/2012/01/new-free-web-part-introducing-the-camelot-sharepoint-sql-commander-web-part/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 16:09:24 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[Web Parts]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=664</guid>
		<description><![CDATA[The Camelot SharePoint SQL Commander Web Part is a simple yet powerful query browser for Microsoft SharePoint 2007 and 2010. Note! This web part does not query the tables in the SQL server; instead it queries the lists and libraries &#8230; <a href="http://blog.bendsoft.com/2012/01/new-free-web-part-introducing-the-camelot-sharepoint-sql-commander-web-part/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p>The Camelot SharePoint SQL Commander Web Part is a simple yet powerful query browser for Microsoft SharePoint 2007 and 2010.</p>
<p class="docnote"><strong>Note!</strong> This web part does not query the tables in the SQL server; instead it queries the lists and libraries that are enclosed within SharePoint. Read more about this in the Camelot .NET Connector section.</p>
<h2><a class="lightbox" title="SP List Commander" href="http://blog.bendsoft.com/wp-content/uploads/2012/01/SP-List-Commander.png"><img class="alignnone size-large wp-image-672" title="SP List Commander" src="http://blog.bendsoft.com/wp-content/uploads/2012/01/SP-List-Commander-1024x675.png" alt="" width="640" height="421" /></a></h2>
<h2>Official web page</h2>
<p><a href="http://www.bendsoft.com/downloads/sharepoint-web-parts/sharepoint-sql-commander/" target="_blank">http://www.bendsoft.com/downloads/sharepoint-web-parts/sharepoint-sql-commander/</a></p>
<h2>FAQ</h2>
<h3>What does this web part do?</h3>
<p>It give you an interface in SharePoint where you can query your SharePoint lists and libraries with sql. You can experiment with queries of modify your list items directly with SQL. This tool is great for for anyone who quickly want to change large amounts of list items or simply learn to know how the lists works in depth.</p>
<h3>How do I install it?</h3>
<p>Since this is a highly custom built web part you need to install it manually, you will find everything you need to know about the installation <a href="http://www.bendsoft.com/downloads/sharepoint-web-parts/sharepoint-sql-commander/installation/" target="_blank">here</a>.</p>
<h3>What else do I need?</h3>
<p>You must install the <a href="http://www.bendsoft.com/net-sharepoint-connector/" target="_blank">Camelot .NET Connector</a> and the <a href="http://camelottoolkit.codeplex.com/" target="_blank">Camelot SharePoint Integration Toolkit</a> on the same SharePoint server as the Web Part.</p>
<h3>Are there any costs involved?</h3>
<p>The web part and the integration toolkit is free to use, they are also open source so you will be able to modify them if you want to. The Camelot .NET Connector is licensed but you can use the trial license to try it, you will find everything you need to know <a href="http://www.bendsoft.com/net-sharepoint-connector/" target="_blank">here</a>.</p>
<h3>I&#8217;m a developer, do I need it?</h3>
<p>This web part is great for developers, you can quickly have a look at the stuff under the hood and see how columns are named, what datatype they are using and so on.</p>
<h3>I&#8217;m an SharePoint administrator, will it improve my life?</h3>
<p>Yes, most likely. If you ever tried to delete or rename 10000 records in a list at once you will benefit from using this. Or if you simply want an inline CLI to view and modify your SharePoint Lists and Libraries, it&#8217;s very powerful.</p>
<p>&nbsp;</p>
<p><a title="Download" href="http://www.bendsoft.com/downloads/sharepoint-web-parts/sharepoint-sql-commander/download/"><img src="http://www.bendsoft.com/media/2325/download_button.png" alt="Download Button" /></a></p>
<p>Use our <a href="http://www.bendsoft.com/contact-us/">contact form</a> if you have any questions!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/01/new-free-web-part-introducing-the-camelot-sharepoint-sql-commander-web-part/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bendsoft announces Camelot .NET Connector 2.0 in May 2012!</title>
		<link>http://blog.bendsoft.com/2012/01/bendsoft-announces-camelot-net-connector-2-0-in-may-2012/</link>
		<comments>http://blog.bendsoft.com/2012/01/bendsoft-announces-camelot-net-connector-2-0-in-may-2012/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 11:19:08 +0000</pubDate>
		<dc:creator>Ulf Engstrand</dc:creator>
				<category><![CDATA[Camelot .NET Connector]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=651</guid>
		<description><![CDATA[Nyköping, Sweden, Jan 26, 2012 Bendsoft Corporation announced today that it will release version 2.0 of its core software product for accessing data in Microsoft SharePoint, the Camelot .NET Connector, in May of 2012. The Camelot .NET Connector 2.0 will &#8230; <a href="http://blog.bendsoft.com/2012/01/bendsoft-announces-camelot-net-connector-2-0-in-may-2012/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p><em>Nyköping, Sweden, Jan 26, 2012</em></p>
<p>Bendsoft Corporation announced today that it will release version 2.0 of its core software product for accessing data in Microsoft SharePoint, the Camelot .NET Connector, in May of 2012. The Camelot .NET Connector 2.0 will include an extensive suite of new features including an updated SQL syntax with <strong>JOIN</strong> and <strong>UNION </strong>support. The Camelot .NET Connector 1.1 is the latest version of Bendsoft&#8217;s industry-leading ADO.NET driver for connecting to Microsoft SharePoint, designed and built on open standards, enabling developers to query data in Microsoft SharePoint using standard SQL language. In combination with open source toolkits provided by Bendsoft, such as the Camelot SharePoint Integration Toolkit and SharePoint PHP Tools, it is the best solution for integrating SharePoint from virtually any other platform or programming language like PHP, Java or Objective-C.</p>
<p>The Camelot .NET Connector 2.0 will dramatically extend the core capabilities of the connector. This release will offer the first implementation of JOIN and UNION SQL commands that will work between any lists and columns in your SharePoint site. Advantages of this feature will be simplified integration with external applications and extended possibilities for data synchronization, data reporting and analytics inside or outside SharePoint.</p>
<p>Eric Herlitz, Co-Founder and Sales Director commented, <em>&#8220;We are very excited to make this announcement, introducing ground-breaking capabilities of the Camelot .NET Connector that will most definitely lower the costs of integration and maintenance in many of our customer&#8217;s SharePoint projects.&#8221;</em></p>
<p>Ulf Engstrand, Co-Founder and Systems Architect, adds, <em>&#8220;The Camelot .NET Connector in combination with our open source toolkits provide a unique solution that developers need to efficiently integrate SharePoint with other applications. Many of our customers have specifically asked for JOIN support and we feel that this is a natural step to take.&#8221;</em></p>
<p>Existing customers will be offered a free upgrade to Camelot .NET Connector version 2.0 when it becomes available. The new version will not break feature compatibility with version 1.1, but recompilation may be required.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/01/bendsoft-announces-camelot-net-connector-2-0-in-may-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Camelot PHP Tools 1.4 for SharePoint released, now supporting NTLM Authentication!</title>
		<link>http://blog.bendsoft.com/2012/01/camelot-php-tools-1-4-for-sharepoint-released-now-supporting-ntlm-authentication/</link>
		<comments>http://blog.bendsoft.com/2012/01/camelot-php-tools-1-4-for-sharepoint-released-now-supporting-ntlm-authentication/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 20:37:08 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=635</guid>
		<description><![CDATA[When the latest version of the Camelot PHP Tools is paired with the Camelot SharePoint Integration Toolkit version 2.0.2 or newer it has full support for NTLM authentication. Either static or personal credentials can be used. Read more about this &#8230; <a href="http://blog.bendsoft.com/2012/01/camelot-php-tools-1-4-for-sharepoint-released-now-supporting-ntlm-authentication/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p>When the latest version of the Camelot PHP Tools is paired with the <a href="http://camelottoolkit.codeplex.com/" target="_blank">Camelot SharePoint Integration Toolkit</a> version 2.0.2 or newer it has full support for NTLM authentication.</p>
<p>Either static or personal credentials can be used. Read more about this in the documentation, <a href="http://docs.bendsoft.com/camelot-php-tools/latest/examples-and-tutorials/ntlm-authentication/" target="_blank">http://docs.bendsoft.com/camelot-php-tools/latest/examples-and-tutorials/ntlm-authentication/</a></p>
<h2>Setting up a NTLM Connection to SharePoint</h2>
<p><pre class="brush: php">// The settings are created in the settings.php file

// Creates a WcfSettings List Object
$WcfSettingsList = new WcfSettingsList();

// Add the connection &quot;SharePointConnection1&quot; enforcing NTLM authentication
$WcfSettingsList-&gt;append(new WcfSettingsObject(&quot;SharePointConnection1&quot;, &quot;http://sharepointserver.com:8080/?wsdl&quot;, &quot;MySharedKey&quot;, &quot;sharepoint_connection&quot;, 0, &quot;ntlm&quot;)); // server using ntlm
$WcfSettingsList-&gt;append(new WcfSettingsObject(&quot;SharePointConnection2&quot;, &quot;http://anotherserver.com:8080/?wsdl&quot;, &quot;MySharedKey&quot;, &quot;sharepoint_connection&quot;)); // server not using ntlm</pre></p>
<h2>Static NTLM Credentials</h2>
<p>Static credentials are used when you only want to authenticate the connection using a single account.<br />
<pre class="brush: php">// Enter in settings.php

$GLOBALS['NTLM_CREDENTIALS'] = array(
    'ntlm_username' =&gt; 'domain user',
    'ntlm_password' =&gt; 'password'
);</pre></p>
<h2>Personal NTLM Credentials</h2>
<p>When using personal NTLM Credentials each user/client will have to handle their own authentication, this is automatically handled by the class CamelotSoapClient that outputs a login form when required.</p>
<p><a href="http://blog.bendsoft.com/wp-content/uploads/2012/01/NTLM-Authentication-Form.png"><img class="alignnone size-full wp-image-640" title="NTLM Authentication Form" src="http://blog.bendsoft.com/wp-content/uploads/2012/01/NTLM-Authentication-Form.png" alt="" width="257" height="120" /></a></p>
<hr />
<p><a title="Download" href="http://www.bendsoft.com/downloads/sharepoint-php-tools/download/"><img src="http://www.bendsoft.com/media/2325/download_button.png" alt="Download Button" /></a></p>
<p>Use our <a href="http://www.bendsoft.com/contact-us/">contact form</a> if you have any questions!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2012/01/camelot-php-tools-1-4-for-sharepoint-released-now-supporting-ntlm-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint surveys on external sites</title>
		<link>http://blog.bendsoft.com/2011/12/sharepoint-surveys-on-external-sites/</link>
		<comments>http://blog.bendsoft.com/2011/12/sharepoint-surveys-on-external-sites/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 13:11:55 +0000</pubDate>
		<dc:creator>Ulf Engstrand</dc:creator>
				<category><![CDATA[Camelot .NET Connector]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=555</guid>
		<description><![CDATA[Recently I discovered the SharePoint survey list type. It allows you to quickly create questions that you would like to have people answer and then view graphical summaries of the responses. It can for example be useful for companies to &#8230; <a href="http://blog.bendsoft.com/2011/12/sharepoint-surveys-on-external-sites/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p>Recently I discovered the SharePoint survey list type. It allows you to quickly create questions that you would like to have people answer and then view graphical summaries of the responses. It can for example be useful for companies to collect consumer opinions about their products or services.</p>
<p><a class="lightbox" title="Survey_08" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_081.png"><img class="alignnone size-medium wp-image-608" title="Survey_08" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_081-300x238.png" alt="" width="300" height="238" /></a>  <a class="lightbox" title="Survey_07" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_071.png"><img class="alignnone size-medium wp-image-607" title="Survey_07" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_071-300x233.png" alt="" width="300" height="233" /></a></p>
<p>In this article I will show how to integrate SharePoint surveys on your external sites using the Camelot .NET Connector. I will also try to briefly explain the structure of SharePoint survey lists. I have developed a simple survey control based on the ASP.NET Wizard control that walks the user through the questions. In the last step of the wizard, it completes the survey by inserting the results back into the SharePoint survey list. This is a great example of how to creatively use the Camelot .NET Connector and give you more time to work on what matters most &#8211; your business.</p>
<h2>Requirements</h2>
<ul>
<li>The <a href="http://www.bendsoft.com/net-sharepoint-connector/" target="_blank">Camelot .NET Connector</a> version 1.1.1. There is a free 90 days trial available.</li>
</ul>
<p>This example project can be downloaded here!</p>
<p><a href="http://bendsoft.com/download.php?id=6c9ce15b4ee046f31bf1374e2f9c66e4"><img src="http://blog.bendsoft.com/wp-content/uploads/2011/04/download_button.png" alt="Download example!" width="183" height="53" /></a></p>
<h2>The structure of SharePoint survey lists</h2>
<p>When you see a survey list in SharePoint for the first time, it may not be obvious how to work with its content. Each question is represented as a column in the list. The column display name (data column <em>DisplayName</em>) contains the actual question. The column type (data column <em>Type</em>) indicates the type of the answer, e.g. Text, Choice, MultiChoice, Boolean, etc. Depending on the type, the question needs to be presented differently. In addition, we should validate that required questions are answered by the user (data column <em>Required</em>). For simplicity in this example, we will only implement some of the types.</p>
<p>Each inserted item in a survey list represents one participation in the survey. By default, the same SharePoint user can only participate in a survey once. If you want to publish your survey externally and allow non-sharepoint users to participate, you must allow multiple responses. This setting can be changed under survey options.</p>
<p>The order of the questions is another difficult issue when selecting. I found that every survey has a content type with the same name as the list itself. By querying the list with this content type, the columns always come out in the same order as arranged in SharePoint. For example, to select all the answers in correct order from the survey list &#8220;Customer Survey&#8221;, you should use &#8220;<em>SELECT * FROM `Customer Survey`.`Customer Survey`</em>&#8220;.</p>
<h2>Preparation</h2>
<p>In SharePoint, create a new survey list in one of your sites. Add a number of questions to the survey. Make sure to enable multiple responses under survey options as shown below. In this example, I have created a silly &#8220;Cats&#8221; survey, that evaluates what type of cat person you are.</p>
<p><a class="lightbox" title="Survey_01" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_011.png"><img class="alignnone size-medium wp-image-601" title="Survey_01" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_011-300x233.png" alt="" width="300" height="233" /></a>  <a class="lightbox" title="Survey_02" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_021.png"><img class="alignnone size-medium wp-image-602" title="Survey_02" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_021-300x233.png" alt="" width="300" height="233" /></a></p>
<p><a class="lightbox" title="Survey_03" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_031.png"><img class="alignnone size-medium wp-image-603" title="Survey_03" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_031-300x233.png" alt="" width="300" height="233" /></a>  <a class="lightbox" title="Survey_06" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_061.png"><img class="alignnone size-medium wp-image-606" title="Survey_06" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_061-300x233.png" alt="" width="300" height="233" /></a></p>
<h2>Building a web user control for presenting surveys</h2>
<p>My aim was to create a common control that can be used on several sites so I decided to go with a ASP.NET web user control. This control takes two properties; <em>ListName</em> and <em>ConnectionString</em>. The first gives the name of a survey list that should be displayed and the second the connection string used for connecting to SharePoint.</p>
<p>In Visual Studio 2010, add a new Web User Control (language C#) to your web site and call it <em>SurveyControl.ascx</em>. Ensure that “Place code in separate file” is checked.</p>
<p><a class="lightbox" title="Survey_00" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_001.png"><img class="alignnone size-medium wp-image-600" title="Survey_00" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_001-300x228.png" alt="" width="300" height="228" /></a></p>
<h3>SurveyControl.ascx</h3>
<p>Replace the content of the markup file (<em><em>SurveyControl</em>.ascx</em>) with the following lines. It shows a standard ASP.NET Wizard control with a start step that should present the survey and an end step that completes the survey. All the questions will be added as steps in between the start and the end step. The <strong>OnFinishButtonClick</strong> and <strong>OnNextButtonClick</strong> events are handled by us. We have also added some css styling and graphics to the control to improve the visual impression. You can of course make the control more general by adding all static texts as inputs to the control.</p>
<p><pre class="brush: xml">&lt;%@ Control Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;SurveyControl.ascx.cs&quot; Inherits=&quot;SurveyWebSiteExample.SurveyControl&quot; %&gt;

&lt;style type=&quot;text/css&quot;&gt;
    .survey
    {
        font-family:trebuchet ms;        
        padding:10px;           
    }
&lt;/style&gt;

&lt;div style=&quot;margin-left:auto; margin-right:auto; margin-top:100px; width:700px; overflow:hidden; border:solid black 1px;&quot;&gt;
    &lt;div&gt;&lt;img src=&quot;images/cat.jpg&quot; width=&quot;100%&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
    &lt;div class=&quot;survey&quot;&gt;
        &lt;asp:Wizard ID=&quot;SurveyWizard&quot; runat=&quot;server&quot; DisplaySideBar=&quot;false&quot; OnFinishButtonClick=&quot;FinishButtonClicked&quot; OnNextButtonClick=&quot;NextButtonClicked&quot;&gt;
        &lt;WizardSteps&gt;
            &lt;asp:WizardStep ID=&quot;StartStep&quot; runat=&quot;server&quot;&gt;
                &lt;p&gt;We would like to ask you a few questions about cats. This survey will help you find what temperament of cat is a good match for you. Please click next to continue!&lt;/p&gt;
            &lt;/asp:WizardStep&gt;
            &lt;asp:WizardStep ID=&quot;EndStep&quot; runat=&quot;server&quot; StepType=&quot;Complete&quot; AllowReturn=&quot;false&quot; &gt;
                &lt;p&gt;Thank you for participating!&lt;/p&gt;
            &lt;/asp:WizardStep&gt;
        &lt;/WizardSteps&gt;
        &lt;/asp:Wizard&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre></p>
<h3>SurveyControl.ascx.cs</h3>
<p>Now its time to implement the code behind our control. In <strong>Page_Init</strong> we will add the questions to the survey. To get all the questions, we simply execute a <a href="http://docs.bendsoft.com/camelot-net-connector/latest/sql-statement-syntax/show-columns/" target="_blank">SHOW FIELDS</a> query on our list. The columns returned are listed <a href="http://docs.bendsoft.com/camelot-net-connector/latest/reference/show-columns/" target="_blank">here</a>. We have added a public property named <em>ListName</em>, that should give us the name of the survey list. Using some additional LINQ on our results, we sort out all the questions in the list and iterate over the result set. Each question will be added as new wizard step in our wizard control. The <em>Type</em> column is used to determine in what way the question will be presented. For example, <em>Boolean</em> is represented by a RadioButton control showing YES/NO. For <em>Choice</em> and <em>MultiChoice</em> fields we can use the <em>EnumValues</em> column to retrieve the alternatives. The question itself is shown at the top of the page.</p>
<p>The Camelot .NET Connector requires a connection string for connecting to SharePoint so we need to provide a property for that as well. The connection string is assumed to be stored in the <em>web.config</em>. The following connection string template can be used in most cases but all options are descibed in the connector <a href="http://docs.bendsoft.com/camelot-net-connector/latest/reference/connection-string-options/" target="_blank">documentation</a>.</p>
<p><pre class="brush: xml">&lt;add name=&quot;sharepoint_sales&quot; connectionString=&quot;Server=my.sharepointserver.com;Database=customers;User=myuser;Password=mypass;Authentication=Ntlm;TimeOut=60;&quot; /&gt;</pre></p>
<p>So, altogether, the code in <strong>Page_Init</strong> looks as follows.</p>
<p><pre class="brush: csharp">        protected void Page_Init(object sender, EventArgs e)
        {
            _questions = Helper.ExecuteDataTable(&quot;SHOW FIELDS FROM `&quot; + ListName + &quot;`.`&quot; + ListName + &quot;`&quot;, ConfigurationManager.ConnectionStrings[this.ConnectionString].ConnectionString);

            foreach (DataRow q in _questions.AsEnumerable().Where(r =&gt; (bool)r[&quot;VisibleInView&quot;] == true &amp;&amp; (bool)r[&quot;ReadOnly&quot;] == false &amp;&amp; (string)r[&quot;Name&quot;] != &quot;ContentType&quot;))
            {
                var step = new WizardStep();

                if ((bool)q[&quot;Required&quot;])
                    step.Controls.Add(new LiteralControl(&quot;&lt;h2&gt;&quot; + q[&quot;DisplayName&quot;] + &quot;&lt;font color=&quot;red&quot;&gt; *&lt;/font&gt;&lt;/h2&gt;&quot;));
                else
                    step.Controls.Add(new LiteralControl(&quot;&lt;h2&gt;&quot; + q[&quot;DisplayName&quot;] + &quot;&lt;/h2&gt;&quot;));

                SurveyWizard.WizardSteps.Insert(SurveyWizard.WizardSteps.Count - 1, step);

                switch ((string)q[&quot;Type&quot;])
                {
                    case &quot;Choice&quot;:
                        var singleChoice = new RadioButtonList();
                        singleChoice.ID = ((Guid)q[&quot;ID&quot;]).ToString();

                        foreach (Match choice in Regex.Matches((string)q[&quot;EnumValues&quot;], @&quot;[(.*?)]&quot;))
                            singleChoice.Items.Add(choice.Groups[1].Value);

                        step.Controls.Add(singleChoice);
                        break;
                    case &quot;MultiChoice&quot;:
                        var multiChoice = new CheckBoxList();
                        multiChoice.ID = ((Guid)q[&quot;ID&quot;]).ToString();

                        foreach (Match choice in Regex.Matches((string)q[&quot;EnumValues&quot;], @&quot;[(.*?)]&quot;))
                            multiChoice.Items.Add(choice.Groups[1].Value);

                        step.Controls.Add(multiChoice);
                        break;
                    case &quot;Text&quot;:
                        var singleLineText = new TextBox();
                        singleLineText.ID = ((Guid)q[&quot;ID&quot;]).ToString();

                        step.Controls.Add(singleLineText);
                        break;
                    case &quot;Boolean&quot;:
                        var yesNo = new RadioButtonList();
                        yesNo.ID = ((Guid)q[&quot;ID&quot;]).ToString();

                        yesNo.Items.Add(&quot;Yes&quot;);
                        yesNo.Items.Add(&quot;No&quot;);

                        step.Controls.Add(yesNo);
                        break;
                    default:
                        break;
                }
            }
        }</pre></p>
<p>We also need to implement event handlers for the <strong>OnFinishButtonClick</strong> and <strong>OnNextButtonClick</strong> events. In <strong>NextButtonClicked</strong> method we will do some validation of the answers before going to the next question. In this example, we will only validate required questions. However, it would be possible to also validate the actual data entered by the user, such as text length or number range. If a required question is not answered by the user, this method will return a cancel notification to the wizard control.</p>
<p>The code in <strong>NextButtonClicked</strong> looks as follows.</p>
<p><pre class="brush: csharp">        protected void NextButtonClicked(object sender, WizardNavigationEventArgs e)
        {
            if (SurveyWizard.ActiveStepIndex == 0) return;
                 
            var index = 0;
            foreach (DataRow q in _questions.AsEnumerable().Where(r =&gt; (bool)r[&quot;VisibleInView&quot;] == true &amp;&amp; (bool)r[&quot;ReadOnly&quot;] == false &amp;&amp; (string)r[&quot;Name&quot;] != &quot;ContentType&quot;))
            {
                if (index == SurveyWizard.ActiveStepIndex - 1)
                {
                    var control = SurveyWizard.ActiveStep.FindControl(((Guid)q[&quot;ID&quot;]).ToString());

                    if (control != null)
                    {
                        string value = null;

                        switch ((string)q[&quot;Type&quot;])
                        {
                            case &quot;Choice&quot;:
                                value = ((RadioButtonList)control).SelectedValue;
                                break;
                            case &quot;MultiChoice&quot;:
                                value = ((CheckBoxList)control).Items.Cast&lt;ListItem&gt;().Where(m =&gt; m.Selected == true).Select(m =&gt; m.Value).FirstOrDefault();
                                break;
                            case &quot;Text&quot;:
                                value = ((TextBox)control).Text;
                                break;
                            case &quot;Boolean&quot;:
                                value = ((RadioButtonList)control).SelectedValue == &quot;Yes&quot; ? &quot;true&quot; : &quot;false&quot;;
                                break;
                            default:
                                break;
                        }

                        if ((bool)q[&quot;Required&quot;] &amp;&amp; string.IsNullOrEmpty(value))
                        {
                            e.Cancel = true;
                            return;
                        }
                    }

                    return;
                }
                index++;
            }
        }</pre></p>
<p>The <strong>FinishButtonClicked</strong> method is called when the user finishes the survey. It will gather all the answers and form the <a href="http://docs.bendsoft.com/camelot-net-connector/latest/sql-statement-syntax/insert/" target="_blank">INSERT</a> query. Again, each type of question needs to be handled differently. The answers are first added to a dictionary and then the insert statement is built using LINQ.</p>
<p>The code in <strong>FinishButtonClicked</strong> looks as follows.</p>
<p><pre class="brush: csharp">        protected void FinishButtonClicked(object sender, WizardNavigationEventArgs e)
        {
            NextButtonClicked(sender, e);
            if (e.Cancel) return;

            var answers = new Dictionary&lt;string, object&gt;();

            foreach (DataRow q in _questions.AsEnumerable().Where(r =&gt; (bool)r[&quot;VisibleInView&quot;] == true &amp;&amp; (bool)r[&quot;ReadOnly&quot;] == false &amp;&amp; (string)r[&quot;Name&quot;] != &quot;ContentType&quot;))
            {
                var control = SurveyWizard.FindControl(((Guid)q[&quot;ID&quot;]).ToString());

                switch ((string)q[&quot;Type&quot;])
                {
                    case &quot;Choice&quot;:
                        string singleChoiceAnswer = ((RadioButtonList)control).SelectedValue;
                        answers.Add(((Guid)q[&quot;ID&quot;]).ToString(&quot;N&quot;), singleChoiceAnswer);
                        break;
                    case &quot;MultiChoice&quot;:
                        string[] multiChoiceAnswer = ((CheckBoxList)control).Items.Cast&lt;ListItem&gt;().Where(m =&gt; m.Selected == true).Select(m =&gt; m.Value).ToArray();
                        answers.Add(((Guid)q[&quot;ID&quot;]).ToString(&quot;N&quot;), multiChoiceAnswer);
                        break;
                    case &quot;Text&quot;:
                        string singleLineTextAnswer = ((TextBox)control).Text;
                        answers.Add(((Guid)q[&quot;ID&quot;]).ToString(&quot;N&quot;), singleLineTextAnswer);
                        break;
                    case &quot;Boolean&quot;:
                        bool yesNoAnswer = ((RadioButtonList)control).SelectedValue == &quot;Yes&quot; ? true : false;
                        answers.Add(((Guid)q[&quot;ID&quot;]).ToString(&quot;N&quot;), yesNoAnswer);
                        break;
                    default:
                        break;
                }
            }

            var insertCommand = &quot;INSERT INTO `&quot; + ListName + &quot;` SET &quot; + _questions.AsEnumerable().Where(r =&gt; (bool)r[&quot;VisibleInView&quot;] == true &amp;&amp; (bool)r[&quot;ReadOnly&quot;] == false &amp;&amp; (string)r[&quot;Name&quot;] != &quot;ContentType&quot;).Select(m =&gt; &quot;`&quot; + (string)m[&quot;Name&quot;] + &quot;`&quot; + &quot; = @&quot; + ((Guid)m[&quot;ID&quot;]).ToString(&quot;N&quot;)).Aggregate((a, b) =&gt; a + &quot;, &quot; + b);
            using (var connection = new SharePointConnection(ConfigurationManager.ConnectionStrings[this.ConnectionString].ConnectionString))
            {
                connection.Open();

                using (var command = new SharePointCommand(insertCommand, connection))
                {
                    foreach (var answer in answers)
                        command.Parameters.Add(&quot;@&quot; + answer.Key, answer.Value);

                    command.ExecuteNonQuery();
                }
            }
        }</pre></p>
<h2>Creating a sample page</h2>
<p>Add a new web page to your project (we are using <em>default.aspx</em> in this example) and replaced the content with the following markup code. On the top of the page, we register our new survey control and later down we add an instance of this control to the page. Remember that we need to set the <em>ListName</em> and <em>ConnectionString</em> properties to initialize the control. The named ConnectionString must also be added to the <em>web.config</em>.</p>
<p><pre class="brush: xml">&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;Default.aspx.cs&quot; Inherits=&quot;SurveyWebSiteExample._Default&quot; UICulture=&quot;en-US&quot; %&gt;

&lt;%@ Register TagName=&quot;Survey&quot; TagPrefix=&quot;camelot&quot; Src=&quot;~/SurveyControl.ascx&quot; %&gt;

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;

&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head runat=&quot;server&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;
    &lt;div&gt;
        &lt;camelot:Survey ID=&quot;Survey&quot; runat=&quot;server&quot; ListName=&quot;Cats&quot; ConnectionString=&quot;sharepoint_connection&quot;&gt;&lt;/camelot:Survey&gt;
    &lt;/div&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></p>
<h2>Testing the page</h2>
<p>Now, start your web site and browse to your page. If everything goes fine, your survey should show up.</p>
<p><a class="lightbox" title="Survey_09" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_091.png"><img class="alignnone size-medium wp-image-609" title="Survey_09" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_091-300x238.png" alt="" width="300" height="238" /></a>  <a class="lightbox" title="Survey_10" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_101.png"><img class="alignnone size-medium wp-image-610" title="Survey_10" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_101-300x238.png" alt="" width="300" height="238" /></a></p>
<p><a class="lightbox" title="Survey_11" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_111.png"><img class="alignnone size-medium wp-image-611" title="Survey_11" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_111-300x238.png" alt="" width="300" height="238" /></a>  <a class="lightbox" title="Survey_12" href="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_121.png"><img class="alignnone size-medium wp-image-612" title="Survey_12" src="http://blog.bendsoft.com/wp-content/uploads/2011/12/Survey_121-300x238.png" alt="" width="300" height="238" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2011/12/sharepoint-surveys-on-external-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New syntax in PHP Tools 1.3 Connections</title>
		<link>http://blog.bendsoft.com/2011/11/new-syntax-in-php-tools-1-3-connections/</link>
		<comments>http://blog.bendsoft.com/2011/11/new-syntax-in-php-tools-1-3-connections/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 10:42:44 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=563</guid>
		<description><![CDATA[Since we simplified the connection handling in PHP Tools 1.3 and store all connections in the settings file we have also changed the connection syntax for PHP Tools. The connection settings are now stored in the WcfSettingsObject object set up in &#8230; <a href="http://blog.bendsoft.com/2011/11/new-syntax-in-php-tools-1-3-connections/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p>Since we simplified the connection handling in PHP Tools 1.3 and store all connections in the settings file we have also changed the connection syntax for PHP Tools.</p>
<p>The connection settings are now stored in the WcfSettingsObject object set up in settings.php. We removed the compression, connString and sharedKey parameters from the argument array and moved this into the WcfSettingsObject.<br />
<pre class="brush: php">// Excerpt from settings.php
$WcfSettingsList = new WcfSettingsList();
$WcfSettingsList-&gt;append(new WcfSettingsObject(&quot;SharePointConnection1&quot;, &quot;http://sharepointserver.com:8080/?wsdl&quot;, &quot;MySharedKey&quot;, &quot;sharepoint_connection&quot;, 0));
$WcfSettingsList-&gt;append(new WcfSettingsObject(&quot;SharePointConnection2&quot;, &quot;http://sharepointserver.com:8080/?wsdl&quot;, &quot;MySharedKey&quot;, &quot;sharepoint_customerssite&quot;, 0));
$WcfSettingsList-&gt;append(new WcfSettingsObject(&quot;SharePointConnection3&quot;, &quot;http://sharepointserver.com:8080/?wsdl&quot;, &quot;MySharedKey&quot;, &quot;sharepoint_testsite&quot;, 0));
</pre></p>
<h2>Snippets</h2>
<h3>Selecting with SELECT</h3>
<p><pre class="brush: php">$SharePointQuery = new SharePointQuery(array(
    'sql' =&gt; &quot;SELECT * FROM Tasks WHERE ID &gt; 10&quot;,
    'connection_name' =&gt; 'SharePointConnection1'
));</pre></p>
<h3>Selecting by list and view name</h3>
<p><pre class="brush: php">$SharePointQuery = new SharePointQuery(
    array(
        'listName' =&gt; 'Tasks',
        'viewName' =&gt; 'All Tasks',
        'includeAttachements' =&gt; false,
        'connection_name' =&gt; 'SharePointConnection1',
        'columns' =&gt; ''
    )
);</pre></p>
<h3>Inserting</h3>
<p><pre class="brush: php">$SharePointNonQuery = new SharePointNonQuery(array(
    'sql' =&gt; &quot;INSERT INTO Tasks (Title,AssignedTo,Status,Priority,DueDate,PercentComplete) VALUES ('Test task from PHP',1,'In Progress','(1) High', '&quot;.  date('Y-m-d H:i:s') .&quot;',0.95)&quot;,
    'method' =&gt; 'ExecuteNonQuery',
    'connection_name' =&gt; 'SharePointConnection1'
));</pre></p>
<h3>Updating</h3>
<p><pre class="brush: php">$SharePointNonQuery = new SharePointNonQuery(array(
    'sql' =&gt; &quot;UPDATE Tasks SET Title = 'Test task from PHP (updated)' WHERE PercentComplete = 0.95 AND TITLE = 'Test task from PHP'&quot;,
    'method' =&gt; 'ExecuteNonQuery',
    'connection_name' =&gt; 'SharePointConnection1'
));</pre></p>
<h3>Deleting</h3>
<p><pre class="brush: php">$SharePointNonQuery = new SharePointNonQuery(array(
    'sql' =&gt; &quot;DELETE FROM Tasks WHERE Title = 'Test task from PHP (updated)' OR Title = 'Test task from PHP'&quot;,
    'method' =&gt; 'ExecuteNonQuery',
    'connection_name' =&gt; 'SharePointConnection1'
));</pre></p>
<h2>Using with stored procedures</h2>
<p>There is a complete list with available procedures at the documentation site, <a href="http://docs.bendsoft.com/camelot-net-connector/latest/procedures/" title="http://docs.bendsoft.com/camelot-net-connector/latest/procedures/" target="_blank">http://docs.bendsoft.com/camelot-net-connector/latest/procedures/</a></p>
<h3>Downloading a file</h3>
<p><pre class="brush: php">$download = new CamelotDownloadFile(array(
    &quot;file&quot; =&gt; $_GET[&quot;file&quot;],
    &quot;listName&quot; =&gt; 'Shared Documents',
    &quot;connection_name&quot; =&gt; 'SharePointConnection1'
));

$download-&gt;download_file();</pre></p>
<h3>Uploading a file</h3>
<p><pre class="brush: php">$args = array(  &quot;file&quot; =&gt; $_FILES,
    &quot;listName&quot; =&gt; 'Shared Documents',
    &quot;folder&quot; =&gt; 'Folder/',
    &quot;connection_name&quot; =&gt; 'SharePointConnection2'
); 

$UploadFile = new CamelotUploadFile($args);</pre></p>
<p>PHP Tools official documentation: <a href="http://docs.bendsoft.com/camelot-php-tools/latest/" title="http://docs.bendsoft.com/camelot-php-tools/latest/" target="_blank">http://docs.bendsoft.com/camelot-php-tools/latest/</a></p>
<p><a href="http://www.bendsoft.com/downloads/sharepoint-php-tools/" target="_blank"><img title="download_button" src="http://blog.bendsoft.com/wp-content/uploads/2011/04/download_button.png" alt="" width="183" height="53" /></a></p>
<p>Contact us if you have any questions regarding the PHP Tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2011/11/new-syntax-in-php-tools-1-3-connections/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing the Camelot SharePoint Integration Toolkit</title>
		<link>http://blog.bendsoft.com/2011/10/installing-the-camelot-sharepoint-integration-toolkit/</link>
		<comments>http://blog.bendsoft.com/2011/10/installing-the-camelot-sharepoint-integration-toolkit/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 14:48:25 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[Integration Toolkit]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=552</guid>
		<description><![CDATA[Camelot SharePoint Integration Toolkit simplifies integrations between SharePoint and other solutions, platforms and languages, e.g. PHP, Java, Objective-C and so on. It provides a set of standards for querying and transferring list and library data using standard SQL syntax and &#8230; <a href="http://blog.bendsoft.com/2011/10/installing-the-camelot-sharepoint-integration-toolkit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p>Camelot SharePoint Integration Toolkit simplifies integrations between SharePoint and other solutions, platforms and languages, e.g. PHP, Java, Objective-C and so on. It provides a set of standards for querying and transferring list and library data using standard SQL syntax and Camelot XML via self-hosted WCF services.</p>
<p>To better explain how to set up the Camelot SharePoint Integration Toolkit we&#8217;ve recorded this short screencast.</p>
<p>You can read more about the Integration Toolkit at <a href="http://www.bendsoft.com/downloads/camelot-sharepoint-integration-toolkit/">http://www.bendsoft.com/downloads/camelot-sharepoint-integration-toolkit/</a>, download and further instructions is available at Codeplex <a href="http://camelottoolkit.codeplex.com/">http://camelottoolkit.codeplex.com</a>.</p>
<p>
<object style="width:620px; height:410px;">
<param name="movie" value="http://www.youtube.com/v/yxtGcdjRWSE?version=3" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="window" />
<embed src="http://www.youtube.com/v/yxtGcdjRWSE?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" wmode="window" width="620" height="410"></object>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2011/10/installing-the-camelot-sharepoint-integration-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick look at the upcoming update of Camelot Joomla Tools for SharePoint</title>
		<link>http://blog.bendsoft.com/2011/10/quick-look-at-the-upcoming-update-of-camelot-joomla-tools-for-sharepoint/</link>
		<comments>http://blog.bendsoft.com/2011/10/quick-look-at-the-upcoming-update-of-camelot-joomla-tools-for-sharepoint/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 12:06:31 +0000</pubDate>
		<dc:creator>Eric Herlitz</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://blog.bendsoft.com/?p=548</guid>
		<description><![CDATA[It&#8217;s nearly a year ago since we released the last version of the Joomla Tools for SharePoint, our apologies. We have however focused a bit on enabling possibilities like direct transmit of data from SharePoint to the PHP world, including &#8230; <a href="http://blog.bendsoft.com/2011/10/quick-look-at-the-upcoming-update-of-camelot-joomla-tools-for-sharepoint/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://blog.bendsoft.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p>It&#8217;s nearly a year ago since we released the last version of the Joomla Tools for SharePoint, our apologies. We have however focused a bit on enabling possibilities like direct transmit of data from SharePoint to the PHP world, including Joomla, instead of distributing the data to the local database.</p>
<p>So, here is a preview of what to come, if you are interested in becoming a beta tester please contact us at <a href="http://www.bendsoft.com/contact-us/">http://www.bendsoft.com/contact-us/</a></p>
<p>
<object style="width:620px; height:410px;">
<param name="movie" value="http://www.youtube.com/v/jRCv0NCn6T8?version=3" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="window" />
<embed src="http://www.youtube.com/v/jRCv0NCn6T8?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" wmode="window" width="620" height="410"></object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bendsoft.com/2011/10/quick-look-at-the-upcoming-update-of-camelot-joomla-tools-for-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

