Major additions in this release:
New admin page
The /admin/config/salesforce/settings page where you can configure which version of the API you're using. You can also configure pulls via a webhook instead of cron.
Additionally, the mappings pages have been cleaned up by Issue #1980688: Push/pull UI improvements. This removes the temptation to try to sync or push an item if, say, you only have the Salesforce Pull module enabled.
New hooks
Issue #1909990: hook_salesforce_push_entity_allowed, hook_salesforce_push_success, hook_salesforce_push_fail for filtering entities before push, and for reacting to push successes and failures.
Issue #2745063: hook_salesforce_pull_mapping_object_alter and hook_salesforce_push_mapping_object_alter for manipulating mapping_object objects Immediately before pull or push
Issue #2688033: hook_salesforce_pull_entity_presave, hook_salesforce_pull_entity_insert, and hook_salesforce_pull_entity_update, which mimic the default hook_entity_XX, but also expose the original Salesforce Mapping values for consideration.
Side note here: If you are using a dev version of the Salesforce module and taking advantage of hook_salesforce_push_entity_allowed_by_mapping, that function will no longer work, as it's been rolled into hook_salesforce_push_entity_allowed.
New functionality
You can now do pulls from Salesforce via a webhook instead of cron by visiting /salesforce/webhook/pull and including a token. Option can be set up here: /admin/config/salesforce/settings
You can also now delete without using the SOAP module. Note: This requires you to be on a version of the Salesforce API of 29.0 (Winter '14) or greater. This setting can be checked here: /admin/config/salesforce/settings. See Issue #2730357 for more.
If you're using SOAP, you can overwrite the default WSDL by setting the variable "salesforce_partner_wsdl" to a given path. Currently there's no UI for this, but the variable can be set using Drush or as a $conf variable in your settings.php file.
New drush command
Drush command "sf-execute-query" to directly query Salesforce. See Issue #2637508.
Changes since 7.x-3.1:
- #2755309 by aaronbauman: Allow override of WSDL
- Revert "Issue #1802698 by seanB: Consider switching from AES to Encrypt"
- #1861564: Can't count on libraries_get_path() in an install file.
- #1802698 by seanB: Consider switching from AES to Encrypt
- Unsuccessful submission when key is incorrect type.
- Warnings on Admin if validating during ajax call for Drupal entity.
- 1951744: SAVED_UPDATED not returned if you're saving a revision.
- #2392387: Adding comment.
- #2392387 by gcb: URI validation fails on salesforce pull mapping "website" to "link"
- #1861564 by aaronbauman: salesforce_soap_requirements() cannot access libraries_get_path()
- Improved testing comment.
- #2642094 by aaronbauman, mpotter: Should SF pull process use "pull_trigger_date" instead of "LastModifiedDate"?
- #1118736 by aaronbauman, stella: Add push success/failure hooks for REST
- #2612942 by aaronbauman: errors during salesforce_pull_map_fields()
- #2612934 by aaronbauman: Exception during exception handling
- #2605128 by aaronbauman: Bubble exceptions during cron pull
- #2605072 by aaronbauman: More helpful error messaging in salesforce_pull_map_fields()
- Running tests through coder and adding unit test for salesforce_mapping_load_multiple.
- #1909990 Adding example usage to hook_salesforce_push_success, hook_salesforce_push_fail and hook_salesforce_push_entity_allowed.
- 2488000: Small documentation error.
- Github Issue #100: Avoid undefined index warnings if no is set.
- #2612860: Add missing parameter to documentation.
- #1980688 Only allow syncing when both push and pull modules enabled.
- #2688033: Cleaning up api parameters.
- #2745063: Small fixes to API documentation examples.
- #2644918 by asherry: _uri() functions error after menu cache clear
- #2745063 by rjacobs: Add alter hooks to manipulate mapping objects on pull and push (for custom prematching, etc.)
- #2730357 by rjacobs, aaronbauman: Sync deletions on pull without using SOAP client
- #2688033 by rjacobs, aaronbauman, chrisolof: Add entity_presave/insert/update sf pull hooks
- #2637508 by jfhovinne: Drush command to execute a SOQL query
- #2642888 by stephen.colson: Queries with spaces not translated
- #2644714 by bdone: Allow 'salesforce_endpoint' values in test environment
- #2643472 by asherry: Strict warning: Only variables should be passed by reference in salesforce_mapping_form_submit
- #2640502 by gcb: Allow for null RecordTypeId
- #2622064 by eugenesia: Cannot access Salesforce REST API through Squid proxy
- #2499821 by TravisCarden: Salesforce::apiCall() has PHP version dependency
- #1980688 by pianomansam, mpotter: Better UI when only one mapping direction enabled
- #1889658 by Mèche, othmen, markisatacomputer: RTBC - Taxonomy Terms pulling without vid
- #2622126 by aaronbauman: Store Salesforce Object Type Name in salesforce_mapping_object table
- #2612860 by aaronbauman: Add "getUpdated()" wrapper to Salesforce class; Update default salesforce api version to Winter '14
- #2748067 by mariacha1: Upserting any item during batch processing cron attempts to upsert all subsequent records
- #2748535 by mariacha1: Async option cron run fails to remove push items from queue unless salesforce_soap is enabled
- Handle allowed record types configuration set by features
- Merge branch '7.x-3.x' of github.com:thinkshout/salesforce into 7.x-3.x
- Merge pull request #100 from thinkshout/webhooks
- Standardize on the REQUEST_TIME constant
- Process salesforce_pull queue items as part of webhook request
- Refactor webhook and cron pull actions into a single function
- Broader code style updates
- Add actual webhook url to the field help text
- Move webhook related code into salesforce_pull until/if we have non-pull webhooks
- #2641994: swapped out undefined method Salesforce::verifyId for convertId
- Add throttle to salesforce pull - prevent too many from running at once
- Add a webhook callback for salesforce pull.
- Use same level of permission as oauth_callback. Add example for key
- Webhook settings and access.
- #2601416 by gcb: Updates pushing to non-updateable fields causes errors
- #2616300 by jfhovinne: Add OFFSET clause to SalesforceSelectQuery
- #2605100 by aaronbauman: Fix import to integer property (allow mapping SF checkbox to Node status)
- Add documentation for hook_salesforce_query_alter()
- Combine hook_salesforce_push_entity_allowed_by_mapping into hook_salesforce_push_entity_allowed with the additional $mapping argument.
- Fix references to $synced_entity, and refactor $mapping_object reference
- #2611098 by aaronbauman, sergei_brill: Undefined variable
- Switch sort method, so the list is sorted in a more expected way.
- Display field key alongside the field name, to disambiguate fields with the same name.
- Update pull value callback for relation endpoint fieldmap type (i.e. salesforce_mapping_relation_endpoints_fieldmap_pull_value) to ensure directional endpoints only get returned if they match the allowed source and target bundles, respectively. Previously we were appending our return values for directional relations to the same array we used to aggregate the values in the first place, which could result in the first value of the return array being a duplicate of the second if there was only one endpoint present and it was the target endpoint in a directional relation
- #2488818 by gcb: Add a configurable "update field" for mappings
- #2415015 by yogaf: SalesForce views module not working for users
- Cast to bool when pushing to a boolean SF field
- #2305889 by tauno, dbcollies: Make REST API version configurable
- #2287065 by dbcollies: Add support for apexrest URLs
- removing debugging cruft
- #2488000 by aaronbauman, philipnorton42, rjacobs, gcb: Notice created via salesforce_mapping_menu()
- Merge branch '7.x-3.x' of git.drupal.org:project/salesforce into 7.x-3.x
- Fixing synxtax error from commit 4acc573
- fixing hook_menu for users in sf mapping. Anonymous user with id = 0 is breaking things.
- #2223673 by ohthehugemanatee, pianomansam, aaronbauman: add "push" button to mapping object edit form to force update from drupal
- adding "convertId" function to translate between 15 and 18 char SFIDs
- #2553413 by pianomansam: Mappings with LastModifiedDate field fail due to being included twice in SalesforceSelectQuery
- change entity_id and entity_type to values in salesforce_mapping_object_form
- changing "mapped_object" to "mapping_object"
- #1909990 by tanmayk, aaronbauman: Conditional Push to Salesforce; Adding hooks: hook_salesforce_push_entity_allowed_by_mapping, hook_salesforce_push_success, hook_salesforce_push_fail
- Adding hooks: hook_salesforce_push_entity_allowed_by_mapping, hook_salesforce_push_success, hook_salesforce_push_fail
- #2488000 by philipnorton42, rjacobs, aaronbauman: better entity support in salesforce_mapping_menu()
- improve exception thrown when drupal entity fails to be created from SF object by including the SF object ID so user can more easily track down source of the failure
- one more mapped/mapping change
- renaming confusing variable references to "mapped_objects" which is actually a single "mapping object"
- #2534076 - sequentially index all items for push
- removing unnecessary module_load_include() calls
- forgot the row id
- adding theme_salesforce_mapping_form_table_row() to fix compatibility for any themes which override theme_table(); converted fieldmap form token tree to use jquery ui dialog per #1684984
- Sort fields alphabetically for ease of use.
- Remove unused extra fields definitions
- Change STARTS_WITH operator to LIKE with proper escaping
- check if variable is set instead of acting directly on it to avoid "undefined index: in salesforce_mapping_load_multiple()" error