<?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 &#187; Force.com</title>
	<atom:link href="http://joe-ferraro.com/tag/forcecom/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>wrapper class and force.com sites</title>
		<link>http://joe-ferraro.com/2008/11/wrapper-class-and-forcecom-sites/</link>
		<comments>http://joe-ferraro.com/2008/11/wrapper-class-and-forcecom-sites/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 20:17:05 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[apex]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[visualforce]]></category>
		<category><![CDATA[Force.com]]></category>
		<category><![CDATA[force.com sites]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=49</guid>
		<description><![CDATA[Force.com Sites was announced last week at Dreamforce ‘08 and what a game changing announcement it was.  Here’s my foray into Sites development, with nifty sample code...]]></description>
			<content:encoded><![CDATA[<p>Force.com Sites was announced last week at Dreamforce &#8216;08 and what a game changing announcement it was.  Here&#8217;s my foray into Sites development, with nifty sample code (please note the table of opportunity data below is a live Salesforce.com Visualforce page from my development environment embedded into this post):</p>
<div>
 <IFRAME src="http://crmmanager-developer-edition.na6.force.com/test" height="500" width="500" ></IFRAME>
</div>
<div>
<b>Controller</b></p>
<pre name="code" class="java">

public class OpportunityList_Controller {
	public class MyOpportunity {
	    Opportunity o;
	    public MyOpportunity(Opportunity opp) { o = opp; }
	    public Opportunity getOpportunity(){ return o; }

	    public String getColor()  {
		    if (o.Probability &lt; 25) return &#039;#2A73F0&#039;;
		    else if (o.Probability &gt;= 25 &amp;amp;amp;&amp;amp;amp; o.Probability &lt;= 75) return &#039;#E0B60D&#039;;
		    else if (o.Probability &gt; 75) return &#039;#FF0000&#039;;
		    else return &#039;#000000&#039;;
	    }
    }

    public List&lt;MyOpportunity&gt; results = new List&lt;MyOpportunity&gt;{};

	public List&lt;MyOpportunity&gt; getOpportunities() {
		results.clear();
        for (Opportunity o : [Select Id, Name, StageName, Closedate, Probability
From Opportunity where StageName != &#039;Closed Won&#039; order by Name limit 20]) {
        	results.add(new MyOpportunity(o));
        }
		return results;
    }
}
</pre>
</div>
<p></p>
<div>
<b>Visualforce Page</b></p>
<pre name="code" class="java">

&lt;apex:page controller=&quot;OpportunityList_Controller&quot;
tabStyle=&quot;Opportunity&quot; showHeader=&quot;false&quot; sidebar=&quot;false&quot; &gt;
	&lt;apex:form &gt;
		&lt;apex:pageBlock title=&quot;&quot; id=&quot;pageBlock&quot;&gt;
			&lt;apex:pageMessages &gt;&lt;/apex:pageMessages&gt;
			&lt;apex:pageBlockTable value=&quot;{!opportunities}&quot; var=&quot;o&quot;
rendered=&quot;{!NOT(ISNULL(opportunities))}&quot;&gt;
				&lt;apex:column &gt;
					&lt;apex:facet name=&quot;header&quot;&gt;Opportunity Name&lt;/apex:facet&gt;
					&lt;div style=&quot;color:{!o.color};font-weight:bold;text-decoration:underline;cursor:hand;cursor:pointer;&quot;&gt;
					{!o.Opportunity.Name}
					&lt;/div&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!o.Opportunity.Probability}&quot;&gt;&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!o.Opportunity.StageName}&quot;&gt;&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!o.Opportunity.CloseDate}&quot;&gt;&lt;/apex:column&gt;
			&lt;/apex:pageBlockTable&gt;
		&lt;/apex:pageBlock&gt;
	&lt;/apex:form&gt;
&lt;/apex:page&gt;
</pre>
</div>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2008/11/wrapper-class-and-forcecom-sites/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>force.com migration tool</title>
		<link>http://joe-ferraro.com/2008/08/forcecom-migration-tool/</link>
		<comments>http://joe-ferraro.com/2008/08/forcecom-migration-tool/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 22:03:04 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[salesforce]]></category>
		<category><![CDATA[Force.com]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=40</guid>
		<description><![CDATA[All you consultants out there better pick this thing up: force.com migration tool
]]></description>
			<content:encoded><![CDATA[<p>All you consultants out there better pick this thing up: <a href="http://blog.sforce.com/sforce/2008/07/announcing-forc.html">force.com migration tool</a></p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2008/08/forcecom-migration-tool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>visualizing workflow</title>
		<link>http://joe-ferraro.com/2008/05/visual-workflow/</link>
		<comments>http://joe-ferraro.com/2008/05/visual-workflow/#comments</comments>
		<pubDate>Sun, 25 May 2008 21:39:31 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[apex]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Force.com]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Saas]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://joe-ferraro.com/?p=34</guid>
		<description><![CDATA[When clients illustrate complex business processes with a seemingly endless cast of layers, players, deadlines, and notifications I cringe, not because of Salesforce.com&#8217;s inability to handle these types of processes (Salesforce.com&#8217;s workflow capabilities are exceptional), but being a visual person I&#8217;m well-aware of Salesforce.com&#8217;s inability to provide visual representation of workflow.  As a solution, I [...]]]></description>
			<content:encoded><![CDATA[<p>When clients illustrate complex business processes with a seemingly endless cast of layers, players, deadlines, and notifications I cringe, not because of Salesforce.com&#8217;s inability to handle these types of processes (Salesforce.com&#8217;s workflow capabilities are exceptional), but being a visual person I&#8217;m well-aware of Salesforce.com&#8217;s inability to provide <span style="text-decoration: underline;">visual</span> representation of workflow.  As a solution, I developed a rather simple doodad (borrowing some of the concepts of Salesforce.com&#8217;s approval processes model) to present active workflow processes to the user in a (somewhat) manageable fashion.  I characterize my solution as a hybrid between traditional workflow and approvals processes.</p>
<p><a href="http://www.screencast.com/t/O8RClGjR5hu" target="new">Click here to watch screencast</a></p>
<div><span style="font-size:12px;">Workflow detail embedded in the Opportunity detail page</span><a href="http://www.joe-ferraro.com/images/vf1.png"><img src="http://www.joe-ferraro.com/images/vf1.png" alt="Visual Workflow" width="600" /></a>
</div>
<div><span style="font-size:12px;">Modal action window</span><a href="http://www.joe-ferraro.com/images/vf2.png"><img src="http://www.joe-ferraro.com/images/vf2.png" alt="Visual Workflow" width="600" /></a>
</div>
<div><span style="font-size:12px;">Process queue Iframe embedded on the user&#8217;s front page</span><a href="http://www.joe-ferraro.com/images/processQueue.png"><img src="http://www.joe-ferraro.com/images/processQueue.png" alt="Process queue" width="600" /></a>
</div>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://joe-ferraro.com/2008/05/visual-workflow/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
