TN-17: What's New in Winter '06
Salesforce.com's Winter '06 release, including the 7.0 version of the API, contains a number of significant new features and bug fixes that will improve the capabilities for applications that leverage the Apex platform. Considerable effort has been made to ensure backward capability with Apex API 6.0 for applications that have been written against previous versions of the API, starting with API 2.5. (Note: Older XML-RPC APIs should remain unchanged with this release.)

The new API provides a number of powerful enhancements that further improve any integration already in place between salesforce.com and your other systems. For additional information on the Winter '06 release, please see the Winter '06 Admin Preview, or visit: http://www.successforce.com. (Note: With this release, we will be changing the name of the platform as part of the re-branding of our product suite. The AppExchange platform will become the Apex platform.)
Things to note:
  • After the Winter '06 release, the WSDL 6.0 will no longer be available. Instead, all requests for a WSDL will return a WSDL 7.0. Please remember to save WSDL files with your project, as the enterprise WSDL is custom to your organization.

  • The XML-RPC APIs have not changed - or been enhanced - with Apex API 7.0. Developers are encouraged to migrate to the SOAP-based API to leverage the new features of the platform. These have not been updated since December 2003. We will soon be asking customers using XML/RPC versions 1.5 through 1.7 to upgrade to at least version 1.8. This is a simple change for most XML/RPC integrations.

Major API Changes
  • Upsert is a new API call (API version 7.0) -This is a powerful new call that allows integrations to match on a custom field, and either create or update, based on the presence of an existing record. Use this feature when integrating with a back-end accounting or ERP system, or to prevent duplicate records. Utilizing this new call, many integrations can reduce by 50% the number of calls they make.

  • External ID is a new Field Type (API version 7.0) - Custom fields have a new property, ExternalId. Once this property is set, the upsert call can be used to match on the externalId, and either create or update records, based on an ExternalId match. A common use case for ExternalId is integration with a back-end ERP system. For custom objects, the field can be used for import matching. Whether a field is an ExternalId field will be exposed in the describe call. ExternalId fields are also indexed, so using selective filters on ExternalId fields should be fast.

  • Improved Performance (API version 7.0)

    • Create and update operations will not update the Most Recently Used (MRU) list by default in the 7.0 API. A new header (MruHeader) will allow developers to update the MRU for those that need to maintain backwards compatibility (note that the behavior for API 6.0 and below will not change). Skipping MRU updates can improve performance of bulk loads up to 25%.

    • The API SOAP stack and the SOQL Query Optimizer have been re-architected from the ground up for enhanced performance.

  • Office Toolkit (All API versions) - The Office Toolkit enables Microsoft Office and COM/Win32 developers to utilize the power of the Apex API. With this release the Office Toolkit is moving from beta to GA; documentation is now available for Office Toolkit, as is a redistributable MSI file.

  • Modifiable System Fields (API version 7.0) - When migrating data from an external system, the 7.0 API lets customers set the CreatedBy, CreatedDate, LastUpdateBy, LastUpdateDate, and a number of other fields that were previously read-only. (Note: You must contact Salesforce support to enable this feature.)

  • Revamped CSS in Winter '06 (All versions) - With the Winter '06 release, salesforce.com has taken a giant step towards embracing Web standards. We have moved all of the presentational aspects of our site into CSS files, and are providing users with multiple themes, or "skins," which they can use to view the application. Web standards compliance also provides significant benefits for our partners, who can mimic any of our themes (now or in the future) by following our guidelines for developing HTML and importing CSS. A tech note providing full details on the new CSS is available at http://www.salesforce.com/developer/tech-notes.jsp?tn=TN-16.

  • Developer Edition API Rate Limiting (All API versions) - When the 7.0 API is released, all Developer Edition accounts will be limited to 5,000 API calls in a 24-hour time frame. This limit applies across all versions of the API. If you are using a Developer Edition account and you have a valid reason to have this limit increased, please contact customer support. Rate limits apply only to Developer Edition accounts; all other editions (Enterprise, Professional, etc) are unaffected.

Major Platform Changes
  • Application Packaging & Sharing - AppExchange makes it easy to package and share your customizations, both publicly and privately. New packaging tools in setup allow you to package up some elements of custom objects, custom fields, reports, dashboards, and many other core components, and upload those packages into the AppExchange. (Note: Not all types of platform elements are packageable, and in this release customizations on standard objects (Contacts, Leads, Accounts, etc.) cannot be packaged.)

  • Dependent Picklists - Picklist entries can now be made dependent on other fields, including check boxes and other picklists, allowing complex hierarchies of categories to be presented in a straightforward UI.

  • Relationships on Standard Objects - With Winter '06, you can add your own custom lookup fields to standard objects, allowing those objects to be related to custom objects (and indirectly each other). Likewise, you can add standard objects as related lists on custom objects. As part of this change, custom relationships are now created and edited as part of the Custom Field wizard.

  • Custom Object Record Types - Custom objects now have the Record Type capabilities previously available only to standard objects, allowing for sets of fields, layouts, and other object priorities to be segmented within a given object type.

  • Image Formula Fields - With the Winter '06 release, formula fields allow the incorporation of images in the field, emulating the capabilities of the HTML IMG tag. As part of formula fields, images can be displayed conditionally or dependent on other field values. See below for additional detail on how to interpret formula fields that utilize the IMAGE and HYPERLINK functions.

  • Workflow on Custom Objects: Workflow rules can trigger task and email actions on custom objects, just as they can on standard objects.

  • Workflow Event on Any Update: In addition to workflow rules and events being triggered on a specified field value change, those events can now be configured to trigger on any update to a record.

New Objects
  • EntityHistory - EntityHistory is a new object that will be used to track object changes. This object will be the single object that all history data will be captured in going forward. In the 7.0 version, you can use this object to read history data for Cases and Solutions. CaseHistory will be deprecated in favor of this object.

  • Forecasting - A number of new objects will be exposed for custom forecasting in the 7.0 API. These objects include: FiscalYearSettings, LineItemOverride, OpportunityOverride, Period, QuantityForecast, QuantityForecastHistory, RevenueForecast, RevenueForecastHistory.

  • Territory Management - Territory Management objects are exposed in the 7.0 API, giving customers full control over managing territory data. New objects include Territory, UserTerritory, AccountTerritoryAssignmentRule, AccountTerritoryAssignmentRuleItem.

  • AccountPartner - There is a new read-only object on Account Partners. Previously, the Partner object was only readable for the admin user. It can now be read by all users who have permission

  • OpportunityPartner - There is a new read-only object on Opportunity Partners. Previously, the Partner object was only readable for the admin user. It can now be read by all users who have permission.

New & Changed API Behavior
  • Recurring Event Metadata - Recurring Event Metadata will be exposed in the 7.0 version of the API. This will give API programmers the ability to create, update, delete, and query recurring events.

  • GetUserInfoResult has a new property: userUiSkin - userUiSkin lets programmers know which UI skin the user is using. There will be additional documentation about the new UI, and how to access the proper Cascading Style Sheet as a partner.

  • GetUserInfoResult has a new property: accessibilityMode - This will be set to true when the user has selected accessibilityMode in the application. When enabled, pages displayed to the user should be Section 508 compliant.

  • RecordType.sobject is a new field on RecordType. - In 7.0, this field replaces the TableEnumOrId field. Since RecordTypes are available in the Winter '06 release, the sobject name can now be a reference to a custom object.

  • WebLink.PageOrSobjectType is a new field on Weblink - In 7.0, this field replaces the PageEnumOrId field. References to custom objects in 7.0 will be by name. In 6.0 and below, they were by the ID of the custom object.

  • Fields on Approval have increased lengths - RequestComment and ApproveComment have both been increased to 4,000 characters. This change will apply in all versions of the API.

  • batchSize for query is a hint - In version 7.0, any value can be provided for the query batchSize, but 200 will be the starting minimum. The system may reduce the batchSize depending on the set of fields requested. For example, requesting a large amount of long text fields will cause the batchSize to be reduced.

  • Delete call maximum record size changing - The maximum number of records that can be passed into a delete call is 200 in 7.0. In 6.0 and below, the limit remains 2,000.

  • UserRole becomes replicateable in 7.0.

  • Exception message enhancements - Some exception messages will contain a unique numeric identifier, which will help salesforce.com support track down why you received the error.

  • CaseComments are searchable in all versions of the API.

  • EmailMessage has a new field: hasAttachment - This field is true when the EmailMessage has one or more attachments associated.

  • EventAttendee is now replicateable: EventAttendee is now replicateable in all API versions in which it is available.

  • Sharing objects are available to non-admin users: AccountShare, OpportunityShare, LeadShare, and CaseShare will be queryable by non-admin users in all versions of the API. Previously, these objects were only available to users with the "view all data" permission.

Describe Changes
  • Dependent Picklists are a major new feature in Winter '06. DescribeSObject has been enhanced to include the metadata for reproducing the dependency information.

    • Field has a new property: controllerName. This will be set for dependent picklists.

    • Field has a new property: dependentPicklist. This value will be true for dependent picklists

    • PicklistEntry has a new property: validFor. This will be set for dependent picklists.

  • The DefaultOnCreate flag on CustomObject name fields is set to true in all versions of the API. If you do not set the name field, it is set to the newly created ID of the custom object.

  • ChildRelationship and Field have a new attribute: relationshipName. This field is reserved for future use.

  • fieldType and soapType have a new enumeration value: anyType. This is initially being used in the EntityHistory object to describe a value that can a number of different types.

  • Field has a new property: htmlFormatted. This property will be set for hyperlink and image formula fields. This means the text has been formatted for HTML, so if you are displaying this data in HTML, you should not be encoding it before display.

  • In the 7.0 version of the API, text formula fields that return a hyperlink or image will have the text HTML formatted. In 6.0, the formatting will not change.

  • Field has a new property: externalId. This will be true for externalId fields.

  • DescribeResult returns a different result for certain fields in 7.0, where we define minoccurs=0 and maxoccurs=unbounded in the WSDL. In 6.0, on such fields, the system would serialize out an explicit nil node if there were no array values such as: . In 7.0, this node will not get serialized if there are no values. This should not cause a problem for most SOAP toolkits, but please make sure you test this case when upgrading to 7.0.

Bug Fixes
  • Querying the name field on profile works correctly in the 7.0 API. Prior to 7.0, the names came back as PT1, PT2, etc. (Note: The behavior for API versions 6.0 and lower will not change.)

  • Previously, queries against Task did not match the results received from reports on Task delivered via the application. These behaviors now match.

  • SOQL filters (greater than, less than) on negative numbers now work. Previously, a query such as: "Select Id, Name, AccountNumber from Account where ofITStaff__c > -1" would return an error.

  • Previously, a number of objects allowed the owner to be changed to an inactive user. The API will now return an error when an attempt is made to assign a record to an inactive user.

  • Assignment rules based on formula fields will now work correctly in all versions of the API.

  • getUpdated calls for non-admin users will now evaluate the sharing model prior to returning data. This may result in some objects returning less data than before 7.0.

  • When activating a contract with a user-defined Activation value, the picklist value is remembered correctly. Previously, it would always set the value to the "Activated" picklist value.

  • SOQL queries that return a formula field with a GETSESSIONID function will return a valid session id.

  • The BusinessHours object is now described with a label. Previously, there was no label.

  • AccountShare has a field called AccountAccessLevel. The "Private" option has been removed from this enumeration, as it was never a valid option.

  • The defaultedOnCreate flag is now set to true on AccountShare.AccountAccessLevel and AccountShare.OpportunityAccessLevel. The behavior does not change, however, the metadata will be described correctly.

  • The pluralLabel on CaseComments was changed from "Case Comment" to "Case Comments".

  • The label and pluralLabel on CaseShare.CaseShare are changing from "Opportunity Share Default" to "Case Share".

  • The label on LeadShare.LeadAccessLevel is changing from "Case Access" to "Lead Access".

  • Error behavior for deleting a non-existent ID has changed in version 7.0. Attempting to delete a ID will now return INVALID_CROSS_REFERENCE_KEY. The behavior in 6.0 and below has not changed, deleting non-existent IDs will return success.

  Privacy Statement | Security Statement   Salesforce.com: 1-800-NO-SOFTWARE  


© Copyright 2000-2007 salesforce.com, inc. Customer Relationship Management (CRM) • All rights reserved
Various trademarks held by their respective owners.