You are on page 1of 28

Salesforce.

com: Salesforce Summer '07

AppExchange Packaging Guide

© Copyright 2000-2007 salesforce.com, inc. All rights reserved. Salesforce.com and the “no software” logo are registered trademarks, and
AppExchange, “Success On Demand,” and “The Business Web” are trademarks of salesforce.com, inc. All other trademarks mentioned in
this document are the properties of their respective owners.
Table of Contents

Table of Contents
About AppExchange Packaging................................................................................................................................................3
AppExchange Basics.................................................................................................................................................................4
Preparing Your App for the AppExchange................................................................................................................................8
Tips for Building Your App.....................................................................................................................................................13
Packaging and Registering Apps.............................................................................................................................................17
Publishing and Listing Your App............................................................................................................................................22
Supporting Apps.....................................................................................................................................................................22

Index................................................................................................................................................................25

i
Table of Contents

ii
About AppExchange Packaging

About AppExchange Packaging


The AppExchange is an on-demand application-sharing service from salesforce.com that allows you to browse, install, and
share apps and components built for the Apex platform. Custom apps can contain custom objects, custom tabs, reports, and
many other items that are packaged together and published on the AppExchange.
This guide is designed for Salesforce users and partners who want to package and upload their app to the AppExchange. Use
this guide to learn how to package apps for the AppExchange, including tips and best practices for preparing, building, and
registering your app.

Quick Start Guide


Use this quick start checklist to create and package your app for the AppExchange. Click on any topic below to get more
detail.
Review the basic concepts
Find out what it is and how it works
Get a list of what components you can include in an app
Review AppExchange terminology
Prepare your app and its components
Determine the components you want to package
Decide your branding, the type of app you want to develop, and whether you want to charge for your app
Know what to customize before making your app available on the AppExchange
Build your app
Use the Salesforce online help to learn how to create custom objects, tabs, or any other component you
want included in your app
Develop documentation for users of your app as well as administrators that install it
Consider handling external services, license agreements, and how users will uninstall your app
Find out about matching the Salesforce user interface
Package and register your app
Upload your app
Create a test drive to show off its usefulness
Register your app
Publish and post your app
Go to www.appexchange.com for information on creating your listing, assigning a publishing profile,
getting your app inspected, and posting it
Support your app
Learn how to be prepared for users who may need support
Find out about locking down your app, monitoring usage, and promoting your app
Review a checklist for success and find out where to get answers to frequently asked questions

Packaging Process
Before you begin, review the high-level process for packaging your app and making it available on the AppExchange:

3
AppExchange Basics

AppExchange Basics
The AppExchange gives Salesforce users a new venue to share pre-built customizable apps. To get started packaging your
apps for the AppExchange, review these basics:
About the AppExchange
Discover what it is and how it works.
AppExchange Concepts
Review the terminology used in this document and on the AppExchange.

4
AppExchange Basics

About AppExchange Apps


Find out what types of components you can include in your app.
Who Can Use the AppExchange?
Determine what users can use the AppExchange.

About the AppExchange


The AppExchange is an on-demand application-sharing service from salesforce.com that allows you to browse, install, and
share apps and components built for the Apex platform. Each app is registered with salesforce.com and listed in an appropriate
category that makes it easy for users to find the apps they need. Users can share registered apps privately with a particular user
or publicly with all users on the AppExchange.
Like most Internet marketplaces, the AppExchange contains detailed information about each app, specifications, reviews from
the Salesforce user community, and links to test drive or install the apps. The publisher of the app is listed and users can contact
the publisher with any questions. Users can click the Reviews tab to view what other users have to say about it or study ratings
it received. Users can also post reviews.
Users can click Test Drive to run a fully-functioning demo of the app as a read-only user in a familiar Salesforce environment.
Finally, users can click Get It Now to begin the install process.
After users install an app, they can customize it to fit the needs of their business. So, your installed apps may have different
custom fields, tabs, or custom s-controls in other Salesforce organizations.

AppExchange Concepts
Review the following terminology used on the AppExchange:
AppExchange
The AppExchange is an on-demand application-sharing service from salesforce.com that allows you to
browse, install, and share apps and components built for the Apex platform.
The Apex platform combines a powerful user interface, operating system, and customization and integration
capabilities for CRM — plus a framework for development and deployment of new applications for your
entire enterprise. The Apex platform allows you to customize standard objects and build custom objects,
custom tabs, and custom s-controls.
Apps
A collection of Salesforce components such as tabs, reports, dashboards, and custom s-controls that
addresses a specific business need. You store an app in a package to upload it to the AppExchange.
Beta
An early version of a managed package that is uploaded to the AppExchange for a sampling of your
intended audience to test it. For more information on how beta versions of managed packages behave,
see "Using Beta Versions of Managed Packages" in the Salesforce online help.
Certify
Apps marked "AppExchange Certified" have been inspected by salesforce.com to ensure that they meet
salesforce.com's standards for AppExchange apps. For more information about app certification, go to
www.appexchange.com.
Deploy
Deploying an installed app makes any custom objects in the app available to users in your organization.
Before a custom object is deployed, it is only available to administrators and any users with the "Customize
Application" permission.

5
AppExchange Basics

Developer
The developer of an app is the Salesforce user who created the app and its components. The developer
of an app can be different than the publisher or they can be the same person.
Extension
An extension is any package, component, or set of components that adds to the functionality of a managed
package. An extension requires that the base managed package is installed for it to work.
Feature
A set of components within a package that the developer has categorized as a unit of functionality that
can be enabled as a whole. Installers can enable or disable the features in a package after installation.
Features allow developers to arrange a set of components for an app within one package that will work
for different Salesforce Editions.
Install
Incorporating the contents of a package into your Salesforce organization. A package on the AppExchange
can include an app, a component, or a combination of the two.
Installer
The installer of an app is the person who installed the app from the AppExchange into their Salesforce
organization.
License Management App
The License Management App is a free Salesforce app that you can install from the AppExchange and
use to track information about your package and the Salesforce subscribers who install it.
License Management Organization
A license management organization is the Salesforce organization that you use to track all the Salesforce
subscribers who install your package. A license management organization must have the License
Management App installed. It automatically receives notification every time your package is installed or
uninstalled so that you can easily notify users of upgrades. You can specify any Enterprise, Unlimited, or
Developer Edition organization as your license management organization when you configure your
developer settings.
Managed Package
Managed packages are AppExchange packages that can be upgraded in the installer's organization. They
differ from unmanaged packages in that some components are locked, ensuring a smoother upgrade
process. Unmanaged Packages do not include locked components.
Namespace prefix
A namespace prefix is a one to 15-character alphanumeric identifier that distinguishes your package and
its contents from packages of other developers on the AppExchange. Your namespace prefix must be
globally unique across all Salesforce organizations. It keeps your managed package under your control
exclusively.
Package
The container for an app and its components. You use packages to bundle an app along with any related
components so that you can upload them to the AppExchange together.
Before the Winter '07 release, all packages were unmanaged. Now, you can convert an unmanaged package
to managed to ensure your installed users get upgrades.
Personal Sharing
The process of privately sharing a registered package on the AppExchange using an unlisted URL without
making it public.
Publish
Publishing your app makes it publicly available on the AppExchange. Apps can be found under specific
categories and by doing a search.

6
AppExchange Basics

Publisher
The publisher of an app is the Salesforce user or organization that published the app on the AppExchange.
Publishers are required to register using their contact information after registering their app on the
AppExchange.
Register
Registering your app creates a link to it and any collateral on the AppExchange. When you register your
app, you will receive a URL that you can share with others privately. All apps on the AppExchange must
be registered. After registering your app, you may want to publish it if you want to make it publicly
available.
Share
Allowing other Salesforce users to install your app or components into their Salesforce organizations.
Test Drive
A test drive, also known as a demo, is a fully functional Salesforce organization that contains an app and
any demo records added by the app publisher. It allows users on the AppExchange to experience an app
as a read-only user using a familiar Salesforce interface.
Unmanaged Package
Unmanaged packages are completely editable in both the installer's and developer's organization and are
not upgradeable. All packages are unmanaged unless otherwise indicated by one of the following managed
icons:
• Managed - Beta
• Managed - Released
• Managed - Installed
Upgrade
Upgrading an app is the process of installing a newer version. Salesforce supports upgrades for managed
packages that are not beta.
Upload
Uploading a package sends it to the AppExchange. Uploading your app is just the first step; all apps on
the AppExchange must be registered, making them privately available. The final and optional step is to
publish it, making it publicly available on the AppExchange.

About AppExchange Apps


An app is a collection of Salesforce components such as tabs, reports, dashboards, and custom s-controls that addresses a
specific business need. You store an app in a package to upload it to the AppExchange. Your app can contain one or more of
the following app components:
• Attachments (to email templates)
• Custom apps
• Custom fields on standard objects
• Custom buttons and links
• Custom home page layouts (including their custom home page components)
• Custom objects
Including all custom fields, relationships (master-detail and lookup), picklist values, record types, page layouts, mini page
layouts, related list layouts, search layouts, public list views, validation rules, custom buttons, custom links, its
Context-Sensitive Help Setting, and the Custom S-Control selected for it

7
Preparing Your App for the AppExchange

Note: Only public list views are installed. If a custom object has any custom list views that you want to include in
your package, ensure that the list view is accessible by all users. For information on list view visibility, see "Creating
Custom List Views" in the Salesforce online help.

• Custom report types


• Custom reports
• Custom s-controls
• Custom tabs
• Dashboards
• Documents
• Email templates
Including any letterheads that they use
• Folders
• Profiles
• Translated values available in the translation workbench for packaged components
• Workflow rules, alerts, field updates, outbound messages, and tasks
When adding components to a package, some related items are automatically included. For example, when you add a custom
object to a package, its custom fields, page layouts, and relationships with standard objects are automatically included. Some
items are not visible in the list of packaged components; for example, translated values for custom fields are included for any
active language that has been added to the package yet the custom field is displayed in the developer's language on the package
detail page.

Who Can Use the AppExchange?


Anyone with a valid Salesforce username and password, including trial users, can use the AppExchange to browse and test
drive apps. Salesforce administrators and users with the "Customize Application" permission can install and deploy AppExchange
apps into their own environments. To allow other users in your organization to use the AppExchange, give them the appropriate
user permission listed below:

Permission Name Description


"Create AppExchange Packages" Create new AppExchange packages
"Download AppExchange Packages" Install or uninstall apps from the AppExchange
"Upload AppExchange Packages" Create test drives and upload AppExchange packages to the
AppExchange

Preparing Your App for the AppExchange


Design your app carefully with the AppExchange in mind. Use the following suggestions to determine what components to
include and how to package them:
Decide what to publish
Decide what components are included in your app.
Consider branding for your app
Evaluate how you want to brand your app.
Review the differences between composite, native, and client apps
Determine what type of app you want to develop.

8
Preparing Your App for the AppExchange

Determine if you want to charge for your app


Review your options for charging others to use your app.
Design your app for the AppExchange
Customize any custom objects, tabs, folders, reports, dashboards, or page layouts for distribution on the
AppExchange.
Review how to protect your intellectual property
Determine if you need to hide any complex customizations within your app.
Configure your custom profiles for the AppExchange
Give your custom profiles meaningful names and descriptions so they are easy to identify when installed
in another Salesforce organization.

Deciding What to Package


Packaging for the AppExchange is flexible. You can package a complete app, a single component (such as a report), or a
collection of components..
Listing your app on the AppExchange is also flexible. You are not limited to a single listing. You may post one app that
addresses a generic business need and also post several variations of the app that are specific to certain vertical markets.

Branding Considerations
Consider the importance of branding while designing your app. Determine a meaningful and powerful brand that you can use
consistently on the AppExchange to identify your app. See the AppExchange Partner Logo and Naming Guidelines on
www.appexchange.com for app logo and naming conventions.

Understanding Composite, Native, and Client Apps


Before designing your app for the AppExchange, review the different types of apps:
Native apps
Native apps are built using only the resources available on the Apex platform. The platform includes a
powerful security model that you can use to control the visibility of all information down to the field level.
With the power of formula fields, custom links, and custom s-controls, you can automate your business
process without the need for external services.
Note: The design details of native apps are completely transparent to installers. Because there is
no way to hide the content of components like s-controls or formula fields, installers may review
your intellectual property, and later post their changes as new apps on the AppExchange, subject
to any license agreement attached to the original. See Protecting Your Intellectual Property on
page 12.

Composite apps
Composite apps are built with a combination of the Apex platform and external services. The external
services may be publicly available and free, such as Google maps or FedEx package tracking services, or
they may be services that you create and sell. See Charging for Use of Your App on page 10. Composite
apps are also the best way to protect your intellectual property at this time.
Client apps
Client apps are built using only the Apex API to access the Salesforce service. They do not alter or
customize the Salesforce user interface. For example, Outlook Edition transfers emails directly from
Microsoft® Outlook® into the Salesforce service without ever leaving the Outlook application on your
client.

9
Preparing Your App for the AppExchange

Charging for Use of Your App


You can choose if you want to charge for your app or use the AppExchange listing to drive interest to other business services
that you provide. The AppExchange does not currently provide a billing mechanism. However, you can build an app in
Salesforce that links to an external service through a custom s-control, web tab, or other component. Then, you can derive a
revenue stream by charging an installation or subscription fee for your external service. The exchange of funds for this service
must occur outside of Salesforce. If you choose to do this, we recommend storing your pricing and licensing information in a
file within the Documents tab of your app. Then, point users to this document from the About tab of your app.

Designing Your App

User Permissions Needed


To create AppExchange packages: "Create AppExchange Packages"

Prepare your app or components carefully before you publish. Use the guidelines below to help you determine what and how
to publish:
Choosing custom tabs
The Tab Style for a custom tab must be unique within your app. However, it does not need to be unique
within the organization where it is installed. A custom tab's style will not conflict with an existing custom
tab in the installer's environment.
If you want to provide custom tab names in different languages, see "Renaming Tab and Field Labels"
in the Salesforce online help. Installers will not be able to edit these from a managed package but they
will be able to add additional languages using the translation workbench and provide translated names
for other types of components.
Custom home page components
When you package a custom home page layout, all the custom home page components on it are
automatically added. Standard components such as Messages & Alerts are not included in the package
and do not overwrite the installer's Messages & Alerts. To include a message in your custom home page
layout, create an HTML Area type custom home page component that contains your message and add it
to your custom home page layout.
Custom home page layouts
Once installed, your custom home page layouts are listed with all the installer's home page layouts.
Distinguish them by including the name of your app in the custom home page layout name.
Custom report types
Custom report type names must be unique within an organization.
Tip: To ensure that the names of your custom report types will not conflict with those in an
installer's organization, consider making a managed package so that all of your custom report type
names contain your namespace prefix.

Intellectual property restrictions


Only publish components that are your intellectual property and that you have the rights to share. Once
components are available on the AppExchange, you cannot recall them from anyone who has installed
them.
Folders
Items that Salesforce stores in folders, such as documents, cannot be added to packages when stored in
personal and unfiled folders. Put documents, reports, and other items that Salesforce stores in folders in
one of your publicly accessible folders.

10
Preparing Your App for the AppExchange

Components such as documents, email templates, reports, or dashboards are stored in new folders in the
installer’s organization using the publisher’s folder names. Give these folders names that indicate they are
part of the package.
Naming custom objects and apps
Custom object and app names must be unique within an organization.
Tip: To ensure that the names of your custom objects and apps will not conflict with those in an
installer's organization, consider making a managed package so that all of your custom object and
app names contain your namespace prefix.

Page layouts
The page layout of the person uploading a package is the only one installed for Group and Professional
Edition organizations and becomes the default page layout for Enterprise, Unlimited, and Developer
Edition organizations. Enterprise, Unlimited, and Developer Edition organizations receive any additional
page layouts for the custom objects included in the package. Give these page layouts meaningful names
for the app.
Translation workbench
If you have enabled the translation workbench and added a language to your package, any associated
translated values are automatically packaged for the appropriate components in your package. Make sure
that you have provided translations for all possible components.
An installer of your package can see which languages are supported on the package detail page. The
installer does not need to enable anything for the packaged language translations to appear. The only
reason they may want to enable the translation workbench is to change translations for unmanaged
components after installation or to translate into additional languages.
If you are designing an extension, you can include translations for the extension components but not
additional translations for components in the base package.
Workflow
Salesforce prevents you from uploading workflow alerts that have a public group, partner user, or role
recipient. Change the recipient to a user before uploading your app. During installation, Salesforce replaces
that user with the user installing the app, and the installer can customize it as necessary.
Salesforce prevents you from uploading workflow field updates that change an Owner field to a queue.
Change the updated field value to a user before uploading your app. During installation, Salesforce replaces
that user with the user installing the app, and the installer can customize it as necessary.
Salesforce prevents you from uploading workflow rules, field updates, and outbound messages that reference
a record type on a standard or managed-installed object.
Salesforce prevents you from uploading workflow tasks that are assigned to a role. Change the Assigned
To field to a user before uploading your app. During installation, Salesforce replaces that user with the
user installing the app, and the installer can customize it as necessary.
You can package workflow rules and all associated workflow actions, such as alerts and field updates.
However, any time-based triggers will not be included in the package. Notify your installers to set up any
time-based triggers that are essential to your app.
Note: All the information in the components you package and publish will be visible to anyone on the AppExchange.
You will not be able to hide the content of a custom s-control, formula, or any other component that contains your
code.

Determining App Visibility


When you create an app for the AppExchange, you can decide how widely you want to share it. You can choose to share it
publicly or privately and, optionally, password protect it.

11
Preparing Your App for the AppExchange

Registering an app shares it privately. Registered apps are like unlisted phone numbers. They do not appear in any categories
or in search results on the AppExchange. If you give friends the URL for one of your registered apps, they can go directly to
the listing for this private package on the AppExchange. This is called personal sharing. Also, like unlisted phone numbers,
if someone has the URL, they can get access to the package.
A second layer of protection is provided in the form of a password. You can protect a package with a password when it is
uploaded so that only those with the password have access to the package contents. Salesforce prompts you for a password
when installing a registered or published app.
To share your app privately, follow these steps:
• Upload your app
• Create a demo
• Register your app
To share your app publicly, follow these steps:
• Upload your app
• Create a demo
• Register your app
• Publish your app
Go to www.appexchange.com for information on publishing your app.

Protecting Your Intellectual Property


Users who install your app will be able to examine all of the details within it. The details of your custom objects, custom links,
reports and all other items installed are as completely revealed to installers as they are in any other Salesforce organization.
This gives all administrators complete visibility to gain absolute clarity on every aspect of an app's design. While this is one
way an installer can examine an app and all its components for any malicious content, it prevents developers from protecting
their intellectual property.
Currently, the best way to protect your intellectual property is to provide a component of your app that runs in an external
service. While the URL and parameters to connect to this service may be visible to anyone who installs your app, all of the
code for your external service is not visible unless you decide to make it available.

Designing Custom Profile Settings


When designing your app for the AppExchange, create custom profiles for the various users of your app. Give each custom
profile the appropriate level of access to your app such as tab visibility or field-level security settings for approval fields on
custom objects. Use the following tips when creating custom profiles for apps you want to publish:
• Give your custom profiles a meaningful name that makes it obvious that the profile applies to the app. For example, if you
are creating a Human Resources app, you may want to name a custom profile "Approving Manager" for managers that
approve requisitions.
• If your custom profiles have a hierarchy, make sure the name indicates where in the hierarchy that profile is. For example,
a senior-level manager's profile could have the name "Level 2 Approving Manager."
• Avoid giving your custom profiles names that may be interpreted differently in other organizations. For example, "Level
2 Approving Manager" is a more appropriate profile name than "Sr. Manager."
• The profile Description is displayed to the user installing your app. Provide a meaningful description for each custom
profile so that users installing your app can view it.
When you package an app, you can include your custom profiles. When a customer installs the app, they will be able to overlay
these profile settings into their existing profiles. Only the portions of the profile that apply to your package will be affected.

12
Tips for Building Your App

Note: The security settings associated with the standard objects and other existing custom objects in an installer's
organization are unaffected.

Tips for Building Your App


If you have already developed your app on the Apex platform, review these steps as a checklist. If not, use the Salesforce online
help for instructions on building a custom app and review the following steps as guidelines.
Develop app documentation
Provide documentation for your app and review the checklists for your Breeze presentation and data sheet.
Manage license agreements
Get some tips on handling a license agreement.
Work with external applications
If your app connects to an external service, get some tips for launching it within Salesforce.
Provision external services
If your app connects to an external service, get tips on provisioning.
Uninstall apps
Consider how users will uninstall your app.
Match the Salesforce user interface
Model the look and feel of your app after the Salesforce user interface.

Developing App Documentation

User Permissions Needed


To edit custom tabs: "Customize Application"

You may have many different types of collateral for your app. We recommend publishing your app on the AppExchange with
the following types of documentation:
About tab
Most apps are installed by an administrator. Therefore, most users will not be aware of the app until it is
deployed. After deployment, an About tab is very useful to users and should give them an introduction
to the entire app.
An About tab is a custom tab included with an app on the AppExchange. It provides users with:
• Description of the app
• Training and support information
Providing users with training options is the best way to ensure customer adoption of your app. Similar to
the way that salesforce.com provides free training, you should provide user training for commercial
applications either through webinars or recorded presentations. Include a section in your About tab that
covers how to get training on the app.
If users of your app call salesforce.com for assistance, we will try to determine if the issue resides with our
application or yours. We can only support our application, our standard user interface, and the installation
of apps from the AppExchange. If the customer is asking about functionality that is unique to your app,
we will ask them to examine the About tab for information on how to get support for your app. We expect
commercial apps to provide support that is similar to the support salesforce.com offers and that the About
tab contain contact information for this support.

13
Tips for Building Your App

Note: An About tab adds to an organization's total number of custom tabs. Consider "App Setup
Limits" in the Salesforce online help for each Edition before creating an About tab that could
make an installer exceed the limit of allowed custom tabs.

Configure option
You can include a Configure option for installers of your app when they view theAppExchange downloads
and app detail pages in their Salesforce organization. This option can link to installation and configuration
details like:
• Adding custom fields and custom links to standard objects
• Requesting or executing an end user license agreement
• Provisioning the external service of a composite app
The Configure option is included in your package as a custom link. You can create a custom link for your
home page layouts and add it to your package. To do this:
1. Create a custom link to a URL that contains configuration information or s-control that implements
configuration. See "Defining Custom Buttons and Links" in the Salesforce online help.
Tip: When you create your custom link, set the display properties to Open in separate
popup window so that the user returns to the same Salesforce page when done.

2. When you create the package, choose this custom link in the Configure Custom Link field of your
package detail. For information on creating a package, see "Creating Packages and Uploading Apps"
in the Salesforce online help.
Multimedia presentation
If you are publishing a commercial app, we recommend compiling a presentation, such as a Breeze
presentation, to demonstrate its attributes.
Data sheet
Give installers the fundamental information they need to know about your app before they install.
Customization and enhancement guide
Let installers know what they should customize after installation as part of their implementation.
Custom tab splash page
You can add a splash page to any custom tabs in your app. Custom splash pages can include information
about using the custom tab and custom object with links to additional information. They include a
Continue button and a Don’t show me this again button.
Create the splash page for your app in the form of a custom link for home pages via Setup ➤ Customize
➤ Home ➤ Custom Links. Custom links can be a URL to an HTML page or a custom s-control. Create
your custom splash page as a Home tab custom link and then add it as the splash page option to any
custom tabs you plan to upload to the AppExchange.
Online help
You can also provide online help from the detail pages of each record. To do so, create custom links or
custom formula fields to point to your help files. Then, put a custom link in the Web Links section of
your page layout or embed custom formula fields in another section of your page layout. Note that you
cannot override the Salesforce online help links that appear on each page.
Alternatively, you can provide custom help for your custom object records and custom fields. For more
information on field-level help and object-level help, see "About Custom Help" in the Salesforce online
help.

14
Tips for Building Your App

AppExchange Multimedia Presentation Checklist


Including a presentation, such as a Breeze presentation, that explains and demonstrates your app is optional. However, if you
choose to include one, follow this checklist to make sure it functions correctly:
• Were you able to upload your presentation?
• Make sure the link to your presentation works; this ensures that it was published successfully.
• Check the clarity of the audio, slide text, and graphics in your presentation.
• Make sure the branding in your presentation is consistent and accurate. Check the following parts of your presentation:
• Title slide should have correct branding
• Graphics such as logos and screen shots in slides
• Audio such as references to Salesforce or your app name

• Your presentation should be focused on the value of your app and provide a brief introduction to your company.
• Make sure the target audience for your presentation is users and not Salesforce.
• Your presentation should not be focused on the Apex API.
• Your overall message should be understandable, clear, and concise.

AppExchange Data Sheet Checklist


A template for the data sheet is available at www.appexchange.com/how_to_publish.jsp. We recommend using the following
checklist when creating the data sheet for your app:
• AppExchange, salesforce.com, and your product logos should all appear in the places specified in the template.
• The branding should be consistent and accurate.
• Your data sheet should be formatted like the template and should not be more than two pages.
• Make sure the branding in your screenshots matches the branding in the Salesforce app.
• In the space provided for "External Service," enter the web domain for your external service in the form of www.MyApp.com.
Enter "None" in this section if your app does not use an external service.
• In the space provided for "Salesforce.com Edition," list each supported Edition on separate lines such as "Enterprise" or
"Professional." Do not include the term "Edition" as in "Enterprise Edition."
• In the space provided for "Publisher," enter the name of the company submitting the app.
• In the space provided for "Type," enter the appropriate type of app such as "Native" or "Composite," where composite
apps are those that rely on an external service.
• In the space provided for "Salesforce.com Certification," enter "AppExchange Certified," "AppExchange Ready," or "None"
as appropriate.
• For "Pricing," enter "Free" or a short description of the pricing for any external service.
• Make sure to spell check and proofread your abstract, description, features, and any key reports listed.
• Make sure your overall message is clear and concise.

Managing License Agreements


The AppExchange provides a standard mechanism for presenting a license agreement to the installer and requiring acceptance
of this agreement before continuing with the installation. If you want to require an agreement, paste the text of your license
agreement in the License Agreement text field on the app listing page on the AppExchange directory.
If your app requires a more interactive license negotiation, make sure your About tab splash page clearly details the required
end user license agreement and states your preferred process for getting started. In all cases, salesforce.com includes a disclaimer
that limits our liability for the app.

15
Tips for Building Your App

Working with External Services


You may want to update your Salesforce data when changes occur in another service. Likewise, you may also want to update
the data in another service (outside of Salesforce) based on changes to your Salesforce data. Salesforce provides ways of doing
both of these transactions. For example, you may want to send a mass email to more contacts and leads than Salesforce allows.
To do so, you can use an external mail service that allows users to build a recipient list of names and email addresses using the
contact and lead information in your Salesforce organization.
An app built on the Apex platform can connect with an external service in many different ways. For example:
• You can set up a custom s-control or web tab that passes information such as user ID or address to an external service.
• You can create a custom link or custom formula field that passes information to an external service.
• You can use the Apex API to transfer data in and out of Salesforce.
• You can use an Apex Code class that contains a Web service method.
Caution: Do not store usernames and passwords within any external service.

Provisioning External Services


If your app links to an external service, users who install the app must be signed up to use the external service. Provide access
to your external service in one of two ways:
• Access by all active users in an organization with no real need to identify an individual
• Access on a per user basis where identification of the individual is important
The Salesforce service provides two globally unique IDs to support these options. The user ID identifies an individual and is
unique across all organizations. User IDs are never reused. Likewise, the organization ID uniquely identifies the organization.
Avoid using email addresses, company names, and Salesforce usernames when providing access to an external service. Usernames
can change over time and email addresses and company names can be duplicated.
If you are providing access to an external service, we recommend the following:
• Use Single Sign-On (SSO) techniques to identify new users when they use your service.
• For each point of entry to your app, such as a custom link or web tab, include the user ID in the parameter string. Have
your service examine the user ID to verify that the user ID belongs to a known user. Include a session ID in the parameter
string so that your service can read back through the Apex API and validate that this user has an active session and is
authenticated.
• Offer the external service for any known users. For new users, display an alternative page to collect the required information
for the user.
• Do not store passwords for individual users. Besides the obvious security risks, many organizations reset passwords on a
regular basis, which requires the user to update the password on your system as well. We recommend designing your
external service to use the user ID and session ID to authenticate and identify users.
• If your application requires asynchronous updates after a user session has expired, dedicate a distinct administrator user
license for this.

Uninstalling Apps
Users can remove an installed app following the uninstall instructions in the Salesforce online help. By doing an uninstall,
users can remove all the components of an app in their organization with a single click and confirmation. However, the
publisher of the app will not be notified when an uninstall occurs unless the app is based on a managed package and the
publisher has installed the License Management App.

16
Packaging and Registering Apps

Matching the Salesforce User Interface


Apps that resemble the Salesforce user interface look and feel are instantly more familiar to users and easy to use. You can
model the design of your app after the Salesforce user interface look and feel by using our style sheets and design guidelines.
The Salesforce style sheets and design guidelines are available as downloads from www.appexchange.com. For more information
on the Salesforce user interface styles, see Using the Salesforce CSS in Your Apps.

Packaging and Registering Apps


After you have finished building your app and preparing it for the AppExchange, it is ready to go. Follow the steps below to
package all the components in your app, upload it to the AppExchange, and register it. Registered apps are available for sharing
with others privately. If you want to post an app listing on the AppExchange and share it publicly, follow the steps below and
then go to www.appexchange.com for information on posting it.
Upload your app
Package all your app components and upload it to the AppExchange.
Create a test drive
Show off the usefulness of your app in a test drive that users can demo before installing it.
Check your test drive
Make sure your test drive works the way you want it to work.
Register your app
After you upload it and before you post it, your app must be registered on the AppExchange.

Creating Packages and Uploading Apps

User Permissions Needed


To create packages: "Create AppExchange Packages"
To upload packages: "Upload AppExchange Packages"

An app can contain many different components. To group components in a container to upload to the AppExchange, create
a package and add components to the package. A package is the container for the app that you must use to upload all its
components together. Before you begin, determine if you want to upload a managed or unmanaged package. For more
information about managed packages, see "About Managed Packages" in the Salesforce online help.
To create a package:
1. Click Setup ➤ Exchange ➤ Shared Apps.
2. Click New.
3. Enter a name for your package. This does not have to be the same name that appears on the AppExchange.
4. Optionally, choose a custom link from the Configure Custom Link field to display configuration information to
installers of your app. You can select a predefined custom link to a URL or s-control that you have created for your home
page layouts; see the "Configure option" in the Salesforce online help. The custom link displays as a Configure link within
Salesforce on the AppExchange Downloads page and app detail page of the installer's organization.
5. Optionally, enter a description that defines the package. You will have a chance to change this description before you
upload it to the AppExchange.
6. Click Save.
7. Add the necessary components for your app.
a. Click Add.

17
Packaging and Registering Apps

b. From the drop-down list, choose the type of item you want to add to your package.
• At the top of the list, click a letter to display the contents of the sorted column that begin with that character.
• If available, click the Next Page (or Previous Page) link to go to the next or previous set of items.
• If available, click fewer or more at the bottom of the list to view a shorter or longer display list.

c. Select the items you want to add.

Note: Some types of components cannot be added to Managed - Released packages. For a list of these
items. see "Properties of Managed Components" in the Salesforce online help.

d. Click Add To Package.


Repeat these steps until you have added all the components you want in your package.
Note: Some related items are automatically included in the package even though they may not display in the
Package Items list. For example, when you add a custom object to a package, its custom fields, page layouts, and
relationships with standard objects are automatically included. For a complete list of the types of components
Salesforce automatically includes, see "What is automatically included in a package?" in the Salesforce online help.

8. Click Upload to AppExchange.


Note: If you are uploading a managed package, this option is only available after you install the License Management
App from www.appexchange.com and specify a license management organization.

9. Enter a Version Number for the upload such as version 1.0a. This is how you will identify this upload of the package.
10. For managed packages, select a Package Status:
• Choose "Managed - Beta" if you want to upload a version of your package to a small sampling of your audience for
testing purposes. You will still be able to change the components and upload additional beta versions. For information
on beta versions, see "Using Beta Versions of Managed Packages" in the Salesforce online help.
• Choose "Managed - Released" to upload an upgradeable version. After upload, some attributes of your components
will be locked. For a list of locked attributes, see "List of Locked Components" in the Salesforce online help.

11. Change the Description if necessary.


12. Choose a security option:
No password...
Makes the app available to anyone on the AppExchange. Choose this option to share your app publicly.
Password required...
Allows you to share the app privately with anyone who has the password. Choose this option and
enter a password if you want to distribute the password to a select group of people and share your app
privately with them.
13. Click Upload to AppExchange.
14. Click Done.
Check the status of your uploaded package by clicking the version number on the package detail page. You will receive an
email when your package has been uploaded successfully. The email includes a URL to the package on the AppExchange.
However, your app is not listed on the AppExchange until you register and publish it. You can also create a test drive to post
with your app on the AppExchange.
Note: If you published an app from your Salesforce Sandbox, you will only be able to manage it until you create a
new copy. Once you create a new copy of your Salesforce Sandbox, you will no longer be able to manage apps that you
uploaded from it.

18
Packaging and Registering Apps

Creating a Test Drive for the AppExchange

User Permissions Needed


To create a test drive: "Upload AppExchange Packages"

Give other Salesforce users a chance to test drive your app within a new Salesforce environment by creating a test drive. Test
drives are as safe and secure as any other Salesforce environment. In your test drive, you can add appropriate sample data and
allow users to try the app using the standard Apex on-demand platform.
A test drive is a new fully functional Developer Edition Salesforce environment that contains your app. It will be read-only
to AppExchange viewers. Your app does not require a test drive to be published on the AppExchange. However, a test drive
is registered along with your app and is one of the collateral pieces that the AppExchange hosts for you.
To create a test drive:
1. Click Setup ➤ Exchange ➤ Shared Apps.
2. Select the package you want to associate with the new test drive.
3. Select the version number that you want to associate with the new test drive.
4. Click Create Test Drive.
5. Enter the upload name. This is used as part of your username for the Salesforce environment that is created for your app's
test drive.
Salesforce creates two usernames for your test drive.
admin@upload_name.com
The username you can use to add sample data for the test drive.
eval@upload_name.com
The username you can use to see how other users will experience your app's test drive; it is a restricted
read-only user that is not allowed to save any data. When this user logs in, he or she always sees the
default custom app for the "Restricted Read Only" profile.
6. Click Create Test Drive.
7. Click Done.
You will receive an email with login information for your test drive organization when it has been created. Test drives take
just a few minutes to create. You can check the progress of your request for a test drive organization by viewing the detail
page for the upload.
8. Next, use the login information in the confirmation email to log in to your test drive organization and enter sample data
that shows off the usefulness of your app.
Note: If you are creating a test drive for an extension, Salesforce simply creates a test drive environment. After
that, log in to the test drive environment and install both the base package and extension for your uploaded package.

9. When you are ready for others to use your test drive, click the AppExchange URL from the upload detail page, click the
Edit link, and enter the Test Drive User Name and Test Drive Password for your test drive. For example:
Test Drive User Name: eval@upload1.com

Tip: If you are building an AppExchange app designed for Group and Professional Edition organizations, be sure
to test it using those Editions. Contact your partner success manager about gaining access to the proper test
environment.

Test Drive Password: password.

19
Packaging and Registering Apps

Remember that your app is not listed on the AppExchange until you register and post it. Go to www.appexchange.com for
information on creating your listing, assigning a publishing profile, and posting your listing.
Tip: We recommend you create your test drive before you register your app so that you can register your test drive
along with the app.

AppExchange Test Drive Checklist


When creating a test drive for your app, use the following checklist:
• Make sure there are two usernames for your test drive organization: one to administer it and an additional read-only
username for others to use when taking the test drive.
• Log in using both usernames to make sure the credentials work.
• Make sure there is no profanity or pornography in the test drive organization.
• Make sure that the organization name in the Company Profile is the new app's name.
• Check the custom objects for native apps in your test drive:
• Avoid including custom objects that mimic the functionality of standard objects.
• If you have custom objects in the test drive, add a sufficient amount of sample data to your test drive organization. It
should have enough data to convey the essential nature and purpose of your app.
• Optionally, check to make sure the custom object names (not their labels) begin with your four-character developer
prefix.
• For each custom object tab, create custom object list views that include more than one column.
• Create custom object search layouts that include more than one column.
• Make sure that the custom object related lists are appropriate and the right columns are displayed.
• Make sure all related lists referencing custom objects are formatted appropriately.

• Check the composite apps in your test drive:


• Make sure that the user test driving your app does not need a separate login.
• Test external features to make sure they function properly.
• Make sure that no passwords are revealed in the integration process.
• Test any external components to make sure they integrated seamlessly with Salesforce.
• External services may have data written to them but must be safe from malicious editing.

• Check the Home tab of the test drive:


• Does the name of your app appear in the AppExchange app menu?
• Does the logo reflect accurate branding in the top left corner?
• If you used dashboards, are they used as part of a custom home page layout applied to all users?
• Is the username and company name correct?

• Check the app tabs of the test drive:


• As a best practice, hide any extraneous standard object tabs.
• Make any customizations to standard objects for your app.

• Check the About tab of the test drive:


• Make sure the About tab is right next to the Home tab.
• The About tab should be labeled "About [app name]."
• Make sure the description in your About tab is app specific and has the correct branding.
• Make sure the help and training information in your About tab is app specific.

20
Packaging and Registering Apps

• Check the links on your About tab and make sure they reference an external domain where appropriate.

• Check any links in the test drive:


• Make sure any links have meaningful names that indicate what they do.
• Clicking the links should bring you to a site that is expected, appropriate, known, and trusted.
• Malicious custom links should not exist in this site.

• Check any reports and dashboards in the test drive:


• Make sure any reports included are appropriate.
• We recommend collapsing any extraneous report folders and moving relevant report folders to the top of the Reports
tab list.
• If your test drive contains any custom objects, provide reports and dashboards for your custom objects.
• As a best practice, put custom reports and custom dashboard in folders that are named after the app. Generic reports
and dashboards should be in a folder with a generic name.

• Check any documents in the Documents tab within the test drive:
• Check the Documents tab to be sure it only contains documents that are appropriate.
• Remove any documents that contain suspicious materials.

• If this is a test drive for an extension:


• Log in to the test drive environment and install both the base package and the extension package you uploaded.

Registering Apps

User Permissions Needed


To register apps: "Upload AppExchange Packages"

Whether you are sharing your app privately or publicly, you must first register it to make it available on the AppExchange.
After registering your app, salesforce.com sends you a confirmation email including a URL that you can share with others.
Send this URL to others if you would like to share the app privately.
Registered apps have the same functionality as published apps but do not expose the listing to the public. Publish your app
after registration if you want to make it publicly available on the AppExchange.
To register a package:
1. Click Setup ➤ Exchange ➤ Shared Apps.
2. Select the package that contains the app you want to register.
3. Choose the version number you want to register.
4. Click Register. Salesforce displays the URL to your app on the AppExchange. Send this URL to others if you want to
share the app with them privately.
Note: If this option is not available, you may need to change your session security settings.

5. Optionally, click Continue and enter the information about your app that you want displayed when users click the URL
for your app. For privately shared apps, this information is just as private as your app. If you choose to later publish your
app on the AppExchange, this information becomes part of your app's information page.
6. Click Save to save the information you entered.

21
Publishing and Listing Your App

7. Optionally, publish your app to make it publicly available to the entire Salesforce community on the AppExchange.

Publishing and Listing Your App


After your app is registered, you can publish it along with a listing on the AppExchange. Go to www.appexchange.com for
information on publishing your app on the AppExchange.

Supporting Apps
After your app is available on the AppExchange, provide support for it using Salesforce and the AppExchange:
Provide end user support
Be prepared for users who may call requesting support.
Promote your app
Get your app the attention it needs.
Find out how to upgrade
Provide a solution for upgrades to your app.
Monitor usage of your app
Track who has installed your app.
Lock down your app
Be prepared if an installing administrator deletes an essential component.
Bill for use of your app
Currently, salesforce.com does not support billing users for partner apps.
View a checklist for success
Consider the dos and don'ts of posting your app.
Frequently asked questions
Consult the frequently asked questions on the AppExchange website.

Providing End User Support


The publisher is responsible for providing end user support of all published apps. When customers contact salesforce.com
Customer Support with a question about your app's business processes or the user interface, we will direct the user to find
support information on the About tab of your app. Make sure the About tab for your app includes this information.

Promoting Your App


Through our AppExchange partner programs, we offer opportunities for developers of AppExchange apps to jointly promote
their apps with salesforce.com.

Upgrading Apps

User Permissions Needed


To upload packages: "Upload AppExchange Packages"
To uninstall apps: "Download AppExchange Packages"
To install apps: "Download AppExchange Packages"

22
Supporting Apps

Salesforce supports upgrades for managed packages only. Publishers can publish an upgrade for a managed package and notify
installers that the new version is available. Installers of a managed package can then install the upgrade as follows:
1. Before you install an upgrade, determine if the app you installed was from a managed package. Look for the Managed
- Installed icon on the detail pages for each component and on the list of packages installed.
If the app you installed is not from a managed package, upgrades for it are not available.
2. Then, install the upgrade in the same way you would install any other app from the AppExchange directory. If the publisher
provided a link to the new version, follow the link to the app posting and install it in your organization. The first page of
the install wizard lists the current version you have installed, the version you are about to install, and a list of additional
components included in the new version.
Note: Notes about upgrading managed packages:
• All existing custom objects that were previously deployed will still be deployed. Salesforce prompts you to deploy
any new custom objects or previously undeployed custom objects.
• If your upgrade does not complete successfully, Salesforce displays a message indicating why and lists any components
that did get installed or altered in the process.
• Profile settings are editable but not upgradeable. After upgrading, update the profile settings for any custom objects
included in the package. The developer can make changes to profile settings after releasing them, but those changes
will not be included in an upgrade.
• If the developer chooses to add universally required custom fields, the fields will have default values.
• When you install two apps from the same developer, you may receive duplicate components. For example, the
same custom field included in both managed and unmanaged packages will be installed as two separate custom
fields: one without a namespace prefix from the unmanaged package and one with the namespace prefix that is
upgradeable from the managed package.
• If the developer activates an additional language in an upgrade for which the installer added translated terms,
Salesforce prevents the upgrade until the installer removes the conflicting translations.
• Translation workbench values for components that are "editable but not upgradeable" based on the properties of
managed components are excluded from upgrades.

Preparing and Installing Upgrades for Unmanaged Packages


Incremental upgrades for apps based on unmanaged packages are not supported in Salesforce. However, if you have published
an app based on an unmanaged package and you want to offer an updated version:
1. Package new objects, tabs, reports, and other components in a new package and upload it.
2. Manually add any new fields on existing records. Communicate this to installers.
If you installed an app from an unmanaged package and want to update it with a more current version:
1. Back up all existing data associated with the app.
2. Delete all the data associated with the app.
3. Uninstall the old version of the app.
4. Install the new version of the app.
5. Import the app-related data back into the new app custom objects.

Monitoring Usage of Your App


Currently, salesforce.com does not support a formal mechanism for informing AppExchange publishers about the number of
times their apps have been installed. However, if your app is based on a managed package, you must have installed the License
Management App, which tracks the number of licenses that are currently installed and uninstalled for your app.

23
Supporting Apps

Locking Down Your App


Currently salesforce.com does not support a way for you to lock the components in your app unless it is a managed package.
Once your unmanaged package is installed in another organization, the administrator can make any changes and customize
it as necessary.
Your app may include an external service that relies on Salesforce custom fields or objects to function properly. We recommend
that an external service should detect when these essential elements are missing and display an appropriate error message. In
your About tab splash page, let installing users know which elements are critical to the proper operation of your app.

Billing for Use of Your App


Currently salesforce.com does not support billing on behalf of partners. We may offer this service at a future date.

Checklist for Success


Use the following list when preparing, building, and posting your app on the AppExchange:

Do
• Try to match the Salesforce user interface. For information on detecting the user interface theme and adhering to Salesforce
user interface styles, see Using the Salesforce CSS in Your Apps.
• Provide online help when possible or screens that document the app's intended use clearly.
• Upload your documentation files to the Documents tab and store them in a folder that is specific to your app. Include help
and support keywords for these documents so that they show in search results.
• Review all test drive data, including text and images, for content that might be considered offensive.

Do Not
• Require a browser setting that is not standard.
• Restrict your app to a single browser as this can increase support costs and efforts.
• Store usernames and passwords in your external service. Instead, use User ID to identify the actual user and Session
ID to retrieve the necessary information.
• Use real contact information as test drive data.
• Use the word "force" in your app name or label.
• Target your presentation to salesforce.com. Your target audience should be your intended customer.
• Publish apps with deprecated API calls. Always use the latest available API.
• Create a test drive that attempts to store new data or change data to existing records. Because users viewing your test drive
have read-only capability, changes made outside of Salesforce but within the test drive could fail.

Frequently Asked Questions


See www.appexchange.com for answers to the most frequently asked questions.

24
Index

Index
A AppExchange (continued)
terminology 5
Apex test drive 19
designing apps 10 test drive checklist 20
AppExchange upgrading apps 22
about 5 uploading apps 17
apps 7 Apps
creating demos 19 uploading 17
creating packages 17
data sheet checklist 15
designing apps 10
P
determining visibility 11 Packages
developing app documentation 13 creating 17
presentation checklist 15 uploading 17
registering apps 21

25

You might also like