<?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>joe-ferraro.com</title>
	<atom:link href="http://joe-ferraro.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://joe-ferraro.com</link>
	<description>adless since 2008</description>
	<lastBuildDate>Wed, 25 Aug 2010 15:49:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Android app: Salesforce.com &#8220;Voice Notes&#8221; (part 1)</title>
		<link>http://joe-ferraro.com/2010/08/android-app-salesforce-com-voice-notes-part-1/</link>
		<comments>http://joe-ferraro.com/2010/08/android-app-salesforce-com-voice-notes-part-1/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 04:19:57 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[Force.com]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[salesforce.com]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=120</guid>
		<description><![CDATA[



Recently, we&#8217;ve been working on some mobile apps internally at Mavens, mostly on iOS, but the subject of Android development was intriguing to me, especially given my background in Java.  So, last week I started doing some research on the subject and found that there were a few different approaches to writing Android apps [...]]]></description>
			<content:encoded><![CDATA[<div>
<img src="http://www.joe-ferraro.com/images/android.png" alt="Android" style="width:200px;"/>
</div>
<p>
Recently, we&#8217;ve been working on some mobile apps internally at <a href="http://www.mavensconsulting.com" target=_blank>Mavens</a>, mostly on iOS, but the subject of Android development was intriguing to me, especially given my background in Java.  So, last week I started doing some research on the subject and found that there were a few different approaches to writing Android apps that could connect to Salesforce.com:
</p>
<ol>
<li><a href="http://labs.adobe.com/technologies/air2/android/" target=_blank>Adobe Air 2.5</a> &#8211; Run Flash apps on Android (WARNING: this is very much ALPHA software)</li>
<li><a href="http://code.google.com/p/salesforceandroid/" target=_blank>salesforceandroid</a> &#8211; Leverages ksoap2 (great work)</li>
<li><a href="http://code.google.com/p/sfdc-wsc/" target=_blank>sfdc-wsc</a> (thanks Peter <a href="http://twitter.com/pmorelli" target=_blank>@pmorelli</a>)</li>
<li><a href="http://blog.jeffdouglas.com/2010/06/06/salesforce-chatter-for-android" target=_blank>Android + GAE + OAuth + Salesforce</a> &#8211; Courtesy of <a href="http://blog.jeffdouglas.com/" target=_blank>Jeff Douglas</a></li>
</ol>
<p>
After testing Adobe Air&#8217;s 2.5 runtime with native Android support, I realized Flash on Android is simply too unstable (and slow) in its current state.  I dug pretty deep into the <a href="http://code.google.com/p/salesforceandroid/" target=_blank>salesforceandroid</a> project and found it to be a tad exhausting when working with rather complex Soap calls.  I tweeted relative to this exhaustion and Peter Morelli <a href="http://twitter.com/pmorelli" target=_blank>@pmorelli</a> reminded me that his colleague at Salesforce.com, <a href="http://www.cheenath.com" target=_blank>Manoj Cheenath</a> had developed a fantastic web service connector called <a href="http://code.google.com/p/sfdc-wsc/" target=_blank>sfdc-wsc</a>.  I immediately went to work determining whether sfdc-wsc was a viable option for Android development (spoiler: it&#8217;s a more than viable option, as you&#8217;ll see below).
</p>
<p>
One thing was of particular interest though (and cost me a far bit of time unfortunately): Android does not have native support for the javax.* packages, so I had to <a href="http://code.google.com/p/dalvik/wiki/JavaxPackages" target=_blank>repackage A LOT of code</a> to get it running on an Android device.  Lucky for you, the tough work has been done and the repackaged classes are part of the source code for this example!
</p>
<p>
I&#8217;m going to assume you understand how to create a new Android project in Eclipse.  Here&#8217;s what you&#8217;ll need (and read the docs @ <a href="http://developer.android.com/index.html" target=_blank>developer.android.com</a>):
</p>
<ol>
<li>Eclipse 3.3+</li>
<li><a href="http://developer.android.com/sdk/eclipse-adt.html#installing" target=_blank>Android Development Tools &#8220;ADT&#8221; Plugin for Eclipse</a></li>
<li><a href="http://developer.android.com/sdk/index.html" target=_blank>Android SDK</a></li>
</ol>
<p>
<a href="http://code.google.com/p/voicenotes/" target=_blank>VoiceNotes</a> is an Android application that displays a ListView of Accounts, allows the user to select an Account and record his/her voice note to send it up to Salesforce.com as an attachment.  Currently, the application captures audio in the Android native format which is a 3GPP wrapper around an AMR audio stream.  If you&#8217;re on a desktop, Quicktime can play these files.
</p>
<p>
<b>*VoiceNotes is meant to be an EXAMPLE of the capabilities of sfdc-wsc and Android.  It contains examples of logging into Salesforce, querying for records, and making a create call. I left the error handling extremely lax, this is not a production-ready app*</b>
</p>
<p>
To access the project, please visit <a href="http://code.google.com/p/voicenotes/" target=_blank>http://code.google.com/p/voicenotes/</a>.  To get right to the good stuff by installing the application: simply navigate to the /bin folder and download VoiceNotes.apk, which can be installed directly onto your Android device either via the phone&#8217;s storage device or via the command line (<a href="http://www.brighthub.com/mobile/google-android/articles/37151.aspx" target=_blank>How to install APK files on your Google Android phone</a>)
</p>
<p>
So, have a look around at the source while I regroup and get some code examples together.  Enjoy!
</p>
<p><div>
<img src="http://www.joe-ferraro.com/images/vn1.png"/>
</div>
<div>
<img src="http://www.joe-ferraro.com/images/vn2.png"/>
</div>
<div>
<img src="http://www.joe-ferraro.com/images/vn3.png"/>
</div>
<div>
<img src="http://www.joe-ferraro.com/images/vn4.png"/>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2010/08/android-app-salesforce-com-voice-notes-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>StaticResourcer Force.com/Adobe Air app</title>
		<link>http://joe-ferraro.com/2010/08/staticresourcer-force-comadobe-air-app/</link>
		<comments>http://joe-ferraro.com/2010/08/staticresourcer-force-comadobe-air-app/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 18:06:51 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[flex]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[adobe flex]]></category>
		<category><![CDATA[Force.com]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[static resources]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=82</guid>
		<description><![CDATA[

UPDATE: .zip uploads do not seem to be working properly on Windows 7.  The Static Resource is being saved, but the file format is invalid.  I&#8217;ll do some additional testing and attempt to patch.



I&#8217;d like to introduce a Force.com/Adobe Air app that I cooked up that allows developers to easily create and update [...]]]></description>
			<content:encoded><![CDATA[<div style="padding:10px;background-color:#ffffcc;border:2px solid #f7f7f7;margin-bottom:10px;">
<p>
<b>UPDATE: </b>.zip uploads <u>do not</u> seem to be working properly on Windows 7.  The Static Resource is being saved, but the file format is invalid.  I&#8217;ll do some additional testing and attempt to patch.
</p>
</div>
<p>
I&#8217;d like to introduce a Force.com/Adobe Air app that I cooked up that allows developers to easily create and update Static Resources in Salesforce.com orgs.  On a recent project, I found myself working with complex Static Resource zip files containing hundreds of files in a multi-tiered file structure.  When I needed to update the archive, I had to either use the Eclipse IDE trick (results may vary) or go to Setup &#8211;> Develop &#8211;> Static Resources and &#8220;Edit&#8221;.
</p>
<p>
StaticResourcer is a desktop application that allows you to drag and drop your zip, image, or text-based file and upload it to Salesforce.com.  The app is very much in ALPHA right now, so it may handle certain file types in an unexpected way, but <b>I&#8217;ve found it to be effective when processing .zip, .png, .gif, .jpeg, .txt, .css, .js, and .html files on <u>Mac OS X</u></b>.
</p>
<p>
Please give it a try at your convenience and let me know how it works!
</p>
<p>
<a href="http://www.joe-ferraro.com/air/StaticResourcerAlpha1.zip">Download StaticResourcer Alpha 1</a>
</p>
<div>
<img src="http://www.joe-ferraro.com/images/sr1.png" alt="StaticResourcer Login" /><br />
<img src="http://www.joe-ferraro.com/images/sr2.png" alt="StaticResourcer File Drop Zone" /></div>
<p><a href="http://www.joe-ferraro.com/air/StaticResourcerAlpha1.zip">Download StaticResourcer Alpha 1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2010/08/staticresourcer-force-comadobe-air-app/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Live Twitter Gadget For Accounts</title>
		<link>http://joe-ferraro.com/2010/02/live-twitter-gadget-for-accounts/</link>
		<comments>http://joe-ferraro.com/2010/02/live-twitter-gadget-for-accounts/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 00:27:05 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[salesforce]]></category>
		<category><![CDATA[appexchange]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=68</guid>
		<description><![CDATA[Wow, it&#8217;s been quite a while, but I&#8217;m finally back to let you know about a new app from Mavens on the Salesforce.com AppExchange.  &#8220;Live Twitter Gadget For Accounts&#8221; is a nifty Salesforce/Twitter mashup that does not require a Twitter account.  In a nutshell, it allows you to set keywords on your Salesforce [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, it&#8217;s been quite a while, but I&#8217;m finally back to let you know about a new app from <a href="http://www.mavensconsulting.com">Mavens</a> on the Salesforce.com AppExchange.  &#8220;<a href="https://sites.secure.force.com/appexchange/listingDetail?listingId=a0N300000023Nd6EAE" target=new>Live Twitter Gadget For Accounts</a>&#8221; is a nifty Salesforce/Twitter mashup that does not require a Twitter account.  In a nutshell, it allows you to set keywords on your Salesforce accounts that will drive related Tweets to your Account&#8217;s detail page, in real time.  This application was inspired by the functionality delivered by Google&#8217;s live results feature.</p>
<div>
<img src="http://joe-ferraro.com/images/liveTwitter.png"/>
</div>
<div style="margin-top:20px;">
<p><b>Installation screencast:</b></p>
<p><object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=45449' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=45449' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2010/02/live-twitter-gadget-for-accounts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>lookup &#8211;&gt; picklist</title>
		<link>http://joe-ferraro.com/2009/06/lookup-picklist/</link>
		<comments>http://joe-ferraro.com/2009/06/lookup-picklist/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 19:47:14 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[apex]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[visualforce]]></category>
		<category><![CDATA[lookup relationship]]></category>
		<category><![CDATA[picklist]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=67</guid>
		<description><![CDATA[I've had several clients "voice concerns" about Salesforce.com's lookup functionality relative to user acceptance. Well, if you're dealing with a relatively simple lookup table, you can override an object's new/edit page with a Visualforce page and display the lookup field to the user as a picklist.]]></description>
			<content:encoded><![CDATA[<div style="padding: 5px; margin-bottom: 10px;"><img src="http://joe-ferraro.com/images/lookupToPicklist.png" alt="" /></div>
<p>I&#8217;ve had several clients &#8220;voice concerns&#8221; about Salesforce.com&#8217;s lookup functionality relative to user acceptance.  Well, if you&#8217;re dealing with a relatively simple lookup table, you can override an object&#8217;s new/edit page with a Visualforce page and display the lookup field to the user as a picklist.</p>
<p>In the [live Visualforce] example below, the user is creating a new &#8220;Some_Object__c&#8221; record.  The Some_Object__c object is very simple: it&#8217;s comprised of a standard name field and a custom lookup to another table called &#8220;Location__c&#8221;.  Location__c is comprised of name, city, and state fields and there are only 8 rows in the table.  Rather than having the user click the magnifying glass icon to lookup to the Location__c table, one can quite easily display a list of possible values to the user along with any other pertinent information (in this case, I&#8217;m displaying Location__c&#8217;s City__c and State__c fields as well).</p>
<div style="margin-top: 60px;">
 <IFRAME src="https://crmmanager-developer-edition.na6.force.com/test/NewObject" height="300" width="650" frameborder="0" scrolling="no" ></IFRAME>
</div>
<pre name="code" class="java">

public class SomeObjectExtension {
	private final ApexPages.standardController controller;
	private final Some_Object__c obj;

	public SomeObjectExtension(ApexPages.StandardController stdController) {
		this.controller = stdController;
		this.obj = (Some_Object__c)stdController.getRecord();
	}

	public SelectOption[] getLocationOptions() {
		SelectOption[] locations = new SelectOption[]{};
		locations.add(new SelectOption(&#039;&#039;,&#039;--None--&#039;));
		for (Location__c l : [select id, name, city__c, state__c from location__c where isdeleted = false order by name]) {
			locations.add(new SelectOption(l.id, l.name + &#039; (&#039; + l.city__c + &#039;, &#039; + l.state__c + &#039;)&#039;));
		}
		return locations;
	}
}
</pre>
<pre name="code" class="java">

&lt;apex:page standardController=&quot;Some_Object__c&quot; extensions=&quot;SomeObjectExtension&quot; showHeader=&quot;false&quot; &gt;
&lt;apex:sectionHeader title=&quot;Some Object Edit&quot; subtitle=&quot;New Some Object&quot; /&gt;
&lt;apex:form id=&quot;someObjectForm&quot;&gt;
&lt;apex:pageBlock title=&quot;Some Object Edit&quot; mode=&quot;edit&quot;&gt;
&lt;apex:pageBlockButtons &gt;
&lt;apex:commandButton action=&quot;{!save}&quot; value=&quot;Save&quot;/&gt;
&lt;/apex:pageBlockButtons&gt;
&lt;apex:pageBlockSection title=&quot;Some Object Information&quot; columns=&quot;1&quot;&gt;
&lt;apex:inputField value=&quot;{!Some_Object__c.Name}&quot; required=&quot;true&quot;/&gt;
&lt;apex:pageBlockSectionItem &gt;
&lt;apex:outputLabel value=&quot;{!$ObjectType.Some_Object__c.fields.Location__c.label}&quot; for=&quot;pLabel&quot;/&gt;
&lt;apex:outputPanel styleClass=&quot;requiredInput&quot; layout=&quot;block&quot;&gt;
&lt;apex:outputPanel styleClass=&quot;requiredBlock&quot; layout=&quot;block&quot;/&gt;
&lt;apex:actionRegion &gt;
&lt;apex:selectList id=&quot;locationLookupPicklist&quot; value=&quot;{!Some_Object__c.Location__c}&quot; size=&quot;1&quot; rendered=&quot;true&quot;&gt;
&lt;apex:selectOptions value=&quot;{!locationOptions}&quot;/&gt;
&lt;/apex:selectList&gt;
&lt;/apex:actionRegion&gt;
&lt;/apex:outputPanel&gt;
&lt;/apex:pageBlockSectionItem&gt;
&lt;/apex:pageBlockSection&gt;
&lt;/apex:pageBlock&gt;
&lt;/apex:form&gt;
&lt;/apex:page&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2009/06/lookup-picklist/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>extjs &amp; visualforce (part 2), JSON this time</title>
		<link>http://joe-ferraro.com/2009/04/extjs-vf-json/</link>
		<comments>http://joe-ferraro.com/2009/04/extjs-vf-json/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 14:45:14 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[apex]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[visualforce]]></category>
		<category><![CDATA[extjs]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=65</guid>
		<description><![CDATA[Let me preface this post by stating that the following is merely a proof of concept and should not necessarily be implemented into a production org.  The pagination demonstrated below is not fit for large datasets and may result in unexpected behavior!  
Rich Waters&#8217; comment on my first post re: Ext JS &#038; [...]]]></description>
			<content:encoded><![CDATA[<p>Let me preface this post by stating that the following is merely a <em>proof of concept</em> and <u>should not</u> necessarily be implemented into a production org.  The pagination demonstrated below is not fit for large datasets and may result in unexpected behavior!  </p>
<p><a href="http://joe-ferraro.com/2009/04/extjs-visualforce/#comment-1164" target=new>Rich Waters&#8217; comment</a> on my <a href="http://joe-ferraro.com/2009/04/extjs-visualforce/" target=new>first post re: Ext JS &#038; visualforce</a> got me thinking about the possibilities of leveraging JSON in Ext JS components within Visualforce, so I implemented a paging grid, similar to <a href="http://extjs.com/deploy/dev/examples/grid/paging.html" target=new>this example provided by Ext JS</a>.  OK, enough of the formalities, I suppose people want to see what kind of development ensued:</p>
<p>First, the product, a JSON-based Ext JS paging grid:</p>
<div>
 <IFRAME src="http://crmmanager-developer-edition.na6.force.com/test/ExtJs_Json_Grid" height="400" width="650" frameborder="0" scrolling="no" ></IFRAME>
</div>
<p>Now, for the magic behind the grid, the JSON file (a Visualforce page called &#8220;Json_test&#8221;):</p>
<pre name="code" class="java">

&lt;apex:page contentType=&quot;text/html&quot; showHeader=&quot;false&quot; controller=&quot;Json_File&quot; &gt;
	&lt;apex:outputText value=&quot;{!json}&quot; /&gt;
&lt;/apex:page&gt;
</pre>
<p>The controller (spits out the JSON):</p>
<pre name="code" class="java">

public class Json_File {

	public string json {get;set;}

	public Json_File() {
        opportunity[] opps = new opportunity[]{};

	integer start = 0;
	integer pageSize = 10;

	if (ApexPages.currentPage().getParameters().get(&#039;start&#039;) != null &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; ApexPages.currentPage().getParameters().get(&#039;limit&#039;) != null) {
		start = integer.valueof(ApexPages.currentPage().getParameters().get(&#039;start&#039;));
		pageSize = integer.valueof(ApexPages.currentPage().getParameters().get(&#039;limit&#039;));
	}

        string jsonRecordsString = &#039;&#039;;

        integer i = 1;
        integer j = 0;

        for (Opportunity o : [Select id, name, stagename, closedate from opportunity order by name limit 1000]) {
			if (j &gt;= start) {
				if (i &lt;= pageSize) {
					jsonRecordsString += &#039;{&#039;;
					jsonRecordsString += &#039;&quot;id&quot;:&#039; + &#039;&quot;&#039;+o.id+&#039;&quot;,&#039;;
					jsonRecordsString += &#039;&quot;name&quot;:&#039; + &#039;&quot;&#039;+o.name+&#039;&quot;,&#039;;
					jsonRecordsString += &#039;&quot;stagename&quot;:&#039; + &#039;&quot;&#039;+o.stagename+&#039;&quot;,&#039;;
					jsonRecordsString += &#039;&quot;closedate&quot;:&#039; + &#039;&quot;&#039;+o.closedate+&#039;&quot;&#039;;
					jsonRecordsString += &#039;},&#039;;
					i++;
				}
			}
			opps.add(o);
			j++;
        }

		string jsonString = &#039;({&quot;total&quot;:&quot;&#039;+opps.size()+&#039;&quot;, &quot;results&quot;:[&#039; + jsonRecordsString + &#039;]})&#039;;
        jsonString = jsonString.replaceAll(&#039;,]&#039;,&#039;]&#039;);
        this.json = jsonString;
	}
}
</pre>
<div style="margin-top:50px;">
<p>Finally, the grid itself (from the Visualforce page embedded above in this post):</p>
<p>*It&#8217;s important to note that this Visualforce page does not have a controller; the JsonStore provides the reference needed (url) [see below] to access the future backend of the grid.
</p></div>
<pre name="code" class="javascript">

&lt;script type=&quot;text/javascript&quot;&gt;
	var opportunity_grid;

	Ext.onReady(
		function() {
			//prevents mixed content message in ie
			Ext.BLANK_IMAGE_URL = &#039;/s.gif&#039;;
			Ext.SSL_SECURE_URL = &#039;/s.gif&#039;;
			render_queue();
		}
	);

	function render_queue() {
		// create the data store
		var store = new Ext.data.JsonStore({
			totalProperty: &#039;total&#039;,	// total data, see json output
			root: &#039;results&#039;,	// see json output
			url: &#039;http://crmmanager-developer-edition.na6.force.com/test/Json_test&#039;,
	        fields: [
	           {name: &#039;id&#039;},
	   			&#039;name&#039;, &#039;stagename&#039;, &#039;closedate&#039;
       		]
   		});

		var pagingBar = new Ext.PagingToolbar({
	        pageSize: 10,
	        store: store,
	        displayInfo: true,
	        displayMsg: &#039;Displaying opportunities {0} - {1} of {2}&#039;,
	        emptyMsg: &quot;No opportunities to display&quot;
	    });

		var gridView = new Ext.grid.GridView({
				forceFit: true
		}); 

	    opportunity_grid = new Ext.grid.GridPanel({
	        store: store,
	        columns: [
	            {header: &quot;name&quot;, width: 150, dataIndex: &#039;name&#039;, sortable: true},
	            {header: &quot;stage&quot;, width: 150, dataIndex: &#039;stagename&#039;, sortable: true},
	            {header: &quot;close date&quot;, width: 150, dataIndex: &#039;closedate&#039;, sortable: true}
	        ],
	        width:580,
	        height:300,
	        loadMask: true,
	        bbar: pagingBar,
	        view: gridView,
	        layout: &#039;fit&#039;
	    });
		try {
			opportunity_grid.render(&#039;opportunity_grid&#039;);
		} catch(e){}	

		store.load({params:{start:0, limit:10}});
	}
&lt;/script&gt;
</pre>
<p>As you can see, the Json_File controller accepts two params (start, pageSize), which are sent from the store in store.load() to manage the index of the query and the number of records returned.  Unfortunately, Salesforce does not provide an &#8220;INDEX&#8221; keyword in SOQL, which would make this pagination much more &#8220;resource respectful&#8221; (each time page up/page down is called from the paging grid, we receive a full dataset from Salesforce which, as you might guess, can be dangerous for tables with more than a thousand records).</p>
<p>I looked into the possibility of leveraging <a href="http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_pages_standardsetcontroller.htm">StandardSetController</a>, but given the out-of-box architecture of the paging grid, we&#8217;d still be calling our JSON controller each time the grid was &#8220;paged&#8221;, which effectively calls the entire dataset.</p>
<p>I&#8217;m open to ideas, so please weigh in.</p>
<p><span style="color:red;font-weight:bold;">EDIT: the source for the above example&#8230;</span><br />
<a href="http://joe-ferraro.com/blog-resources/ExtJs_Json_Grid.page">ExtJs_Json_Grid.page</a><br />
<a href="http://joe-ferraro.com/blog-resources/Json_Controller.cls">Json_Controller.cls</a><br />
<a href="http://joe-ferraro.com/blog-resources/Json_test.page">Json_test.page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2009/04/extjs-vf-json/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
