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!

Wednesday, September 2, 2009

Developer Challenge Entry Done!

So after hours of late nights (thanks to my wife taking the kids) I have completed my submission for the Developer Challenge this summer.

Endurance Athlete: A cloud based application to help you train for your next big race.




Here is a link to the site:

https://workout-developer-edition.na7.force.com/

Wednesday, April 15, 2009

Flex plus Salesforce.com APEX Webservice

Flex plus Salesforce.com APEX Webservice:


The following post will lay out a basic “Hello World” example of how to create a Flex application using a webservice call to a Force.com APEX webservice method. This example will show you how to create a Force.com Apex webservice and cal l it from Flex. While this is just a simple hello world example you should quickly be able to see how you could leverage the power of both Flex and the Force.com platform to create rich client applications.


In this post I will be building on the Salesforce.com tutorial on how to connect Flex and Salesforce.com. Here is a link to that post: Salesforce/Flex Tutorial


Step 1 Salesforce: Create the APEX class


The first step will be for us to create the logic that will run our application. We will do this by creating an Apex class in our Salesforce.com org using Eclipse. This class is what will be called by the Flex end of application. Creating this class is like creating any other class except we will define the class as “global” and define all the methods within it as “webService”.



You will see that our class is named “helloWorldWebService” and it contains one function “helloWorldCall” which accepts one parameter “world” and returns the parameter “world” with ‘Hello’ on the front of it when called.


Step 2 Flex: Create the Flex End of the Application

Next we will need to create a Flex application to consume this webservice we created. As mentioned earlier we will assume that you already have downloaded the Salesforce library and have included it in your Flex library (Here is a link to a simple tutorial: Salesforce/Flex Tutorial).


The first part of the Flex application will be writing the user interface side of the code. In our example we will have a simple text field for input and a button that will fire the function that will log us into Salesforce.com, call the webservice, and return the results to the screen.


In the few lines of code above we create a panel to hold our fields and then add the input field, button and output field. Below is what our UI will look like.


The text field will allow us to enter a string which once we press the “Go” button will be displayed on the screen with “Hello” concatenated on the front of it by our Salesforce webservice.


Next we will move on to the meat of the application. Above we see that when the button is clicked it calls the “login()” function. This function is a simple login function that accepts a username and password and logs into Salesforce.com with those credentials. Below is the code for the login() function:


Once this function successfully logs into salesforce.com it will call our “callHelloWorld” function. This is the function that will pass our variable to our webservice and return the results to our screen.

<


Our function has three major sections to it. The first lines 40-41 are defining the parameters that we will pass to our webservice. In our example we are just passing one string. We get this by grabbing whatever the user entered into the “helloInput” text box.

Next on lines 42-49 we define the function that will be called once the webservice is run and returns data. In our example we take the result of the call and stick it into our webserviceOutput field.

Lastly on lines 51-57 we call the webservice. This call accepts four parameters webservice name (line53), method being called (line 54), parameters passed (line 55) and function to call on complete (line 54).


The result:


Below is a screenshot of the finished state of our hello world application.