<?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>jonathanrico. &#187; development</title>
	<atom:link href="http://jonathanrm.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonathanrm.com</link>
	<description></description>
	<lastBuildDate>Thu, 06 Oct 2011 15:58:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Force.com commandments &#8211; Part II</title>
		<link>http://jonathanrm.com/2011/10/force-com-commandments-part-ii/</link>
		<comments>http://jonathanrm.com/2011/10/force-com-commandments-part-ii/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 15:58:22 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=211</guid>
		<description><![CDATA[Wow, every day we learn something new so It seems like I&#8217;ll never run out of material for my list of commandments! Here&#8217;s the continuation of my previous list, it&#8217;s important to point out that some of these might not be valid for future releases but people should be careful for now when dealing with [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2011/10/force-com-commandments-part-ii/" data-text="Force.com commandments &#8211; Part II" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2011/10/force-com-commandments-part-ii/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2011/10/force-com-commandments-part-ii/"></g:plusone></div></div><p>Wow, every day we learn something new so It seems like I&#8217;ll never run out of material for my list of commandments!</p>
<p>Here&#8217;s the continuation of my previous list, it&#8217;s important to point out that some of these might not be valid for future releases but people should be careful  for now when dealing with some of the current limits. So here we go&#8230;</p>
<p>Thou shall not:</p>
<ul>
<li>Assume that standard objects in destination orgs don&#8217;t have any validation rules/trigger logic that will cause your package&#8217;s test units to fail, place your catch blocks and take actions accordingly</li>
<li>Assume your custom settings will be initialized when running test units in a destination org , make sure you validate null values or set the values for custom settings</li>
<li>Give end-users credentials to test your app and go on vacation leaving the user wondering what the heck is a verification code. Make sure you change the f$!@#%^ email address!</li>
<li>Leave out apex:pageMessages component from your VF page to display any errors  (unless your page is used for other purposes)</li>
<li>Forget to add a status indicator in your VF pages when doing async stuff</li>
<li>Forget to test and probably fix the behavior of the &#8220;enter&#8221; key in custom VF pages</li>
<li>Expect cascading delete operations to execute trigger evaluations on those records that did not initiated the delete operation</li>
<li>Forget to use Test.startTest() and Test.stopTest() methods inside test units</li>
<li>Assume that you can run a report on humongous amount of data, make sure you plan your report filters and create external ids (indexes) accordingly</li>
<li>Assume you can use a Long Text area field in a formula field or SOQL where clause</li>
<li>Assume that Force.com can handle all type of attachments , there&#8217;s a limit of 5 MB!</li>
<li>Leave the endpoint for a WSDL to Apex generated class (or any endpoint value) as a hardcoded value, make sure it can be changed through custom settings</li>
<li>Create a VF page just to show an image, use IMAGE in formula fields!</li>
<li>Ignore revoked tokens scenarios when using OAUTH</li>
<li>Use Contacts without Accounts, these are always private regardless of your organization&#8217;s sharing model</li>
<li>Forget that text names for custom objects have a max length of 80 characters</li>
<li>Forget there&#8217;s a data loader built into salesforce</li>
<li>Ignore the use LogLevel for debug statements</li>
<li>Create tabs for objects that don&#8217;t really need a tab</li>
<li>Assume auto-numbers will always be sequential, numbers will keep increasing but data creation in test units will break the sequence</li>
<li>Forget that once a master relationship has been established it CANNOT be changed</li>
<li>Create public utility classes for test data creation without the @isTest annotation (Winter 12)</li>
<li>Pretend that no one is using the production org while you&#8217;re doing your deployments</li>
<li>Forget  that a profile is tied to a type of license</li>
<li>Forget you can actually know the total number of records for specific objects just by going to Setup>Data Management>Storage Usage</li>
<li>Create a ton of single static resource for your VF pages, use a damn zip file</li>
<li>Assume SF to SF will copy all of your lookup relationships</li>
<li>Miss new platform releases webinars or not visit http://blog.sforce.com</li>
<li>Fall for jeff douglas blog phantom results in Google&#8230; but you&#8217;ll probably will anyway&#8230;</li>
</ul>
<div>Amen.</div>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2011/10/force-com-commandments-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsForce  &#8211; Sample App Template</title>
		<link>http://jonathanrm.com/2011/10/railsforce-sample-app-template/</link>
		<comments>http://jonathanrm.com/2011/10/railsforce-sample-app-template/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 02:19:58 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=255</guid>
		<description><![CDATA[I&#8217;ve been working a lot with rails and force.com during the last months, rails is awesome however getting all of the plumbing to work is a real pain. I&#8217;m working on a template app that might be helpful for anyone that&#8217;s trying to build a rails app that interacts with force.com. This app template uses: [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2011/10/railsforce-sample-app-template/" data-text="RailsForce  &#8211; Sample App Template" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2011/10/railsforce-sample-app-template/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2011/10/railsforce-sample-app-template/"></g:plusone></div></div><p>I&#8217;ve been working a lot with rails and force.com during the last months, rails is awesome however getting all of the plumbing to work is a real pain. I&#8217;m working on a template app that might be helpful for anyone that&#8217;s trying to build a rails app that interacts with force.com. </p>
<p>This app template uses:</p>
<p>Databasedotcom gem<br />
Bootstrap framework<br />
Application template<br />
Basic chatter components (more info below)</p>
<p>I decided to use cells for creating reusable components and it&#8217;s looking very promising. I created a few chatter-related components and got it to a point were the following code:</p>
<p><pre class="brush: xml">&lt;table class=&quot;profile&quot;&gt;

	&lt;tr&gt;
		&lt;td style=&quot;vertical-align:top;&quot;&gt;
			
			&lt;div style=&quot;width:100%;&quot;&gt;
				&lt;div style=&quot;width:220px;float:left;&quot;&gt;
					&lt;%= render_cell :ProfilePhoto, :display , :uid =&gt; current_user.id, :size =&gt; 'large' %&gt;
				&lt;/div&gt;
				&lt;div style=&quot;width:300px;float:left;&quot;&gt;
					&lt;%= render_cell :UserStatus, :display , :uid =&gt; current_user.id %&gt;
				&lt;/div&gt;
			&lt;/div&gt;

		&lt;/td&gt;

		&lt;td&gt;
			&lt;%= render_cell :AboutMe, :display , :uid =&gt; current_user.id %&gt;
		&lt;/td&gt;

	&lt;/tr&gt;

&lt;/table&gt;</pre></p>
<p>Renders the following page:</p>
<p><a href="http://jonathanrm.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-02-at-2.30.00-AM.png"><img src="http://jonathanrm.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-02-at-2.30.00-AM-300x145.png" alt="" title="RailsForce Template App" width="300" height="145" class="aligncenter size-medium wp-image-263" /></a><br />
I&#8217;m no expert in ruby or rails so I hope that with the help of other developers we can improve the template and expand the components library. </p>
<p>Also, i&#8217;m planning to provide some libraries to access the metadata api from ruby but this is still a work in progress.</p>
<p>You can checkout the github project <a href="https://github.com/jonathansnd/RailsForce_AppTemplate" title="here" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2011/10/railsforce-sample-app-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on auto-number names</title>
		<link>http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/</link>
		<comments>http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/#comments</comments>
		<pubDate>Wed, 11 May 2011 15:36:30 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[force.com]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=217</guid>
		<description><![CDATA[Good stuff is coming for the Summer &#8217;11 release of the Force.com platform! My personal favorites: dynamic components and javascript remoting, these 2 features will save a lot of headaches when working with Visualforce and I&#8217;m already thinking of several pages that I could optimize by using them. Anyway, every new release comes with very [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/" data-text="Thoughts on auto-number names" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/"></g:plusone></div></div><p>Good stuff is coming for the Summer &#8217;11 release of the Force.com platform! My personal favorites: dynamic components and javascript remoting, these 2 features will save a lot of headaches when working with Visualforce and I&#8217;m already thinking of several pages that I could optimize by using them.</p>
<p>Anyway, every new release comes with very interesting features but there&#8217;s still a feature that I&#8217;d wish Salesforce could improve and it has to do with auto-number names for records. Why? Well, because these records are hard to find. There are cases where you definitely don&#8217;t need to setup a special name for records and any identifier will work but I&#8217;ve come across several cases in which users need to select a record that has an auto-number name through a lookup dialog and always end up with complaints about the search functionality for these records. This could be solved by telling users to use a naming convention for the record and avoid auto-number names but it&#8217;s hard to assure naming conventions will be followed and since the name field is a required field you cannot set it through a trigger or workflow unless you make some workarounds with Visualforce.</p>
<p>These situations usually happen when we have an object in which the record name is hard to define since it may describe several things  and these  usually end up being records of junction objects. For example, let&#8217;s look at the following situation with the well-know Recruiting app.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://jonathanrm.com/wp-content/uploads/2011/05/1305094726906_77683.png"><img class="aligncenter size-full wp-image-228" title="1305094726906_77683" src="http://jonathanrm.com/wp-content/uploads/2011/05/1305094726906_77683.png" alt="" width="452" height="317" /></a></p>
<p style="text-align: center;">&nbsp;</p>
<p>We have a junction object called Job Application and we name it JA-{00000}, everything works fine at first but as our application continues to grow we might end up creating an object such as &#8220;Interview&#8221; that we must link to a &#8220;Job Application&#8221;. If you wanted to create an Interview record directly from the &#8220;Interview&#8221; tab and link it to a Job App through the lookup dialog, well&#8230; you&#8217;ll need to know the auto-number name for the Job Application or hope it comes up in the recently viewed records, although Salesforce gives us the option to set the columns for the lookup dialogs there&#8217;s no easy way to search within the list for this type of records.</p>
<p>I think any of the following options could help a lot in this situation:</p>
<p>1.- Search by other fields within lookup dialogs, not just name fields</p>
<blockquote><p><strong>The good:</strong></p>
<p>Minimum impact and it would involve a small amount of configuration tasks since we would probably just need to set some of the fields as external ids to create indexes so that we can search on these.</p>
<p><strong>The bad:</strong></p>
<p>There might be some cases where we might need to create workflow rules for concatenation purposes.</p>
<p>We won&#8217;t be able to display more info of the record in the auto-number name.</p></blockquote>
<p>2.- Give the option for removing the required option from the name field</p>
<blockquote><p><strong>The good:</strong></p>
<p>Gives us the flexibility to set the name through workflows or apex triggers (for more complex situations).</p>
<p>This could be useful for objects in which you might want to create a name depending on the record type, the name field could be hidden from a specific layout and then filled in the background through workflows or triggers.</p>
<p><strong><strong>The bad:</strong></strong></p>
<p>If no name is defined, we might end up with records having the Id of the record as a name and that is a bad thing.</p></blockquote>
<p>3.- Define an auto-number as a formula field</p>
<blockquote><p><strong>The good:</strong></p>
<p>Gives us a lot of flexibility for setting up the record name without using any workflow or apex trigger.</p>
<p><strong>The bad:</strong></p>
<p>Probably hard for the platform since it would need to construct an index based on a formula field and I guess that if this is possible it could hurt in performance.</p></blockquote>
<p>In my opinion, option 1 is probably the best since it seems like the one that has less impact but I wish the platform could offer the flexibility of option 2. I&#8217;d  appreciate any feedback on this from everyone out there, there are already  some ideas related to this subject so please vote for them so that we can see this solved in a future release.</p>
<p>Here&#8217;s a list of some of the ideas related to auto-number fields:</p>
<ul>
<li><a title="Allow Record Name to be formula field while allowing autonumber" href="http://success.salesforce.com/ideaView?c=09a30000000D9xtAAC&amp;id=08730000000Brs9AAC" target="_blank">Allow Record Name to be formula field while allowing autonumber</a></li>
<li><a title="Improve Enhanced Lookup Search Capabilities" href="http://success.salesforce.com/ideaView?c=09a30000000D9xtAAC&amp;id=08730000000BrFaAAK" target="_blank">Improve Enhanced Lookup Search Capabilities</a></li>
<li><a title="Lookup Search Fields For Custom Objects " href="https://sites.secure.force.com/success/ideaView?c=09a30000000D9xtAAC&amp;id=08730000000BqxdAAC" target="_blank">Lookup Search Fields For Custom Objects</a></li>
</ul>
<div>Saludos!</div>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2011/05/thoughts-on-auto-number-names/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Force.com commandments</title>
		<link>http://jonathanrm.com/2011/03/force-com-commandments/</link>
		<comments>http://jonathanrm.com/2011/03/force-com-commandments/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 07:00:36 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=201</guid>
		<description><![CDATA[I spent a few minutes today thinking about my experiences developing on the Force.com platform. Overall it has been great, nevertheless, there have been some bumps in the road (and there will be more to come). Here&#8217;s a list of some commandments that I&#8217;ve come to think of as imperatives for development on Force.com. NOTE: [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2011/03/force-com-commandments/" data-text="Force.com commandments" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2011/03/force-com-commandments/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2011/03/force-com-commandments/"></g:plusone></div></div><p>I spent a few minutes today thinking about my experiences developing on the Force.com platform. Overall it has been great, nevertheless, there have been some bumps in the road (and there will be more to come).</p>
<p>Here&#8217;s a list of some commandments that  I&#8217;ve come to think of as imperatives for development on Force.com.</p>
<p>NOTE: This is just a list with no particular order of some of what I consider are the most important items.</p>
<p>Thou shall not:</p>
<ul>
<li>Say a class or trigger is ready without having any test units</li>
<li>Place a SOQL query inside a for loop</li>
<li>Place a DML operation (for a single record) inside a for loop</li>
<li>Hardcode an id, object prefix or service instance names&#8230; anywhere</li>
<li>Create a full sandbox without being damn sure you&#8217;re ready to create it</li>
<li>Say a field is hidden by just removing it from a page layout</li>
<li>Assume your test units will magically find data in a new org</li>
<li>Assume a 75% coverage is good</li>
<li>Ignore asserts in your test units</li>
<li>Rely on good percentage coverage of other classes to upload your &#8220;I must get this to production right now&#8221; code</li>
<li>Prefer a trigger over a validation rule (if it can be done through a validation rule)</li>
<li>Create a new trigger for an object each time you want to add something new unless you&#8217;re pretty sure of what you&#8217;re doing</li>
<li>Ignore the undelete event in a trigger</li>
<li>Assume a trigger will process a single record</li>
<li>Create all of your classes with &#8220;without sharing&#8221; keyword unless you know what you are doing</li>
<li>Leave open queries (without a where clause or limit) unless you know very well your data</li>
<li>Ignore the escapeSingleQuoutes function to &#8220;clean&#8221; user-supplied input in dynamic SOQL</li>
<li>Keep list of objects as part of your viewstate &#8230; again &#8230; unless you know what your are doing</li>
<li>Create a custom object for saving custom settings</li>
<li>Look for a RecordType based on the Name instead of the DeveloperName</li>
<li>Ignore the certification maintenance emails</li>
<li>Reset a security token without taking in account existing integrations or other people that may be using the token</li>
<li>Have a mac and not use SoqlXplorer</li>
<li>Use chrome and not use the &#8220;Force.com utility belt&#8221; and &#8220;Force.com Logins&#8221; extensions</li>
<li>Ask questions like crazy unless you already searched in the discussions boards and found no answer</li>
<li>Use accents in profiles or page layouts names (for those that use Spanish)</li>
<li>Change the type of a lookup relationship without taking in account any impact on the standard report types and reports that are currently using those report types</li>
<li>Suspend a user without thinking about re-assigning ownership of his/her records</li>
<li>Ignore declarative changes in production, always keep track of these changes</li>
<li>Avoid the use of Security Code Scanner to resolve thy issues &#8212; Cory Cowgill</li>
</ul>
<p>Amen.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2011/03/force-com-commandments/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Best Use Cases for Force.com</title>
		<link>http://jonathanrm.com/2011/01/best-use-cases-for-force-com/</link>
		<comments>http://jonathanrm.com/2011/01/best-use-cases-for-force-com/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 08:26:46 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=192</guid>
		<description><![CDATA[These are some important considerations for those who plan to build apps for the Force.com platform, these considerations are organized by Data, Logic and User layers. In conclusion, the ideal Force.com profile is one that works with: Structured data, search, reports User-driven business processes Employee,customer or partners users Real-time information, mobile or collaboration needs]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2011/01/best-use-cases-for-force-com/" data-text="Best Use Cases for Force.com" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2011/01/best-use-cases-for-force-com/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2011/01/best-use-cases-for-force-com/"></g:plusone></div></div><p>
These are some important considerations for those who plan to build apps for the Force.com platform, these considerations are organized by Data, Logic and User layers.</p>
<p>In conclusion, the ideal Force.com profile is one that works with:
</p>
<ul>
<li>Structured data, search, reports</li>
<li>User-driven business processes</li>
<li>Employee,customer or partners users</li>
<li>Real-time information, mobile or collaboration needs</li>
</ul>
<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="560" height="340" src="http://www.youtube.com/embed/tg9ZTdSaAs8" frameborder="0" allowFullScreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2011/01/best-use-cases-for-force-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App inventor for android</title>
		<link>http://jonathanrm.com/2010/07/app-inventor-for-android/</link>
		<comments>http://jonathanrm.com/2010/07/app-inventor-for-android/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 03:37:02 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=171</guid>
		<description><![CDATA[Here&#8217;s a nice tool from Google for building apps for Android: Learn more here : http://appinventor.googlelabs.com/about/]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2010/07/app-inventor-for-android/" data-text="App inventor for android" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2010/07/app-inventor-for-android/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2010/07/app-inventor-for-android/"></g:plusone></div></div><p>Here&#8217;s a nice tool from Google for building apps for Android:</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/8ADwPLSFeY8&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8ADwPLSFeY8&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Learn more here : <a href="http://appinventor.googlelabs.com/about/">http://appinventor.googlelabs.com/about/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2010/07/app-inventor-for-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A new Google Docs</title>
		<link>http://jonathanrm.com/2010/04/a-new-google-docs/</link>
		<comments>http://jonathanrm.com/2010/04/a-new-google-docs/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 00:39:42 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=134</guid>
		<description><![CDATA[Google just released new features for Google Docs, including a new addition to the suite called Drawings! As a user of google spreadsheets I was very aware of performance issues when working with large data files and this new version of the application seems to boost performance and at least scrolling seems to work very [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2010/04/a-new-google-docs/" data-text="A new Google Docs" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2010/04/a-new-google-docs/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2010/04/a-new-google-docs/"></g:plusone></div></div><p>
Google just released new features for Google Docs, including a new addition to the suite called Drawings!</p>
<p>As a user of google spreadsheets I was very aware of performance issues when working with large data files and this new version of the application seems to boost performance and at least scrolling seems to work very well.</p>
<p>These are some great enhancements to the Google Docs suite and hopefully this brings more ideas for integrating Google Docs with Force.com through the <a href="http://wiki.developerforce.com/index.php/Google_Data_API_Toolkit" target="_blank">Google Data API Toolkit</a>.</p>
<p>Here&#8217;s a video with more info:
</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/6_hJ3R8jEZM&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/6_hJ3R8jEZM&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2010/04/a-new-google-docs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Force.com Apex Merge/Replace Class ;)</title>
		<link>http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/</link>
		<comments>http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 07:26:10 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[force.com]]></category>
		<category><![CDATA[visualforce]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=85</guid>
		<description><![CDATA[Hello again! I just developed an Apex class for performing replace/merge operations on any kind of object, and yes any kind of relations as well! , so it doesn&#8217;t matter if you have master-detail relationships that can&#8217;t be modified, objects tied in a master-detail relationship will be cloned, deleted and inserted with the new values [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/" data-text="Force.com Apex Merge/Replace Class ;)" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/"></g:plusone></div></div><p>Hello again!</p>
<p>I just developed an Apex class for performing replace/merge operations on any kind of object, and yes any kind of relations as well! , so it doesn&#8217;t matter if you have master-detail relationships that can&#8217;t be modified, objects tied in a master-detail relationship will be cloned, deleted and inserted with the new values to simulate a merge operation!</p>
<p>To use the Merge class  just create an ObjectMerge instance, passing as an argument of the constructor your current record:</p>
<p><strong>ObjectMerge oMerge = new ObjectMerge(SourceObject); </strong></p>
<p>And to peform the merge operation just use the replaceRecord method and thats it!, you can specify if you want to delete the source record after the merge operation is done.</p>
<p><strong>oMerge.replaceRecord(MergeToThisObjectID,DeleteSourceObject);</strong></p>
<p>You can limit the number of records that will be processed in the merge operation for Master-Detail relations  to avoid hitting governor limits. The ObjectMerge class will let you know if there are any objects left, and if this is the case just continue performing the merge operation.</p>
<p>Force.com provides a merge DML operation but it&#8217;s only available for some of their standard objects, this class can help you get around that.  There are still some limitations with this class due to governor limits in the number of describe calls but unless you have a large amount of objects related to the replaced/merged record it should work pretty well.</p>
<p>For now, the Object Merge class only merges/replaces custom objects related to your record, but this can be changed  in the class , however keep in mind that no more than 10 relations can be processed due to describe calls limitations so be careful when removing the custom objects limitation because there can be many Non-Custom objects related to your record.</p>
<p>I&#8217;ll leave a link in this post to the files but for now here&#8217;s an example of how to use the ObjectMerge class in a VisualForce controller that merges contacts, if you have custom objects tied a contact A and want to merge contact A to Contact B you will see how the ObjectMerge class changes all of the objects from contact A to contact B then deletes contact A. Remember, you can try it with any custom object <img src='http://jonathanrm.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   Enjoy!</p>
<p>Download the files from here &#8211;&gt; <a title="ObjectMerge Files" href="http://jonathanrm.com/wp-content/uploads/2010/02/ObjectMerge1.zip" target="_blank">ObjectMerge</a></p>
<p><pre class="brush: java">public class MergeController{
    
    //This is just an Aux Object to get a Lookup Field in the VisualForce Page
    public Contact MergeAux{get;set;}
    //Declare an instance of the Object Merge Class
    private ObjectMerge oMerge;
    //Save the current contact in the controller (optional)
    private final Contact currentContact;
        
    public MergeController(ApexPages.StandardController controller){

        //Initialize all of our objects
        currentContact = (Contact)controller.getRecord();    
        MergeAux =new Contact();
        oMerge = new ObjectMerge(currentContact);        
        
    }
    
    //Merge Action
    public PageReference doMerge(){

        try{
     
            //Run the merge operation!, you can specify a second argument to delete the record after merge or not
            oMerge.replaceRecord(MergeAux.ReportsToId,false);
            
            //Do corresponding actions if merge operation was successful
            if(oMerge.bAppliedReplace){
                PageReference ref = new PageReference('/'+MergeAux.ReportsToId);
                ref.setRedirect(true);
                return ref;
            }else{
                return null;


        }catch(Exception e){
            
            ApexPages.addMessages(e);
            return null;    
        }
        
    }   

}

//And the Visual Force page will look something like this:

&lt;apex:page standardController=&quot;Contact&quot; extensions=&quot;MergeController&quot;&gt;
     
     &lt;apex:form &gt;
         &lt;apex:pageBlock &gt;
             &lt;apex:pageMessages id=&quot;messages&quot;&gt;
             &lt;/apex:pageMessages&gt;
             
             &lt;apex:pageBlockButtons &gt;
                 &lt;apex:commandButton value=&quot;Merge&quot; action=&quot;{!doMerge}&quot; rerender=&quot;messages&quot;/&gt;
             &lt;/apex:pageBlockButtons&gt;
             &lt;apex:pageBlockSection columns=&quot;1&quot;&gt;
                 &lt;apex:outputField value=&quot;{!Contact.Name}&quot;/&gt;
                 &lt;apex:inputField value=&quot;{!MergeAux.ReportsToId}&quot;/&gt;                
                 
             &lt;/apex:pageBlockSection&gt;
         &lt;/apex:pageBlock&gt;
     &lt;/apex:form&gt;
     
&lt;/apex:page&gt;
</pre></p>
<p>(NOTE: There&#8217;s a bug with the code viewer plug-in, please ignore the second viewer)</p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2010/02/force-com-apex-mergereplace-class/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interesting ways of architecting Apex Triggers</title>
		<link>http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/</link>
		<comments>http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 05:54:55 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[force.com]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=65</guid>
		<description><![CDATA[Hello everyone! I came across a blog post at gokubi.com (http://gokubi.com/archives/two-interesting-ways-to-architect-apex-triggers) about some interesting ways of architecting Apex Triggers. We have developed a lot of logic in Apex Triggers and ended with some really nasty code in some scenarios; this post got me thinking about new ways to architect triggers using a more object-oriented approach. [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/" data-text="Interesting ways of architecting Apex Triggers" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/"></g:plusone></div></div><p>Hello everyone!</p>
<p>I came across a blog post at gokubi.com (<a href="http://gokubi.com/archives/two-interesting-ways-to-architect-apex-triggers" target="_blank">http://gokubi.com/archives/two-interesting-ways-to-architect-apex-triggers</a>) about some interesting ways of architecting Apex Triggers.</p>
<p>We have developed a lot of logic in Apex Triggers and ended with some really nasty code in some scenarios; this post got me thinking about new ways to architect triggers using a more object-oriented approach. So just to follow the thoughts in this post I&#8217;ll show you what I did to organize our triggers and it has been working pretty good so far.</p>
<p>NOTE: Please refer to the code section below</p>
<p>//Step 1</p>
<p>I started by creating an Apex Class to replicate some of the triggers functionality&#8230;</p>
<p>//Step 2</p>
<p>The next step will be to start coding our Apex Class that will perform all of the logic in our triggers, so let&#8217;s say the we are building a trigger for My_Object__c custom object.</p>
<p>//Step 3</p>
<p>And finally, we just need to create the Apex Triggers that will just initialize our Trigger class and initialize an instance of the corresponding Apex Class that will handle all of the logic.</p>
<p>And that&#8217;s it! Just remeber to cast the the collections correctly before accessing the collections from the ExtTrigger class because we can&#8217;t work with generic sobject collections.</p>
<p>Some of the benefits that I&#8217;ve seen by organizing Apex Triggers in this way are the following:</p>
<ul>
<li>100% Test Coverage in Apex Triggers (although all of the Test Coverage should be done in the handler Apex Class)</li>
<li>Since we can call functions to perform specific actions in Apex Classes, we end up with more organized code, it&#8217;s easier to read in the sense that you can just go to see the calls inside the &#8220;onBeforeInsert&#8221; section for example..</li>
<li>Avoid the max number of characters governor limit:
<ul>
<li>Maximum number of characters for a class: 100,000</li>
<li>Maximum number of characters for a trigger: 32,000</li>
</ul>
</li>
</ul>
<p>Thanks to everyone that posted in gokubi&#8217;s blog post any feedback on this is appreciated <img src='http://jonathanrm.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2010/01/interesting-ways-of-architecting-apex-triggers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Force.com Spring &#8217;10 Release</title>
		<link>http://jonathanrm.com/2010/01/force-com-spring-10-release/</link>
		<comments>http://jonathanrm.com/2010/01/force-com-spring-10-release/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 04:16:26 +0000</pubDate>
		<dc:creator>jonathanrico.</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[force.com]]></category>

		<guid isPermaLink="false">http://jonathanrm.com/?p=61</guid>
		<description><![CDATA[Salesforce&#8217;s Spring &#8217;10 is packed with some really nice enhancements, new interface, code scheduler, no limits in collections, and more! For more information go to: http://developer.force.com/releases/release/Spring10 Here&#8217;s a small demo of how code scheduler works:]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://jonathanrm.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://jonathanrm.com/2010/01/force-com-spring-10-release/" data-text="Force.com Spring &#8217;10 Release" data-count="vertical" data-via="jonathanrico" ><!--Tweetter--></a></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://jonathanrm.com/2010/01/force-com-spring-10-release/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div><div class="socialize-in-button socialize-in-button-left"><g:plusone size="tall" href="http://jonathanrm.com/2010/01/force-com-spring-10-release/"></g:plusone></div></div><p>Salesforce&#8217;s Spring &#8217;10 is packed with some really nice enhancements, new interface, code scheduler, no limits in collections, and more!</p>
<p>For more information go to: <a href="http://developer.force.com/releases/release/Spring10">http://developer.force.com/releases/release/Spring10</a></p>
<p>Here&#8217;s a small demo of how code scheduler works:</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/nbfPgr7LLfc&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/nbfPgr7LLfc&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://jonathanrm.com/2010/01/force-com-spring-10-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

