Packaging for's AppExchange

by Tony Stubblebine

This is part three in a three-part series on how to build and distribute applications on's AppExchange. Don't miss "An Introduction to's AppExchange" and "Using the API."

In this article, I'm going to continue building the blog-to-lead application by walking through the process of packaging and uploading to the Salesforce AppExchange.

If you haven't already, you should revisit "Using the API" in order to enable the Salesforce API for you account, and make sure you've added "blog" as an option in the Lead source field, added a Website URL field to the Lead object, and downloaded the Perl source code. If you don't yet have a Salesforce account, then you should start with the first article, "An Introduction to's AppExchange."

Create a Custom Application

You've probably noticed that even though we're building a pretty specific application in order to track people who've posted on our blog, the Salesforce UI is cluttered with unrelated tabs and UI elements. We don't need those as part of our application, but we also don't want to delete them, in case they're being used for other reasons. The solution is to create a custom application that has just the things we need. This application will then be available in the Application drop-down menu in the upper-right corner of the Salesforce UI.

Get started by visiting Setup -> Build -> Custom Apps. You'll see the three standard applications: Sales, Marketing, and Service & Support. If you've installed any applications from AppExchange you'll also see those listed. To create your own custom application, click the New button. You'll be asked to provide a name and description for your application. Let's call this application Blogforce.

Figure 1
Click for a larger view

Next you'll be asked to upload an image. This is your chance to give the application your own brand. Unfortunately, the image has to already exist in the documents section of your Salesforce account, so you'll have to break the flow of this custom application process. If you want to add an image open a new window, go to the Documents tab and then click the New button. I uploaded the O'Reilly Network logo as a document and had to work through a few issues. If you're having trouble, check that your image is less than 20K in size and make sure you check the "externally available image" box when you create the document.

Figure 2
Click for a larger view

Now you'll be asked which tabs to include in the application. Choose Home and Leads.

Figure 3
Click for a larger view

Last, you'll be asked which profiles to assign the application to. Profiles are templates that represent access control and roles for users. There doesn't seem to be any need to hide this application from users, so mark the Visible box. However, we don't know what other activities our Salesforce customers are engaged in, so let's not be so presumptuous as to make our application the default view for any profiles.

You'd be most likely to choose the default box if you were building an application for a single customer or for your own business. However, in our case we're building a general application and have no idea which profiles will be using it or if anyone is going to use it as their primary application.

Figure 4
Click for a larger view

Packaging for AppExchange

Once you're happy with your application, you need to create a package and upload it to the AppExchange. Start by clicking Setup -> Exchange -> Share Apps, and then hit the New button.

Your first step is to give the package a name and a description. If you make your application public on the AppExchange, your choices will be part of the directory entry. Salesforce recommends including a version number as part of the name. It's common for developers to have many versions of the same application; some because of making improvements, but often because of the need for specialized versions for different customers.

Figure 5
Click for a larger view

The next step is to add items into your package. In this case we're going to add our custom application. Click the Add button in the Package Items section.

Figure 6
Click for a larger view

This will bring up a page where you can select items to add to your package. In our case, everything we want to add is in our custom application. That's the default view for this dialog, because it's the most common case. Select your custom application and then click the "Add to Package" button.

Figure 7
Click for a larger view

That's all that we're going to add to this package. You may have noticed that we haven't added our Perl script. You certainly could upload the Perl script as a document and then include it in this package. However, I asked around and found out that most developers host external code packages themselves and just include a link in the directory description.

Now that our package is complete, we'll upload it to the AppExchange. This step allows you to share the package with other people, but doesn't go as far as making a public listing in the AppExchange directory. To start click the "Upload to AppExchange" button on the package page.

Figure 8
Click for a larger view

This will take you to a step where you can add a version number, customize the description for this particular version of the package, and enter access controls.

The access control is a password that other people will have to enter before installing your application. Unfortunately it's also the password that you need to know in order to delete the package. So make sure you make a record of it, or leave it off altogether.

Figure 9
Click for a larger view

Click the "Upload to AppExchange" button and your package will be uploaded to the AppExchange servers. Usually this takes a few minutes, after which you'll be notified by email.

The email will include a link to manage your newly uploaded package. There are two things you should do. The first is register the package on AppExchange, which is the final step needed before you can share the package with others. The other thing you can do now is create a test drive. This is a fully functional Salesforce account with your application that you can use to demo to potential customers. Let's walk through both.

Figure 10
Click for a larger view

Click the Register button to register your application for sharing through AppExchange. This will give you a URL that you can share with coworkers and customers, as well as a place to manage your directory entry. Many developers who are focused on consulting stop at this point. The URL is all that they need to give to a customer that wants to install the application. It enables the easy installation offered by AppExchange without having to jump through the hoops of getting certified for inclusion in the public AppExchange directory.

Salesforce is very serious about maintaining the quality of applications that it offers to its customers, and that includes third-party applications listed in the AppExchange directory. In order to maintain that level of quality, all applications must meet a set of requirements detailed on the AppExchange website and then be submitted to an application review board. The application process costs several thousand dollars. The vendors I talked to felt like the fee was easily recouped from their customers, all of whom are used to paying for Salesforce applications. I also talked to a number of developers who didn't see a need to go through the review process because they were able to market and sell their applications directly through their existing consulting channels.

Creating a Test Drive

Test drives are demo accounts that you can use to show your application to potential customers. If you've been clicking around, you might have a bit of trouble finding the page where you can start the test drive. You get to the starting point by following the link from the email that was generated when you created the AppExchange package. Or you can get to it by visiting Setup -> Exchange -> Share Apps and then clicking through to your AppExchange package, and then to the relevant upload listed under "Uploads on AppExchange."

Once you're there, click the Create Test Drive button. You'll have the option of choosing a login name for the account, but you're better off sticking with the default. The default naming scheme is something that most people are familiar with.

Figure 11
Click for a larger view

The test drive has two accounts. You'll use the admin account to prepare the account with some sample data, and you'll give the evaluation account to potential customers.

Click Create Test Drive and Salesforce will start the process of creating a demo account for you. This may take a few minutes, after which you'll be alerted by email.

The email will also contain a link to log in to the demo account. This is where you'll create a password for your demo admin user. Once you do that, you'll be shown an account that probably looks a lot like your existing developer account.

Our application is available from the application drop-down menu. I think we made the right choice by not making our application the default view.

However, if we really were going to demo this, we'd want to put some effort into the presentation. That might include making your application the default by visiting Setup -> Manage Users -> Profiles. Most people also take the opportunity to add some demo data. This account has all the functionality that your development account has. You can even enable the API.

The Future of AppExchange

Salesforce seems committed to providing as much infrastructure as possible for AppExchange developers. At the Dreamforce conference, they announced an incubation program for AppExchange companies. Then two weeks ago they announced the AppStore, a solution for billing and collection.

AppStore takes a percentage of your revenue in exchange for handling the financial side of your business. That might not seem like a good deal if you're wildly successful, but it can be a boon for developers who don't want to focus on financial details. And it's great that there's no upfront cost.

I'm not sure what's coming next, but everything I've seen so far makes it clear that Salesforce is committed to creating a fantastic platform for developers.

Tony Stubblebine is an Internet consultant and author of Regular Expression Pocket Reference.

Return to the O'Reilly Network.