Monday, April 18, 2011

The ABCs (I need x and y) of Force.com development…









A while ago I saw this blog post, “The ABCs of Web Development” by Siddharth. I enjoyed it so much I thought it might be fun to try to do the same thing with Force.com development. A draft has been sitting in Evernote for a couple weeks now and I only needed X and Y (XML seemed too easy) to complete. So I decided to put out my incomplete list and see if anyone had an X, Y or any other concepts/terms they might stick in here. I will update and give you credit if you send me one.

Below is what I have so far. I'd love to hear your thoughts or additions!


APEX - APEX is a programming language created by Salesforce.com that is hosted and run entirely on the Force.com platform. 

http://wiki.developerforce.com/index.php/An_Introduction_to_Apex

API - API stands for "Application Programming Interface". Think of it as a set of predefined methods you can call to interact with your Salesforce.com instance. 



Batch APEX - What you use to create large, complex, long-running jobs on the platform.


C

Custom Object - A custom object is pretty much the same thing as a database table. They can be defined through the declarative UI to extend your Salesforce data and have a number of field types you can add to them. 



DML - DML stands for "data manipulation language". This is basically all the different things you can do to modify your data in Salesforce (insert, update, delete, etc.).



Database.com (Submitted by @knhornt) - "Database.com is the world’s first enterprise database built for the cloud. It's open, proven and trusted. Database.com is built to power the next generation of Cloud 2 social and mobile enterprise apps." Definition from the Database.com website. This new Salesforce offering was announced at Dreamforce 2010.

http://www.database.com/


Data Loader (Submitted by @ashoknaglikar) - Desktop tool that allows you to easily access your Salesforce data.


http://wiki.developerforce.com/index.php/Apex_Data_Loader


Eclipse - Eclipse is an open source IDE in which you can develop your APEX and Visualforce code.


F

Flex - Flex is an open source framework for developing rich internet applications. Using Salesforce's APIs you can create very slick applications using Flex. There are a number of built-in UI libraries, as well as a powerful charting library that allows you to create powerful dashboards. 


Force.com Explorer (Submitted by @ashoknaglikar) - Direct from the developer.salesfore.com website: "The Force.com Explorer (beta) is a new cross-platform Force.com database explorer built with Adobe Flash Builder for Force.com. It's an AIR app, so you can get started pretty quickly: click here to install."
G

Governor Limits - Since you are developing in a shared environment Salesforce has implemented a number of limits to make sure your code is not taking up too many resources. If you reach a governor limit, your code will throw an error and stop running.


H

HTML - HTML stands for "Hypertext Markup Language" Ultimately all of your Visualforce code gets turned into HTML, so if you have an understanding of HTML you will be okay.



Heroku  (Submitted by @knhornt) - Heroku is a could based platform for developing Ruby applications. Salesforce announced that they would be buying Heroku at Dreamforce 2011.


 http://www.heroku.com/

I

IDE - IDE stands for Integrated Development Environment. The current IDE of choice for Force.com development is Eclipse. However, there a number of cloud based IDEs (BrainEngine) popping up that might give it a run for its money.


J

 jQuery - jQuery is an extremely fast and powerful JavaScript library that is commonly used by Force.com developers. It can be downloaded for free and uploaded to your Salesforce.com org as a Static Resource.


JSON (Submitted by @osamanasir) - JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language,


K

Keywords - A set of reserved words that you cannot use when naming variables, methods, or classes.


L

Log  (Debug Log) – “A debug log records database operations, system processes, and errors that occur when executing a transaction or while running unit tests. The system generates a debug log for a user every time that a user executes a transaction that is included in the filter criteria”.


M

MVC -  MVC stands for Model-view-controller. It is a software design pattern that is used in Force.com development. The idea is to separate the Model (Database or Custom Objects in SFDC) from the View (User interface or Visualforce in SFDC) from the Controller (Business Logic or APEX code in SFDC). 



N

nullPointerException - If you have ever done any APEX coding, you have probably run into this error. It is defined as "Any issue with dereferencing null".  It can be a frustrating little error that is sometimes hard to debug. You can find some examples of it in the APEX manual below.


O

Org - This term refers to a particular instance of Salesforce. 

P

Production - This refers to your "production" instance of Salesforce. All APEX coding must be done in a Sandbox or Developer instance and pushed to production once code coverage is reached.
Q

Query (SOQL and SOSL) - I know this is cheating a little bit since Salesforce's query languages actually start with S and not Q but I had a hard time finding a Q. Anyways, Salesforce Object Query Language (SOQL) and Salesforce Object Search Language (SOSL) are two ways that you can query Salesforce for data. SOQL has a syntax that is very similar to SQL and is primarily used to query Salesforce objects for a list of records that match a specific criteria. SOSL is used to search a list of lists of objects that contain a given search term.


R

Rerender attribute - Used in Visualforce to do partial page refreshes and create cool user interfaces. Used in this code sample:


S

standardController - This is the pre-built Visualforce controller that you reference if you create an Extension for a Visualforce page.  



Sandbox - (Submitted by @_siddhesh) - A sandbox is a replication of your production environment in which you do Force.com development before pushing to production. Below is a link that outlines the different types of Force.com environments.


http://wiki.developerforce.com/index.php/An_Introduction_to_Environments

Sites - (Submitted by @_siddhesh) Force.com sites allows you to create public facing web sites and applications that run on the Force.com platform and can leverage data in your Salesforce org.

http://developer.force.com/sites
http://wiki.developerforce.com/index.php/An_Introduction_to_Force.com_Sites

T

Trigger - Triggers are used to invoke APEX based on data changing in your Salesforce org. Triggers can be run on most objects when records are inserted, updated, deleted, merged, upserted and undeleted.


U

Unit Tests - "A unit test is code that exercises a specific portion of your codebase in a particular context." In order to get your code from a development or sandbox environment to a production environment you need to have 75% code coverage. This code coverage is gained by writing unit tests for your code. Basically, it is verifying that your code runs the way you think it should with no errors.


V

Visualforce - Allows you to create any user interface to run on the Force.com platform. 


W

Webservice methods - You can expose your own APEX class methods as a custom web service using the "webservice" keyword. This allows external applications to make calls to your APEX code within Salesforce.


X
Y

YouTube Salesforce Channel  (Submitted by @pbattison) - A collection of videos that are all about Salesforce.com. This site is maintained by @CRMFYI

ZIP archives - This is one of my favorite features of Force.com development. You can upload a zip file as a Static Resource with a bunch of images, JavaScript code, or whatever and then reference it on your Visualforce pages.

Sunday, March 13, 2011

Resources that helped me learn Force.com development





It has been five plus years now that I have been doing the majority of my development work on the Force.com platform. It has been a fun and sometimes frustrating journey to go from a self taught PHP developer who was at home with the LAMP stack to developing in the "cloud" with the Force.com platform. Since you can’t go to college to learn Salesforce's platform I thought I would take a minute to share with others the free resources that have helped me on many late nights as I hammered out some code for a client. This list is by no means exhaustive but it includes the main places I go when I need direction or when I need to sharpen my skills.

Salesforce.com generated content:

The first place I always turn to is the Salesforce.com generated content (most of which can be found at http://developer.force.com/). Hats off to the team at Salesforce for creating a killer platform and then taking the time to document it clearly. Weekly there are new webcasts about the platform and it seems like their documentation is updated with almost every release. If you are anything like me you don’t remember every bit of syntax...so I have the APEX, Visualforce, and API docs always bookmarked for quick reference.

They have also made available their "Dev 401 Building Applications" and "Dev 510 Apex and Visualforce" level classes on iTunes U so you can download over 15 hours of classroom teaching for free. If you are not familiar with iTunes U all you need is iTunes installed on your computer and you can download a bunch of very cool classes (Salesforce classes, Stanford iPhone dev classes, etc) for free. If you have the time these two courses are a great in-depth overview of development on the platform.

Lastly I will mention Dreamforce (even though it is not free… get your work to pay for it) the annual conference for Salesforce. There are tons of sessions you can attend to learn basic and advanced Force.com development. Plus you get to network, drink a lot of free beer and usually hear a good band.

The very active Force.com developer community:

From the developer evangelists to regular developers there are a number of very active and accessible people who are blogging, tweeting and making videos on how to work with the platform. Here is a short list of some of the blogs I have found most beneficial (I know there are many more out there...please email me if you know of some good ones!):

1. http://blog.sforce.com/ - This is the official blog that is maintained by Salesforce.com. A must-read to stay up-to-date on all things related to the platform.
2. http://gokubi.com/ - A blog written by Steve Andersen, a Solution Architect at the Salesforce.com foundation.
3. http://www.tehnrd.com/ - I love the style of writing on this one. Jason is also a great reference on how to use jQuery on the platform.
4. http://blog.jeffdouglas.com/ - Jeff is one of the co-authors of the Salesforce.com handbook and is always cranking out valuable content.
5. http://www.embracingthecloud.com/ - Written by Mike Leach at Facebook, this blog has in-depth entries on development on the platform.
6. http://wesnolte.com/ - The other co-author of the Salesforce.com handbook and a pretty smart chap.

I am a pretty late adopter to Twitter, joining only a couple of months ago. In that short time, a day has not gone by where I don’t learn about something new from the many people Tweeting about Salesforce. If you are not on Twitter join tomorrow and follow some of these people. Even if you don’t Tweet a thing, I guarantee you will learn a ton from the stream of consciousness out there. 

Two other areas to go for code samples are the Cookbook and the Code Share.

Force.com discussion boards:

In my opinion, the discussion boards on developer.force.com are the best place you can go to get accurate and quick advice when you are stuck on something. I have been on other boards where the tone of the experienced developers is arrogant and condescending. That is not that case with these boards. I remember when I was first starting out (and still today) asking pretty simple and basic questions with a little hesitation. Pretty much every time I have asked a question I have gotten a response from a fellow developer, evangelist or product manager that helps me figure out my issue. In the beginning this was the most important resource to me.

Developer challenges:

Over the past couple of years Salesforce has put on a number of developer challenges. These challenges have given me the freedom to be creative and create some stuff on the platform that no client would ever pay for. However, they have sharpened my skills and allowed me to think out of the box when it comes to the platform and what is possible on it. I regularly use code from my challenge entries when I deliver client work. I even have taken part in other companies challenges (PayPal) and written my entries on the Force.com platform. I would encourage everyone to take part in the challenges even if you have to work a couple nights to accomplish it. You learn a ton from them, meet fellow developers, and you might even win an Apple product. 

Banging my head against it:

Lastly, I am a self-taught guy. I do not have a Computer Science degree and have never taken a programming class. The only way I know how to get better at development is to do it, get frustrated, bang your head against some code for hours, and then finally figure it out. It is frustrating but when it clicks it is all good. Taking the time to get your hands dirty is probably the best way to learn the platform.

The Force.com platform is a great environment for a developer on these days and there is a mountain of resources out there to help you if you take the time to look for them. Hope this was of some value and would love to hear from you about all the resources I missed or simply don’t know about. Thanks!

Friday, August 6, 2010

Community Question Response: Partial Page Updates with Visualforce and APEX

I was reading the Salesforce developer boards the other day and ran across this question:
I have VF page which contains dropdown ,an execute button and Refresh button and a table. Upon selecting a value in the dropdown and click on execute button, at the back end a method will execute and update a value custom object field.
Upon Clicking the Refresh button i want to display the update value in the table of VF page.I am able to update the table but whole page is getting loaded.
I want to refresh only the table component part not the dropdown when I click refresh button.
Can anyone please help me achieve this"

Link to post: http://community.salesforce.com/t5/Visualforce-Development/Update-the-table-Contents-using-Partial-page-update-concept/td-p/197375

I thought would make this the first post in my attempt to answer Salesforce.com Community Questions in-depth on my blog.

Document.getElementById().innerHTML == Rerender:

When I made the jump from S-Controls to Apex/Visualforce one of the tags I missed the most was JavaScript’s document.getElementById().innerHTML. I loved making a query to the API and then retendering an area of the screen with some new data. It was “AJAX…Web 2.0…cutting edge” and my clients loved it. While JavaScript still has a place in Apex/Visualforce making calls these kind of calls with partial page updates are now replaced with a nifty Apex tag attribute…rerender.

The "rerender" attribute can be specified on a CommandButton and CommandLink (maybe more…check the Visualforce guide). All you do is enter in an Id of an element on the screen that you would like rerendered once the method associated with that button/link is complete.

A quick example:


<apex:commandButton action="{!doSomething}" rerender="idToRerender" value="Rerender"/>
<apex:outputPanel id="idToRerender"> SOME DATA RETURNED BY THE CONTROLLER</apex:outputPanel>




When you click the button it will invoke the “doSomething” method and then rerender the outputPanel with any changes made by the “doSomething” method

A complete example:

Page:

<apex:page controller="rerenderTest">
 
 
 <h1>Partial Page Refresh</h1>
 
 
 <apex:form >
  
  Put some text here: <apex:inputText value="{!showInRerender}" />
  
  <apex:commandButton action="{!doSomething}" rerender="idToRerender" value="Rerender"/>
 
 </apex:form>
 
 <apex:outputPanel id="idToRerender"> 
  {!showInRerenderModified} 
 </apex:outputPanel>

</apex:page>
Controller:

public with sharing class rerenderTest {

    public String showInRerender {get;set;}
    public String showInRerenderModified;
    
    public String getShowInRerenderModified(){

          return showInRerenderModified;

     }

     public void doSomething (){

        showInRerenderModified = 'Here is what you just typed: ' + showInRerender;

    } 

}

View working example here

You can call rerender on a number of Visualforce tags…again see the manual for a complete list. Hopefully this gives you a framework to answer your question and you can see how you could expand on this to include sObject updates, picklists, etc. to meet your specific use case.

Questions…comments…a better way to do it? I would love to hear from you!

Tuesday, March 2, 2010

PayPal and Force.com = GrantAChance.com

I wanted to put a quick post in here about an application I have built on the Force.com platform. It is a micro-grant site built on the Force.com platform that leverages the PayPal adaptive APIs. Currently a finalist in the PayPal developer challenge. Here is a write up Salesforce.com did about it:

http://blog.sforce.com/sforce/2010/03/a-microgrant-solution-built-on-forcecom-.html

Link to applicaiton:

http://www.grantachance.com

Wednesday, November 4, 2009

An interesting video on cloud computing 101...

Every had a client have their eye's glaze over when you mention the words "Cloud Computing" or all your data is in the "Cloud"? I stumbled upon this video today at CNN.com which does a good (and humorous)job of answering the question..."What is Cloud Computing?"

height="374">

Thursday, October 22, 2009

Summer Salesforce.com Developer Challenge: Taking Force.com to the next level…

This summer Salesforce.com threw down the gauntlet again and put on their second Cloud Developer Challenge. After our success with the last challenge we thought we would throw our hat in the ring and see what we could come up with. Our goal this time around was to use the Force.com platform (Sites, Visualforce, Apex, and Salesforce.com) to create an online application that displays the richness of the Force.com platform while looking nothing like a standard Salesforce.com app.

After some power brainstorming we decided that we would combine our love for Salesforce.com and endurance sports to create an online portal for users to set goals and track their workouts online. Our concept grew into an online tool that a person could use to set a goal, plan/enter their workouts, blog/twitter about their workouts and get real-time analytics of their progress towards that goal.

The result

The result of our effort was enduranceAthlete...an online application that is built on the Force.com platform and leverages some of the latest Cloud and Web 2.0 best practices. You can log in to our application to demo it:

http://workout-developer-edition.na7.force.com/SiteLogin

Below are some of the highlights of enduranceAthlete...

Data model and User Interface are built all on the Force.com platform:



Calendar that leverages jQuery to display workouts:




Integration with Active.com API to pull in information on local races:




Integration with major social networks Twitter and Blogger:





Integration with Google Analytics:





Salesforce.com honors us with a win!

We are very pleased to announce that Salesforce.com selected us as one of the three winners for the Summer Developer Challenge of which there were over 1,000 applications. Full article…

Conclusion

It is clear that with the addition of Sites that Salesforce has taken the Force.com platform to the next level. enduranceAthlete is a great example of how you can really create any online application using their platform…the sky is now the limit. I feel like we can finally say to our clients that “We can do anything on Salesforce.com”.

Thursday, October 1, 2009

Well it was good enough...

The announced the winners for the second Salesforce.com developer challenge and it turns out my entry was good enough to be in the top three...so I finally get an Apple product.

To be honest I am very honored...there were a ton of very cool apps built that I saw (I thought both the gaming sites were particularly well done). Here is a link to the announcement and the other sites that were mentioned:

Salesforce.com Announcements

Thanks again to Salesforce for the fun challenge!