Here is my summary of the more developer-related topics from the AppExchange Developer Network (ADN) @ Dreamforce tracks.
To make sure you get the real scoop, I recommend you watch the session videos as they get posted. All are located in the Dreamforce Guide at Successforce.com. Here are some of the key ones:
- AppExchange State of the Union: An overview of changes in all major components of the platform. If you watch only one, watch this one. You’ll get a sense of everything, but won’t dive in very deep.
- Wielding Workflow: Provides a detailed review of the new workflow features in Winter 07
- Next Generation Web Services: New API features
- Future of Composite Apps: See examples of composite apps (aka mashups)
- Next Generation Native Apps: All the new things a developer can do without writing any code
- APEX: What is it? Why was it made the way it was? Craig Weisman (father of APEX) and Simon Fell (father of the API) are the presenters.
- Packaging It Up: Latest Enhancements for App Distribution: Learn about the enhancements to packaging applications. This focuses on a new concept called “Managed Packages”
Data & Native Framework
All of these are things built right into the Setup area and require no coding to perform.
A really good approval process is coming out. You can do approvals on any object including custom ones, but excluding Tasks & Events. This will allow a record to be sent into a configured approval process. There are a multitude of configuration options that apply to implementing approvals. Just know it will be quite flexible.
Have you ever wanted to automatically update a field based upon a condition? For example, when an Opportunity is set to “Closed Won”, change the record type to lock down the record. Or automatically change the owner of records that meet certain criteria. You can do this with Field Updates.
Send a strong typed XML document to an end point. You specify the fields to include and the criteria by which the message should be sent. You also have the ability to generate a WSDL for use in developing the end point. You can also include the Session ID with the message so that the end point could leverage that session and manipulate other Salesforce.com data.
You can now setup validation rules that stop a user from saving a record. For example, create one to validate that discount percentages fall within a certain range. Or validate that the Country value entered matches up against a list of valid countries (since the country field is not a picklist).
Sharing on Custom Objects
Woo hoo!! I have been asking for this one. This capability is a big step towards being able to truly build applications on the Salesforce platform that someone might purchase even if they don’t have CRM.
Field History Tracking
Keep an audit trail of field-level changes on a record.
I didn’t catch too much about this, but it made it sound like the ability to do hierarchical relationships within an object. Similar to the parent-child account relationship.
Queues on Custom Objects
Just like on Leads and Cases, custom objects will allow a record to be owned by a queue instead of an individual owner. This, along with the Sharing on Custom Objects, add a lot to record-level security in Salesforce.
This is great. You can now pull, with 1 query, what used to require multiple. It is similar to joins in SQL.
- M:1: Include information from a related record. For example, you can now query the Contact object and reference fields that Contact’s related Account record.
- 1:M: Embed sub-queries in your SOQL statement to return the records that would normally appear in the related lists. For example, in a single query you could return an Account record, all its Contacts, all its Opportunities, all its Cases, etc.
It will be interesting to see how this affects the API as a % of all Salesforce.com traffic. Today it’s touted as 40% of all traffic. This change, especially, will eliminate a lot of calls to the service.
You can now (finally!) order your resultset. I believe you can only order by 1 column, but don’t quote me on that.
Use IN to simplify your WHERE clause, like in SQL.
Simply return a record count from a query. I believe this will only be available in the main query, not in the sub-queries.
Use this statement to limit the number of records to be returned. This can be used in the sub-queries too.
This will utilize the Translation Workbench to translate the values that get returned so that you can create Internationalized interfaces.
forceAMP will have a new tool out called QueryAmp that will allow for advanced SOQL modelling with the resultsets being put into Excel. Kind of a combo of the Excel Toolkit and the .NET Explorer. Be on the lookout, this will be handy. Will probably be for a fee.
UPSERT with Relationships
Data Loader will support this. When loading a record into the database, you can reference the External ID value rather than the ID fields. For example, if your Account uses a custom DUNS_Number__c field as an External ID, you can load Contacts that reference that DUNS Number in order to link the record to the appropriate Account. Today, you would need to do a lookup in the Account object, return the ID and use that.
There is a new merge call in the API. It is only supported on Accounts, Contacts and Leads. A new field is included in this API called masterrecord.
- QueryAll: Use this method to query and also include records from the Recycle Bin.
- Undelete: You can undelete records from the Recycle Bin through the API.
- describeLayout performance enhancements
- New Objects Exposed
- Email Header: In places where the system would be sending people emails (user creation), you can invoke this in the API
Lots of buzz around this. You can now embed your s-Controls into a Page Layout. There will be LOTS of development going on in this area.
Before you could add custom links to the application to go to a URL or run an s-Control. Now you can do this with custom buttons. In addition to going to a link or running an s-Control, this can also be used to run APEX code.
You can also override the standard buttons. For example, change the new opportunity button to run custom code of yours. This will impact any time an Opportunity is created in the UI.
Packaging & Distribution
There’s a lot to talk about here that I don’t have the energy to write about. Check out the Packaging It Up: Latest Enhancements for App Distribution session video when its released. In short, there is a new concept called “Managed Packages”. This works in conjunction with an app called the License Manager. Managed Packages allow you to seamlessly upgrade your apps for your customers. The License Manager allows you to see who downloaded your app and what version they are on.
Also, you will have the ability to package up new objects like Custom Buttons and Custom Fields on Standard Objects.
I suggest you visit http://www.salesforce.com/landing/apex.jsp for the real information. Here’s a summary of what I learned about it.
- APEX will be launched in beta in Q1 2007
- You will have the ability to create “a discrete piece of code written in the APEX language and executed by the APEX platform”
- Runs natively on the server and is much faster than AJAX
- Interacts with the UI via buttons & events (triggers).
- Interacts with data via the API.
- Java-like syntax for creating logic and manipulating data
- Language scope similar to stored procedures
- “Compiled” and strongly typed. Basically, your code is validated before it is allowed to be executed.
- The “compile” process will keep metadata about your code so that it can warns/stops you from deleting a field referenced by APEX code.
- Transactional. Supports COMMIT and ROLLBACK calls. Does not support nested transactions.
- You will have the ability to “add verbs” to the API. Basically, you can write code in APEX and expose it as a Web Service. Maybe you want to have a verb called “NewWithDeDupe” that checks for duplicates before insert. Go for it.
- A new PHP toolkit will be available when Winter ’07 is released
- A new Eclipse plug-in using Eclipse 3.2 will be available
- New Data Loader to support Upsert changes