<?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"
	>

<channel>
	<title>Christophe Coenraets</title>
	<atom:link href="http://coenraets.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://coenraets.org/blog</link>
	<description></description>
	<pubDate>Fri, 23 May 2008 20:14:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Google Maps Collaboration Using Google&#8217;s New ActionScript API, Flex, and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/#comments</comments>
		<pubDate>Fri, 23 May 2008 20:00:06 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=81</guid>
		<description><![CDATA[
Google recently released the Google Maps API for Flash. I took the opportunity to create a Google version of the MapRooms sample application I posted recently. MapRooms works like Chat Rooms. You can create a room, or join an existing one. In addition to chatting, MapRooms allows you to collaborate on a map: the application [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/apps/gmaprooms/gmaprooms.gif"/><br />
Google recently released the <a href="http://code.google.com/apis/maps/documentation/flash/">Google Maps API for Flash</a>. I took the opportunity to create a Google version of the MapRooms sample application <a href="http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/">I posted recently</a>. MapRooms works like Chat Rooms. You can create a room, or join an existing one. In addition to chatting, MapRooms allows you to collaborate on a map: the application leverages the real time capabilities of BlazeDS or LCDS to provide map synchronization between users in the room, and allow you to &#8220;whiteboard&#8221; on top of a map.<br />
<span id="more-81"></span></p>
<h3>Testing the hosted version</h3>
<p>Disclaimer: I&#8217;m currently hosting the application on the server I use to host this blog (basic PHP and Tomcat hosting plan). I don&#8217;t know much about the characteristics of my server, but I&#8217;m probably sharing it with a few dozens of other domains and the resources allocated to me are obviously limited in that shared environment. This is clearly not the ideal environment to host a potentially large scale real time application and I&#8217;m investigating other hosting solutions. In the meantime, if you experience difficulties running the app, you can install it locally using the instructions provided below (in &#8220;Local installation instructions&#8221;). The hosted version tries to connect using RTMP by default (available only as part of LCDS) and falls back to &#8220;long AMF polling&#8221; or regular AMF polling if the RTMP connection fails.</p>
<ol>
<li>Access <a href="http://coenraets.org/apps/gmaprooms/gmaprooms.html">http://coenraets.org/apps/gmaprooms/gmaprooms.html</a> on two different machines or in two browser windows on the same machine.</li>
<li>Make sure you logon with two different user names and <strong>the same room name</strong>.</li>
<li>Move the map in one browser and notice that the position of the map is synchronized in the other browser.</li>
<li>You can also search an address in one browser and the resulting map position will appear in the two browsers.</li>
<li>The zoom level and the map type are also synchronized between users.</li>
<li>Click the &#8220;Whiteboard&#8221; button in one browser, pick a color to draw on the map (upper left corner), and start drawing.</li>
</ol>
<p>Note: you can right-click the application and select View Source or click <a href="http://coenraets.org/apps/gmaprooms/srcview/index.html">here</a> to see the source code of the application.</p>
<h3>Local installation instructions:</h3>
<ol>
<li>Install BlazeDS. You can download the BlazeDS turnkey server (a version of Tomcat with BlazeDS preinstalled) <a href="http://opensource.adobe.com/wiki/display/blazeds/Release+Builds">here</a>.</li>
<li>Open {blazeds-install-dir}/tomcat/webapps/samples/WEB-INF/flex/services-config.xml and add an AMF long polling channel defined as follows:
<p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;5&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</p>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<p>
<pre><code>&lt;destination id="gmaprooms"&gt;
	&lt;properties&gt;
		&lt;server&gt;
			&lt;allow-subtopics&gt;true&lt;/allow-subtopics&gt;
			&lt;subtopic-separator&gt;.&lt;/subtopic-separator&gt;
		&lt;/server&gt;
	&lt;/properties&gt;
	&lt;channels&gt;
		&lt;channel ref="my-longpolling-amf"/&gt;
		&lt;channel ref="my-polling-amf"/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;</code></pre>
</p>
</li>
<li>(Re)start the BlazeDS turnkey server.</li>
<li>Download the source code of the Google Maps Application <a href="http://coenraets.org/apps/gmaprooms/srcview/gmaprooms.zip">here</a>.</li>
<li>Create a Flex Builder project for the Flex application (gmaprooms). <strong>Make sure you configure your Flex Builder project to work with BlazeDS.</strong> To read instructions on how to set up a Flex Builder project that works with BlazeDS, make sure your BlazeDS turnkey server is started, and click <a href="http://localhost:8400/samples/fb-project-setup.htm">here</a>.</li>
<li>Download the Google Maps ActionScript 3 API <a href="http://code.google.com/apis/maps/documentation/flash/">here</a>, and add the swc file in the libs folder of your project.</li>
<li>Get a Google Maps API key and assign it to map.key in the initMap() function in MapArea.mxml.</li>
<li>Compile the application.</li>
<li>Open the Flex application in two browser windows (to simulate two users in different locations) and test the application as described above (in &#8220;Testing the hosted version&#8221;).</li>
</ol>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>InSync: Automatic Offline Data Synchronization in AIR using LCDS 2.6</title>
		<link>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/</link>
		<comments>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/#comments</comments>
		<pubDate>Tue, 20 May 2008 03:31:15 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[SQLite]]></category>

		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=80</guid>
		<description><![CDATA[

LCDS 2.6 allows you to build AIR applications with automatic offline data synchronization. This feature leverages the SQLite relational database system embedded in the AIR runtime, but the advantage is that the data synchronization process is entirely automatic: you don’t have to write SQL statements or synchronization logic to keep your local database in sync [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/apps/insync/insync1.png" alt="" /></p>
<p><img src="http://coenraets.org/apps/insync/insync2.png" alt="" /></p>
<p>LCDS 2.6 allows you to build AIR applications with automatic offline data synchronization. This feature leverages the SQLite relational database system embedded in the AIR runtime, but the advantage is that the data synchronization process is entirely automatic: you don’t have to write SQL statements or synchronization logic to keep your local database in sync with your central database.</p>
<p>I have been getting a number of questions related to this feature, so I decided to build a sample application that demonstrates how it works.<br />
<span id="more-80"></span><br />
In this application the synchronization process is implicit. When you are online, the cache (a SQLite database) is automatically updated along with the server database to make sure the user can go offline with the latest data without explicitly triggering a synchronization process. When you are offline, the changes are saved in the local cache. If the network becomes available while working in the application, the application will detect the network status change and automatically synchronize data (send your offline changes to the server, and get changes made by other users while you were offline).</p>
<h3>Installation Instructions</h3>
<ol>
<li>If you haven&#8217;t already done so, <a href="http://labs.adobe.com/technologies/livecycle_dataservices2_6/">install LCDS 2.6</a>.</li>
<li>Unzip <a href="http://coenraets.org/apps/insync/insync.zip">insync.zip</a></li>
<li>Copy the content of the sampledb folder in the sampledb folder of your existing LCDS directory</li>
<li>Copy the content of the tomcat folder in the tomcat folder of your existing LCDS directory</li>
<li>Add the following destination to data-management-config.xml
<pre><code>&lt;destination id="insync"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;lcds.samples.contact.ContactAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="contactId" undefined-value="0"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;</code></pre>
</li>
<li>Restart the sample database: run sampledb.bat (Windows) or sampledb.sh (Unix) in the sampledb directory</li>
<li>Restart your application server</li>
</ol>
<h3>Quick Tour</h3>
<ol>
<li>Install and run the AIR application. Notice the green light in the status bar indicating that the application is in online mode.
<p><div id="flashcontent1540" style="width:215px; height:180px;"><strong>Please upgrade your Flash Player</strong> This is the content that would be shown if the user does not have Flash Player 9.0.115 or higher installed.</div><script type="text/javascript">
// <![CDATA[
var so = new SWFObject("http://coenraets.org/blog/wp-content/plugins/air-badge/AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
so.useExpressInstall("http://coenraets.org/blog/wp-content/plugins/air-badge/expressinstall.swf");
so.addVariable("airversion", "1.0");
so.addVariable("appname", "sqliteadmin");
so.addVariable("appurl", "http://coenraets.org/apps/insync/insync.air");
so.addVariable("appid", "sqliteadmin");
so.addVariable("pubid", "");
so.addVariable("appversion", "v1.0");
so.addVariable("imageurl", "http://coenraets.org/apps/insync/insync1.png");
so.addVariable("appinstallarg", "installed from web");
so.addVariable("applauncharg", "launched from web");
so.addVariable("helpurl", "help.html");
so.addVariable("hidehelp", "true");
so.addVariable("skiptransition", "false");
so.addVariable("titlecolor", "#00AAFF");
so.addVariable("buttonlabelcolor", "#00AAFF");
so.addVariable("appnamecolor", "#00AAFF");
so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system.");
so.write("flashcontent1540");
// ]]&gt;
</script>

</p>
</li>
<li>Double click a contact to view the contact details.</li>
<li>Modify the data in a few fields and click Save. Your server console indicates that the contact has been updated.</li>
<li>Click the + button in the application title bar. Enter a first name, last name, etc and click Save. Your server console indicates that the contact has been updated.</li>
<li>Shut down the server</li>
<li>Notice that the green light turns grey to indicate that the application is now working in offline mode.</li>
<li>Repeat steps 2 to 4 above: changes are saved locally. Notice that the offline status (not modified, created, or updated is displayed in the contact form (bottom left corner)</li>
<li>Restart the server.</li>
<li>The green light appears in that status bar as soon as the server is up and running. Notice that LCDS automatically detects the offline changes and sends them to the server.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;LiveHelp / Call Center&#8221; Application Source Code</title>
		<link>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/</link>
		<comments>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/#comments</comments>
		<pubDate>Fri, 16 May 2008 20:27:20 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=77</guid>
		<description><![CDATA[I recently posted an example of a “Live Help / Call Center” application built with Flex and BlazeDS. A number of you have asked me for the source code. So here it is&#8230;

Installation instructions

Install BlazeDS or LCDS.
Download the client-side of the application. The end-user application is mortgageapp.mxml, and the support representative application is callcenter.mxml.
Download and [...]]]></description>
			<content:encoded><![CDATA[<p>I recently posted an example of a <a href="http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/">“Live Help / Call Center” application</a> built with Flex and BlazeDS. A number of you have asked me for the source code. So here it is&#8230;<br />
<span id="more-77"></span></p>
<h3>Installation instructions</h3>
<ol>
<li>Install <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS</a> or <a href="http://labs.adobe.com/technologies/livecycle_dataservices2_6/">LCDS</a>.</li>
<li><a href="http://coenraets.org/blog/wp-content/uploads/2008/05/livehelp-client.zip">Download</a> the client-side of the application. The end-user application is mortgageapp.mxml, and the support representative application is callcenter.mxml.</li>
<li><a href="http://coenraets.org/blog/wp-content/uploads/2008/05/livehelp-server.zip">Download</a> and deploy the server-side of the application.</li>
<li>Add the following destination in WEB-INF/flex/remoting-config.xml.
<pre><code>&lt;destination id="ticket-service"&gt;
    &lt;properties&gt;
        &lt;source&gt;flex.samples.livehelp.TicketService&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
    &lt;/properties&gt;
    &lt;channels&gt;
        &lt;channel ref="my-rtmp"/&gt;
        &lt;channel ref="my-amf"/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;</code></pre>
<p>NOTE: If you are using BlazeDS, remove the line that defines the &#8220;my-rtmp&#8221; channel.
</li>
<li>Add the following destination in WEB-INF/flex/messaging-config.xml.
<pre><code>&lt;destination id="callcenter"&gt;
    &lt;properties&gt;
        &lt;server&gt;
            &lt;allow-subtopics&gt;true&lt;/allow-subtopics&gt;
            &lt;subtopic-separator&gt;.&lt;/subtopic-separator&gt;
        &lt;/server&gt;
    &lt;/properties&gt;
    &lt;channels&gt;
        &lt;channel ref="my-rtmp"/&gt;
        &lt;channel ref="my-longpolling-amf"/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;</code></pre>
<p>NOTE: If you are using BlazeDS, remove the line that defines the &#8220;my-rtmp&#8221; channel in the above destination, and add the following channel definition in WEB-INF/flex/services-config.xml:</p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;3&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</li>
<li>Follow the instructions in my <a href="http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/">original post</a> to experience the application.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Live Help / Call Center Application with Flex and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 21:02:05 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/</guid>
		<description><![CDATA[
I recently posted a number of examples (Yahoo Maps Collaboration and Collaborative Data Entry) showing how to use the BlazeDS / LCDS Message Service to build collaborative applications. In this post, I’m extending the Collaborative Forms application to provide an example of a more complete and real life &#8220;Live Help / Call Center&#8221; application.

The use [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://coenraets.org/apps/livehelp/customer.html'><img src='http://coenraets.org/blog/wp-content/uploads/2008/04/customer3.jpg' alt='customer3.jpg' /></a><a href='http://coenraets.org/apps/livehelp/callcenter.html'><img src='http://coenraets.org/blog/wp-content/uploads/2008/04/callcenter.jpg' alt='callcenter.jpg' /></a>
<p>I recently posted a number of examples (<a href="http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/">Yahoo Maps Collaboration</a> and <a href="http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/">Collaborative Data Entry</a>) showing how to use the BlazeDS / LCDS Message Service to build collaborative applications. In this post, I’m extending the Collaborative Forms application to provide an example of a more complete and real life &#8220;Live Help / Call Center&#8221; application.</p>
<p><span id="more-72"></span></p>
<p>The use case goes like this: a customer tries to complete a task (in this case: apply for a mortgage) on a web site, gets in trouble, and starts a “Live Help” session with a support representative. Among other things, the support representative can remotely drive the customer’s application, enter data collaboratively with the customer, chat with the customer using a text-based and/or a video-chat session, close the support ticket, etc.</p>
<p>To make it easier for you to experience the application, I’m hosting it on my server. You can test it using the instructions below. </p>
<h3>Testing the application:</h3>
<ol>
<li>
<p>Open a browser and access <a href="http://coenraets.org/apps/livehelp/customer.html">http://coenraets.org/apps/livehelp/customer.html</a>. Enter your email address and click Start.</p>
<p>Note: Your email address is used as a unique identifier to allow you to test the application in your own sandbox: your experiments are isolated from the experiments of other users testing the application.</p>
</li>
<li>
<p>Open another browser window (on the same computer or on a different computer) and access <a href="http://coenraets.org/apps/livehelp/callcenter.html">http://coenraets.org/apps/livehelp/callcenter.html</a>. Enter your email address and click “Start”. <strong>Make sure you use the same email address you used in the customer application.</strong></p>
</li>
<li>
<p>In the customer application, enter some data in different tabs.</p>
</li>
<li>
<p>Click “Start session” to initiate a Live Help session with a support rep.</p>
</li>
<li>
<p>Notice that a new ticket appears in the call center application.</p>
</li>
<li>
<p>In the call center application select the new ticket, and click “Handle Ticket” (upper right corner). A message should appear in the chat window of the customer application. Notice that the data you typed in the customer application automatically appears in the support rep application.</p>
</li>
<li>
<p>Type a chat message in the support rep app: the message appears in the customer app.</p>
</li>
<li>
<p>The support rep can remotely drive the customer application: in the support rep application, change the selected Accordion tab, and notice that the customer application’s user interface is automatically synchronized. This works in both directions: you can change the Accordion tab in the customer app and the support rep’s user interface will be automatically synchronized as well.</p>
</li>
<li>
<p>The application supports collaborative data entry (collaborative form filling): Enter some data in the support rep application: notice that the data automatically appears in the customer application. This works in both directions as well.</p>
</li>
<li>
<p>On the Employment History tab, add a few companies (including start date, end date, and salary) and notice that the employment history list is automatically synchronized in the other browser.</p>
</li>
<li>
<p>If you have a webcam attached to your system, click the “Start webcam” button in one of the applications.</p>
<p>Note: Live video streaming is powered by Flash Media Server. Since I don’t have access to a hosted instance of Flash Media Server, live video streaming is not enabled in this hosted version.</p>
</li>
</ol>
<p>I will post the source code in the coming days.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Collaborative Data Entry with Flex and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 03:38:42 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/</guid>
		<description><![CDATA[
After Yahoo Maps collaboration, here is another example of enabling collaboration in a Flex application using the publish/subscribe messaging infrastructure of BlazeDS.
This example demonstrates “collaborative forms” (or “collaborative data entry”). Users in different locations can fill in forms “together” in a real-time and in-context collaboration session: changes made by one user are automatically reflected in [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/collabforms/collabforms.jpg"/></p>
<p>After <a href="http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/">Yahoo Maps collaboration</a>, here is another example of enabling collaboration in a Flex application using the publish/subscribe messaging infrastructure of BlazeDS.</p>
<p>This example demonstrates “collaborative forms” (or “collaborative data entry”). Users in different locations can fill in forms “together” in a real-time and in-context collaboration session: changes made by one user are automatically reflected in the other users application.</p>
<p><span id="more-71"></span></p>
<p><strong>Testing the hosted version</strong></p>
<ol>
<li>Access <a href="http://coenraets.org/collabforms/collabforms.html">http://coenraets.org/collabforms/collabforms.html</a> on two different machines or in two browser windows on the same machine.</li>
<li>Click “Create Session” (bottom left) in one browser: a collaboration session is created with a unique collaboration session id.</li>
<li>Enter this collaboration session id in the other browser and click “Join Session”.</li>
<li>Change the selected Accordion tab in one browser, and notice that the Accordion in the other browser is automatically synchronized.</li>
<li>Enter data in one browser and notice that the information is automatically synchronized in the other browser.</li>
<li>On the Employment History tab, add a few companies (including start date, end date, and salary) and notice that the employment history list is automatically synchronized in the other browser.</li>
</ol>
<p>You can right-click the application and select View Source or click <a href="http://coenraets.org/collabforms/srcview/index.html">here</a> to see the source code of the application.</p>
<p><strong>Notes:</strong></p>
<ol>
<li>The way a collaboration session is actually started may vary depending on the application. In this example, one user creates a collaboration session, and shares the collaboration session id (via email, IM, etc…) with people he/she wants to collaborate with. In other use cases, the collaboration session could start automatically. For example, in a call center scenario, a user might click a “Live Help” button which would result in the creation of a support ticket appearing in the Support Reps application. A support rep could then take ownership of the ticket and enter a collaboration session using, for example, the ticket id as the collaboration session id. I will post a call center version of this example in the coming days.</li>
<li>In this example, the synchronization is performed using pub/sub messaging. You could also use the Data Management Service available with LiveCycle Data Services to automatically keep data in sync between multiple clients.</li>
<li>The hosted version of the application first tries to connect to the server using RTMP (available only as part of LCDS), and falls back to “long AMF polling” or regular AMF polling if the RTMP connection fails.</li>
</ol>
<p><strong>Local installation instructions:</strong></p>
<ol>
<li>Install BlazeDS. You can download the BlazeDS turnkey server (a version of Tomcat with BlazeDS preinstalled) <a href="http://opensource.adobe.com/wiki/display/blazeds/Release+Builds">here</a>.</li>
<li>If you don&#8217;t already have a channel called &#8220;my-longpolling-amf&#8221;, open {blazeds-install-dir}/tomcat/webapps/samples/WEB-INF/flex/services-config.xml and add an AMF long polling channel defined as follows:
<p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;5&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</p>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<p>
<pre><code>&lt;destination id="mortgage"&gt;
	&lt;channels&gt;
		&lt;channel ref="my-longpolling-amf"/&gt;
		&lt;channel ref="my-polling-amf"/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;</code></pre>
</p>
</li>
<li>(Re)start the BlazeDS turnkey server.</li>
<li>Download the source code of the Mortgage Application <a href="http://coenraets.org/collabforms/srcview/collabforms.zip">here</a>.</li>
<li>Create a Flex Builder project for the Flex application (collabforms). <strong>Make sure you configure your Flex Builder project to work with BlazeDS.</strong> To read instructions on how to set up a Flex Builder project that works with BlazeDS, make sure your BlazeDS turnkey server is started, and click <a href="http://localhost:8400/samples/fb-project-setup.htm">here</a>.</li>
<li>Compile the application.</li>
<li>Open the Flex application in two browser windows (to simulate two users in different locations) and test the application as described above (in &#8220;Testing the hosted version&#8221;).</li>
</ol>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Yahoo Maps Collaboration using Flex and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 22:34:09 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/</guid>
		<description><![CDATA[
Two years ago, I wrote a simple Google Maps collaboration example. The Flex application listened to Google Maps events to synchronize maps between different users. It also added nice collaboration features such as videoconferencing and a collaborative whiteboard overlaid on top of the map. In addition to demonstrating the real-time messaging capabilities of Flex, this [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/maprooms/maprooms.png"/></p>
<p>Two years ago, I wrote a simple <a href="http://coenraets.org/blog/2006/06/google-maps-collaboration-using-flex-flash-media-server-and-ajax-updated-for-flex-2-ga/">Google Maps collaboration example</a>. The Flex application listened to Google Maps events to synchronize maps between different users. It also added nice collaboration features such as videoconferencing and a collaborative whiteboard overlaid on top of the map. In addition to demonstrating the real-time messaging capabilities of Flex, this application also illustrated Flex/Ajax integration using External Interface.</p>
<p>Two recent events prompted me to revisit this sample:</p>
<ol>
<li>Yahoo recently released an <a href="http://developer.yahoo.com/flash/maps/">ActionScript 3 API for Yahoo Maps</a>.</li>
<li>Adobe recently released the Remoting and Messaging features of LiveCycle Data Services as an <a href="http://opensource.adobe.com/blazeds">Open Source project named BlazeDS</a>.</li>
</ol>
<p>So, I updated the sample to work with the Yahoo Maps ActionScript API and BlazeDS (or LCDS). No need to communicate between Ajax and Flex in this version since the rendering of the map is entirely done within the Flex application.</p>
<p><span id="more-70"></span></p>
<p><strong>Testing the hosted version</strong></p>
<p>Disclaimer: I&#8217;m currently hosting the application on the server I use to host this blog (basic PHP and Tomcat hosting plan). I don&#8217;t know much about the characteristics of my server, but I&#8217;m probably sharing it with a few dozens of other domains and the resources allocated to me are obviously limited in that shared environment. This is clearly not the ideal environment to host a potentially large scale real time application and I&#8217;m investigating other hosting solutions. In the meantime, if you experience difficulties running the app, you can install it locally using the instructions provided below (in &#8220;Local installation instructions&#8221;). The hosted version tries to connect using RTMP by default (available only as part of LCDS) and falls back to &#8220;long AMF polling&#8221; or regular AMF polling if the RTMP connection fails.</p>
<ol>
<li>Access <a href="http://coenraets.org/maprooms/maprooms.html">http://coenraets.org/maprooms/maprooms.html</a> on two different machines or in two browser windows on the same machine.</li>
<li>Make sure you logon with two different user names and <strong>the same room name</strong>.</li>
<li>Move the map in one browser and notice that the position of the map is synchronized in the other browser.</li>
<li>You can also search an address in one browser and the resulting map position will appear in the two browsers.</li>
<li>The zoom level and the map type are also synchronized between users.</li>
<li>Click the Map Sharing button in one browser, pick a color to draw on the map (upper left corner), and start drawing.</li>
</ol>
<p>Note: you can right-click the application and select View Source or click <a href="http://coenraets.org/maprooms/srcview/index.html">here</a> to see the source code of the application.</p>
<p><strong>Local installation instructions:</strong></p>
<ol>
<li>Install BlazeDS. You can download the BlazeDS turnkey server (a version of Tomcat with BlazeDS preinstalled) <a href="http://opensource.adobe.com/wiki/display/blazeds/Release+Builds">here</a>.</li>
<li>Open {blazeds-install-dir}/tomcat/webapps/samples/WEB-INF/flex/services-config.xml and add an AMF long polling channel defined as follows:
<p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;5&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</p>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<p>
<pre><code>&lt;destination id="flexmaps"&gt;
	&lt;properties&gt;
		&lt;server&gt;
			&lt;allow-subtopics&gt;true&lt;/allow-subtopics&gt;
			&lt;subtopic-separator&gt;.&lt;/subtopic-separator&gt;
		&lt;/server&gt;
	&lt;/properties&gt;
	&lt;channels&gt;
		&lt;channel ref="my-longpolling-amf"/&gt;
		&lt;channel ref="my-polling-amf"/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;</code></pre>
</p>
</li>
<li>(Re)start the BlazeDS turnkey server.</li>
<li>Download the source code of the Yahoo Maps Application <a href="http://coenraets.org/maprooms/srcview/maprooms.zip">here</a>.</li>
<li>Create a Flex Builder project for the Flex application (maprooms). <strong>Make sure you configure your Flex Builder project to work with BlazeDS.</strong> To read instructions on how to set up a Flex Builder project that works with BlazeDS, make sure your BlazeDS turnkey server is started, and click <a href="http://localhost:8400/samples/fb-project-setup.htm">here</a>.</li>
<li>Download the Yahoo Maps ActionScript 3 API <a href="http://developer.yahoo.com/flash/maps/">here</a>, and add YahooMap.swc in the libs folder of your project.</li>
<li>Get a Yahoo API key <a href=http://developer.yahoo.com/wsregapp/index.php">here</a> and assign it to the appid variable in MapArea.mxml.</li>
<li>Compile the application.</li>
<li>Open the Flex application in two browser windows (to simulate two users in different locations) and test the application as described above (in &#8220;Testing the hosted version&#8221;).</li>
</ol>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQLite Admin for AIR 1.0</title>
		<link>http://coenraets.org/blog/2008/02/sqlite-admin-for-air-10/</link>
		<comments>http://coenraets.org/blog/2008/02/sqlite-admin-for-air-10/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 19:24:53 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/02/sqlite-admin-for-air-10/</guid>
		<description><![CDATA[
Here is a new version of my AIR-based SQLite Admin application updated for AIR 1.0. You can use this application to examine the structure of a database, create a new database or open an existing one, execute any type of SQL statement, etc.
An interesting aspect of this version is that the application itself uses a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/blog/wp-content/uploads/2007/10/sqladmin.png" /></p>
<p>Here is a new version of my AIR-based SQLite Admin application updated for AIR 1.0. You can use this application to examine the structure of a database, create a new database or open an existing one, execute any type of SQL statement, etc.</p>
<p>An interesting aspect of this version is that the application itself uses a database (sqladmincache.db) to keep track of the databases you opened and the statements you executed. This is useful if you want to quickly re-open a recently accessed database, or re-execute a recently executed statement.</p>
<p>The UI is still simple, but uses some new AIR and Flex 3 features such as the AdvancedDataGrid and Native Windows.</p>
<p><div id="flashcontent1978" style="width:215px; height:180px;"><strong>Please upgrade your Flash Player</strong> This is the content that would be shown if the user does not have Flash Player 9.0.115 or higher installed.</div><script type="text/javascript">
// <![CDATA[
var so = new SWFObject("http://coenraets.org/blog/wp-content/plugins/air-badge/AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
so.useExpressInstall("http://coenraets.org/blog/wp-content/plugins/air-badge/expressinstall.swf");
so.addVariable("airversion", "1.0");
so.addVariable("appname", "sqliteadmin");
so.addVariable("appurl", "http://coenraets.org/air/sqliteadmin/sqliteadmin.air");
so.addVariable("appid", "sqliteadmin");
so.addVariable("pubid", "");
so.addVariable("appversion", "v1.0");
so.addVariable("imageurl", "http://coenraets.org/blog/wp-content/uploads/2007/10/sqladmin.png");
so.addVariable("appinstallarg", "installed from web");
so.addVariable("applauncharg", "launched from web");
so.addVariable("helpurl", "help.html");
so.addVariable("hidehelp", "true");
so.addVariable("skiptransition", "false");
so.addVariable("titlecolor", "#00AAFF");
so.addVariable("buttonlabelcolor", "#00AAFF");
so.addVariable("appnamecolor", "#00AAFF");
so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system.");
so.write("flashcontent1978");
// ]]&gt;
</script>
<br />
<br/></p>
<p>Click <a href="http://coenraets.org/air/sqliteadmin/sqliteadmin.zip">here</a> to download the source code.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/02/sqlite-admin-for-air-10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Salesbuilder for AIR 1.0</title>
		<link>http://coenraets.org/blog/2008/02/salesbuilder-for-air-10/</link>
		<comments>http://coenraets.org/blog/2008/02/salesbuilder-for-air-10/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 19:10:58 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/02/salesbuilder-for-air-10/</guid>
		<description><![CDATA[Now that Flex 3 and AIR 1.0 are generally available, it&#8217;s time to upgrade some of the sample applications I have been building during the beta program. So, here is Salesbuilder for AIR 1.0.
Salesbuilder is a Sales Force Automation application written in Flex and deployed on the AIR runtime. It demonstrates local persistence using the [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Flex 3 and AIR 1.0 are generally available, it&#8217;s time to upgrade some of the sample applications I have been building during the beta program. So, here is Salesbuilder for AIR 1.0.</p>
<p>Salesbuilder is a Sales Force Automation application written in Flex and deployed on the AIR runtime. It demonstrates local persistence using the embedded SQLite database, data synchronization, native drag-and-drop, and other features such as direct chart manipulation.</p>
<p><img src="http://coenraets.org/blog/wp-content/uploads/2007/07/salesbuilder1.png" id="image45" alt="salesbuilder1.png" style="border: 0pt none " height="726" /></p>
<p><div id="flashcontent1334" style="width:215px; height:180px;"><strong>Please upgrade your Flash Player</strong> This is the content that would be shown if the user does not have Flash Player 9.0.115 or higher installed.</div><script type="text/javascript">
// <![CDATA[
var so = new SWFObject("http://coenraets.org/blog/wp-content/plugins/air-badge/AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
so.useExpressInstall("http://coenraets.org/blog/wp-content/plugins/air-badge/expressinstall.swf");
so.addVariable("airversion", "1.0");
so.addVariable("appname", "salesbuilder");
so.addVariable("appurl", "http://coenraets.org/air/salesbuilder/salesbuilder.air");
so.addVariable("appid", "salesbuilder");
so.addVariable("pubid", "");
so.addVariable("appversion", "v1.0");
so.addVariable("imageurl", "http://coenraets.org/blog/wp-content/uploads/2007/07/salesbuilder1.png");
so.addVariable("appinstallarg", "installed from web");
so.addVariable("applauncharg", "launched from web");
so.addVariable("helpurl", "help.html");
so.addVariable("hidehelp", "true");
so.addVariable("skiptransition", "false");
so.addVariable("titlecolor", "#00AAFF");
so.addVariable("buttonlabelcolor", "#00AAFF");
so.addVariable("appnamecolor", "#00AAFF");
so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system.");
so.write("flashcontent1334");
// ]]&gt;
</script>
<br />
<br/></p>
<p>Additional Resources:</p>
<ul>
<li>Click <a href="http://coenraets.org/air/salesbuilder/salesbuilder.air">here</a> to install the application.</li>
<li>Click <a href="http://coenraets.org/air/salesbuilder/salesbuilder.zip">here</a> to download the source code.</li>
<li>Follow <a href="http://coenraets.org/air/salesbuilder/salesbuilder_script.pdf">this script</a> for a guide tour of the application.</li>
</ul>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/02/salesbuilder-for-air-10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Version of SalesBuilder using LiveCycle Data Services</title>
		<link>http://coenraets.org/blog/2008/02/new-version-of-salesbuilder-using-livecycle-data-services/</link>
		<comments>http://coenraets.org/blog/2008/02/new-version-of-salesbuilder-using-livecycle-data-services/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 17:01:04 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/02/new-version-of-salesbuilder-using-livecycle-data-services/</guid>
		<description><![CDATA[I have often felt that we needed a more real-life/complex sample application to adequately demonstrate LiveCycle Data Services, and specifically the Data Management Service. So, I wrote a new version of Salesbuilder that uses LCDS to persist data at the server side. &#8220;Salesbuilder LCDS&#8221; demonstrates advanced LCDS features such as associations, lazy loading, etc.
This application [...]]]></description>
			<content:encoded><![CDATA[<p>I have often felt that we needed a more real-life/complex sample application to adequately demonstrate LiveCycle Data Services, and specifically the Data Management Service. So, I wrote a new version of <a href="http://coenraets.org/blog/2008/02/salesbuilder-beta-3-air-file-flex-source-code/">Salesbuilder</a> that uses LCDS to persist data at the server side. &#8220;Salesbuilder LCDS&#8221; demonstrates advanced LCDS features such as associations, lazy loading, etc.</p>
<p>This application will also be packaged as a sample in the next version of LiveCycle Data Services currently in private beta.</p>
<p><span id="more-66"></span>
<p>Here is a quick look at the destinations and associations used in the application:</p>
<pre style="height:400px">
<code>&lt;destination id="account"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.AccountAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="accountId" undefined-value="0"/&gt;
            &lt;many-to-one property="salesRep" destination="sales-rep" lazy="true"/&gt;
            &lt;many-to-one property="industry" destination="industry" lazy="true"/&gt;
            &lt;many-to-one property="category" destination="account-category" lazy="true"/&gt;
            &lt;many-to-one property="state" destination="state" lazy="true"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="contact"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.ContactAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="contactId" undefined-value="0"/&gt;
            &lt;many-to-one property="account" destination="account" lazy="true"/&gt;
            &lt;many-to-one property="manager" destination="contact" lazy="true"/&gt;
            &lt;many-to-one property="salesRep" destination="sales-rep" lazy="true"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="opportunity"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.OpportunityAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="opportunityId" undefined-value="0"/&gt;
            &lt;many-to-one property="account" destination="account" lazy="true"/&gt;
            &lt;many-to-one property="salesRep" destination="sales-rep" lazy="true"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="industry"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.IndustryAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="industryId" undefined-value="0"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="sales-rep"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.SalesRepAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="salesRepId" undefined-value="0"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="account-category"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.AccountCategoryAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="categoryId" undefined-value="0"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;

&lt;destination id="state"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;com.salesbuilder.assembler.StateAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="stateId"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;</code>
</pre>
<p></p>
<p><strong>Installation instructions:</strong></p>
<p>Prerequisite: You need to have LiveCycle Data Services installed on your system before executing the steps below.</p>
<ol>
<li>Download <a href="http://coenraets.org/downloads/salesbuilderlcds.zip">salesbuilderlcds.zip</a></li>
<li>Unzip salesbuilderlcds.zip in /salesbuilderlcds</p>
<li>Copy the content /salesbuilderlcds/webapp/WEB-INF/classes to the WEB-INF/classes directory of your web application</li>
<li>Add the destinations defined in /salesbuilderlcds/webapp/WEB-INF/flex/data-management-config.xml to the data-management-config.xml file of your web application</li>
<li>Start the salesbuilder database</li>
<ol style="list-style-type: lower-alpha">
<li>Open a command prompt and go to /salesbuilderlcds/db</li>
<li>Run startdb.bat (Windows) or startdb.sh (Unix-based systems)</li>
</ol>
<li>Start your application server</li>
<li>Double-click /salesbuilderlcds/salesbuilderlcds.air to install the air application</li>
<li>Run the application</li>
</ol>
<p><strong>Configuration Note:</strong></p>
<p>By default, the application tries to connect to the localhost server using the RTMP protocol on port 2037. If your server configuration is different, edit config.xml in the salesbuilder installation directory (&#8221;Program Files\Salesbuilder LCDS&#8221; on Windows).</p>
<p>If you are not familiar with the Salesbuilder application, here is a quick walkthrough:</p>
<p><strong>Sales Pipeline</strong><br />
The sales pipeline features many &#8220;direct manipulation&#8221; options: </p>
<ol>
<li>Grab the background of the chart with your mouse and scroll it left and write to navigate along the time axis.</li>
<li>Grab a vertical grid line, and move it left and right to zoom-out/zoom-in.</li>
<li>To modify your pipeline directly, grab a bubble with your mouse and move it up and down or left and right to adjust the probability and the expected closing date respectively. The projected revenue is automatically updated in the chart title. When you release the mouse button, the opportunity is automatically updated (probability and close date) in the database.</li>
<li>You can also double click a bubble to open a details view for the opportunity.</li>
</ol>
<p><strong>Search and Summary Screens</strong></p>
<ol>
<li>Type a few letters in the search box (upper right corner): matching accounts, contacts, and opportunities appear.</li>
<li>Use the arrow keys to navigate in the search results popup.</li>
<li>Use the Enter key to open the selected item.</li>
<li>Alternatively, you can also open the summary screens (&#8221;Accounts&#8221;, &#8220;Contacts&#8221;, and &#8220;Opportunities&#8221; buttons in the menu bar), and open individual items from there.</li>
</ol>
<p><strong>Working with Data</strong></p>
<ol>
<li>Open the &#8220;Alpha Corp&#8221; account.</li>
<li>Make some changes to the Alpha Corp data (for example, change the phone number), and click &#8220;Save&#8221;”.</li>
<li>In the Contacts view of the Alpha Corp tab, you can grab an org chart item with your mouse and move the org chart around.</li>
<li>To open the details view for a contact, either double-click an org chart item or click the Grid button (lower left corner) and double-click a contact in the datagrid.</li>
<li>Add a contact by clicking &#8220;Quick Contact&#8221;. Make sure you select a manager, click save and notice that the org chart is updated automatically.</li>
<li>Continue to add and modify accounts, contacts, and opportunities. The data is persisted using the Data Management Service.</li>
</ol>
<p><strong>Native drag-and-drop</strong></p>
<ol>
<li>Click the &#8220;Opportunities&#8221; menu button.</li>
<li>Drag the dashboard title on the desktop: the chart is saved as a JPG on the desktop. Note: it can take a few seconds before you actually see the drag icon.
<li>Open a Word document, drag the dashboard title again, and, this time, drop it directly in the Word document.</li>
<li>Select some rows in the datagrid, and, without releasing the mouse button, drag the selected rows and drop them on the desktop. The rows are saved as an Excel document on the desktop.</li>
<li>Double-click the Excel document to open the spreadsheet.</li>
<li>Drag some rows from the Datagrid again, and, this time, drop them directly somewhere in the Excel spreadsheet.</li>
</ol>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/02/new-version-of-salesbuilder-using-livecycle-data-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bug Fix in SQLite Admin</title>
		<link>http://coenraets.org/blog/2008/02/bug-fix-in-sqlite-admin/</link>
		<comments>http://coenraets.org/blog/2008/02/bug-fix-in-sqlite-admin/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 16:25:42 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/02/bug-fix-in-sqlite-admin/</guid>
		<description><![CDATA[If you downloaded the SQLite Admin AIR application I posted on Tuesday, make sure you download the last version. The new version fixes a problem where you get the following exception: &#8216;Error #3115: SQL Error.&#8217;, details:&#8217;cannot rollback - no transaction is active&#8217;, operation:&#8217;rollback&#8217;. Many thanks to Barry Beattie for reporting the problem.
]]></description>
			<content:encoded><![CDATA[<p>If you downloaded the <a href="http://coenraets.org/blog/2008/02/air-based-sqlite-admin-updated-for-beta-3/">SQLite Admin AIR application</a> I posted on Tuesday, make sure you download the <a href="http://coenraets.org/blog/2008/02/air-based-sqlite-admin-updated-for-beta-3/">last version</a>. The new version fixes a problem where you get the following exception: &#8216;Error #3115: SQL Error.&#8217;, details:&#8217;cannot rollback - no transaction is active&#8217;, operation:&#8217;rollback&#8217;. Many thanks to Barry Beattie for reporting the problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/02/bug-fix-in-sqlite-admin/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
