S-Controls were labeled as deprecated in the Spring ‘09 release. With the upcoming Spring ‘10 release, we will be taking the next step in S-Control deprecation. Read the S-Control Deprecation article for more detail on what will and what won't change with the next phase of S-Control deprecation.
In addition to presenting the Creating Rich User Experiences session at Dreamforce 2009, I also presented a session on How to Write Good Unit Tests. I was really happy with how the session turned out - after the session, a couple of attendees told me that they were surprised that I was so enthusiastic about a topic that they had considered to be complete drudgery. They said that they were excited to go back home and start applying the tips that I had provided.
The content from the session that I presented with Nick Simha at Dreamforce 2009 is now available. The feedback that we received on the session was pretty great, so I hope that you'll check it out!
Did you know that you can configure Force.com apps to act as a Google Visualization Data Source? This means that you can now publish data from your Force.com org to the internet where it can be easily consumed by various Google Gadgets and Google Visualizations - not just on your website, but on any website that supports embedding the gadgets or visualizations.
Much of your company's data probably should not be published out on the internet, but you can certainly imagine a number of situations where exposing some of your company's data could be very beneficial.
For example, if your company is putting on a user conference, your marketing team might want to expose some of the attendees' demographic data so that the conference attendees can create heat maps of shared geographic locations, shared topics of interest, etc.
Or your sales team might want to expose a list of its most popular products so that your customers can see what other customers are buying - similar to the way that Amazon publishes lists of its bestselling items.
Or your support team might want to expose its call volume data so that customers know when they're most likely to be able to speak with an agent directly.
There are many additional reasons why you might want to publish some of your company's Force.com data to the internet. Once you do, your customers may just innovate and come up with additional uses for your data that you had never even thought about. Learn more about exposing your Force.com data as a Google Visualization Data Source.
The updates include a couple of new visualization components, including a Hierarchical Chart component that can be used to visualize Account hierarchies and Contact hierarchies out of the box. In addition, the test coverage for the entire project has been increased, and there are many new code samples - so there's something for everyone!
If you’ve written Apex Code and deployed it to production, then you’ve encountered the 75% code coverage requirement. In order to help you achieve (and hopefully exceed) 75% code coverage, I’ve written an article that introduces some of the most important concepts for crafting good unit tests. It explores the proper structure of unit tests, the code scenarios that your unit tests should cover, and the properties of well-written unit tests.
One property of well-written unit tests is that they are thorough. Good unit tests exercise your code in expected conditions, and in unexpected conditions. One unexpected condition that you may have encountered, is when your code deliberately throws an exception because something out of the ordinary has happened. It’s not necessarily obvious how to write a unit test for this scenario, which is why my article demonstrates this useful pattern:
static testMethod void verifySpecificExceptionIsThrown() { /* Set up all conditions for testing here. */
try{ /* Call the method being tested here. */ } catch (SpecificException e){ // If the expected SpecificException is thrown and caught, // then the test was successful and we can exit. return; }
// If the expected SpecificException is not thrown and caught, // then fail the test. System.assert(false, 'A SpecificException was expected, but was not thrown.'); }
The video from the Google I/O session where I spoke about Force.com as a Google Visualization Data Source is up on YouTube. It's been viewed a number of times already - I'm glad that so many people are interested in Google Visualizations and Force.com! The discussion specific to Force.com starts at about 32:00.
Google just published a guest blog post that hints at the exciting announcement that we'll be revealing during our upcoming Google I/O session:
...
Salesforce.com will be co-presenting a session at Google I/O that will discuss how to embed the power of the Google Visualization API in Force.com business applications, and how to turn a Force.com application in to a Google Visualization data source. We hope to see you there!
I'm really excited to be speaking at the upcoming Google I/O conference! Here's my speaker blurb:
Jesse Lorenz is a Technical Evangelist at Salesforce.com, focused on inspiring independent software vendors, product teams and other partners to architect and build innovative applications on Force.com. Jesse is one of the authors of the Google Visualization Component Library for Force.com.
The number one rule in life for author Robert Fulghum is to "Share everything." Your Force.com application is one place where it’s okay to break that rule and not share everything. That’s why Force.com allows developers and administrators to control access to data at many different levels. You can control access at the object-level, the record-level and even at the field-level. In the vast majority of cases, the appropriate Force.com sharing settings can be defined declaratively by simply pointing and clicking. In some cases, developers may need the ability to define even more sophisticated sharing settings, and this is where Apex Managed Sharing comes in.
Apex Managed Sharing allows you to use Apex Code to build sophisticated and dynamic sharing settings that aren’t otherwise possible. For example, a developer can use Apex Managed Sharing to write a trigger that will automatically share a custom object record with a user that has been specified in a lookup field. You can also use Apex Managed Sharing to write custom Visualforce controllers that implement your sharing logic.
After an introduction to sharing, the accompanying article looks at the components of Apex Managed Sharing, and how you can use Apex Managed Sharing in your own applications. The article, Using Apex Managed Sharing to Create Custom Record Sharing Logic, also provides sample code for the trigger described above.
Apex Managed Sharing is a really interesting aspect of Force.com. It enables developers to build some very innovative applications.
CTOs, Architects, VPs of R&D, Product Managers, Developers and other Technologists at companies that want to build and sell SaaS applications should attend this Monday's "Fastest Path to SaaS" webinar. During this webinar, we will examine the obstacles to success that companies traditionally encounter when they try to build and deliver applications in the cloud. We'll take a look at the Force.com platform and explain why Force.com solves these problems. (Hint: Force.com is the fastest, most trusted and most complete platform for building and delivering applications in the cloud.) We will also discuss a few examples of the many companies that have already achieved success by building their applications on Force.com. Register now to learn more about why Force.com is the Fastest Path to SaaS.
If you're a technologist at an ISV that wants to deliver SaaS applications, be sure to check it out. I'm interested to know what you think of it. Are there any topics that we should add, or cover in more depth? Is there anything we should remove? Did the webinar convince you that building and delivering apps on Force.com lets you focus on innovation and not infrastructure?
I enjoyed iLinc's demonstration of how their web conferencing software integrates with salesforce. And Dan England gave a great demo of Informatica On Demand. If you're using the dataloader to get data in to or out of salesforce.com, you should definitely check out Informatica On Demand. It was the #1 Data Integration Service for salesforce.com last year and it's free!
I'm already looking forward to the next User Group meeting. If you're local to Phoenix, I hope to see you there!
"You'll want to install the latest version of the Force.com IDE. This maintenance release for Spring '09 includes several fixes and is highly recommended. For more information, check out the release notes."
If you're curious about what it's like to build an app on Force.com, I recommend watching the video from the Force.com in Action - Fast Application Development in the Cloud session that was presented at Cloudforce London. It's an outstanding introduction to many of the services that Force.com provides to business analysts and developers for free.
If you're inspired by the session and want to get your hands dirty, the exercises in the Force.com developer workbook are a great way to get started building apps on Force.com.
If you understand where the zero fits into the business model, then there are plenty of business models that work great. ... It makes plenty of economic sense for certain things to be free and then the scarce goods are what you charge for. The trick is enabling a business model where the infinite goods make the scarce goods you control more valuable. This is absolutely possible for any business -- and, in fact, failing to understand how you do this will most likely doom your overall business.
We’ll be installing the update to the update in the CourseMax data center this weekend. It’s a pretty involved process. Here is the process we’ll go through:
Apply the update in the sandbox
Since our CRM server roles are split up, we’ll have to install it four times
Run through the test plan on all four servers
Apply the update on the production servers
Six different servers this time
Run through the test plan again on Production
... This is also why I’m not really comfortable yet with the 2 month update cycle. I like to keep current with updates but it is a lot of work. Keep in mind that this is in addition to the testing and updating we do for our own software. If we would have installed the first version of Update Rollup 2 we would have had to go through this whole process twice within a month [emphasis added].
This might be the most compelling argument for SaaS I've heard - you get to keep your weekends!
A common request on the Visualforce developer board is to be able to display a selection check box next to every record in a table. Check out these two posts on the developer.force.com wiki for details on how to use a "wrapper class" to accomplish this requirement.
Without a version control system, your software development process will not be efficient. And that's the best case scenario - I've seen software development projects fail because version control wasn't used. As a result, I became a version control disciple.
My first experience with CVS was at university during my first major collaborative development project. Throughout the project, my team was very diligent about checking code in to CVS after every significant code change. We regularly ran integration tests and this meant that we always had an accurate understanding of our progress to date. However, it wasn’t until the last day of the project that I really learned the value of version control.
On the due date, my team was feeling calm and confident about our work. We had completed development of all the required features ahead of schedule, and we had already added a number of bonus features. The experience of the team sitting next to us in the computer cluster was a stark contrast to ours.
This other team hadn’t bothered to set up a CVS repository for the project as had been suggested by our instructor. Instead, they had used email to exchange updated code over the course of project. To make matters worse, they had waited until the day before the due date to perform their first full code integration. It was painful to watch them flail against the bugs that they kept discovering. When my team left the computer cluster that evening, it was obvious that the other team wasn't going to be able to submit their project before the midnight deadline. Since then, I’ve used a version control system for every project that’s lasted longer than a day - including projects that I've worked on alone.
I feel a sense of accomplishment every time I check additional functionality in to a project. I also enjoy peace of mind, knowing that I can always revert to an older version of code if my current development direction doesn't work out. It’s so easy to put your entire Force.com application under version control and the benefits are so great, that I can’t think of any valid reasons for not doing so. To prove how simple it is, I recently recorded a video that demonstrates adding a Force.com project to a Subversion repository in less than 90 seconds:
If you're going to be at the D.C. Success Tour this Thursday, be sure to say hello. I will be co-presenting the "Become a Force.com App Builder" session.