# Complete (alpha state)

# In Progress

Currently underway.

# MVP targets (alpha-blockers)

These are mission-critical components that need to be included for a basic -alpha or -beta release.
See "SFD8-MVP" tag.

Beta-blockers are all in progress or completed.
Beta release is coming soon.

# Release blockers

Targets for inclusion in 8.x-3.0 release.
See "SFD8 Release Blocker" tag

# Point-one features

These are nice-to-haves which could wait for a 8.x-3.1 release if we run out of time.
See "SFD8-3.1" tag

# Additional info

Not sure how to get involved?
Maintainers could use help in the following areas (arranged roughly in order of increasing effort / expertise):

  • Manual testing
  • Usability reviews
  • Writing automated tests for Drupal interfaces
  • Mock SF service for automated integration testing
  • Optimize for / make use of D8 caching goodness
CommentFileSizeAuthor
#16 0001-update-code-to-work-with-latest-drupal.patch88.48 KBAnonymous (not verified)
#14 salesforce-update_to_beta_6-2124001.patch65.42 KBAnonymous (not verified)
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

AaronBauman’s picture

I'll start:

feature: Optimized asynchronous push
priority: major
effort: medium
impact: extends / improves existing functionality; no loss of features; upgrade path possible
description: 7.x-3.x implements an asynchronous push using DrupalQueue. This approach falls short in some respects. DrupalQueue uses FIFO ordering, which doesn't always make sense for Salesforce objects. For example, Accounts should be processed before Contacts. Further, there is room for optimization by grouping object types into larger batches. This feature was developed in Springboard, and there is a rudimentary patch for the 7.x-2.x branch in the issue queue, but discussion in the queue died and the patch was not committed.

AaronBauman’s picture

And one more for now:

feature: Merge contact handling
priority: normal
effort: medium
impact: new feature. no impact on existing functionality.
description: salesforce_pull implements handing for deleted records, but does not consider merges. Drupal does not entertain any notion of merging nodes, so this is a bit sticky. But, a basic implementation and some configuration options could be a relatively quick win for a sorely missing feature.

kostajh’s picture

My own preference, for maintainability, is to avoid a monolithic Salesforce Suite package. I'd prefer to see a more or less straight port of the existing 7.x-3.x branch to Drupal 8 (with the possible change of abstracting the REST and SOAP API interactions into a separate PHP library hosted on packagist). We will be better off for maintenance and support if we try to keep things simple.

I think features like merge contact handling could be handled by a contrib module (e.g. "Salesforce Contacts") that uses the hooks provided by Salesforce Push and Pull modules to implement that feature, and others relating to Contact syncing (for example there are a number of behaviors related to user account syncing that could be dealt with there).

The feature in #1 would be a good candidate to consider for Salesforce Push though.

kostajh’s picture

And here's a feature idea:

feature: Full test suite for REST API interactions
priority: normal
effort: high
impact: No new functionality, but will make testing patches and writing new features much more maintanable. We would need to take an approach like Mollom and write a mock web service that is used as an endpoint for testing push/pull interactions.

levelos’s picture

Hey folks. Aaron, thanks for getting the ball rolling on a D8 port.

Aaron, quick note on #1. While there's clearly room for improvement of the queue handling, we addressed the FIFO issue in part by allowing the ordering of the mappings (via a drag and drop interface on the mapping overview page). So if you have accounts related to contacts, simply make sure that accounts are processed first and then the module properly handles relationships from there.

Regarding #2, while nodes can't be merged, RedHen and CRM core contacts can. Just a heads up that we stay focused on generic entity handling and not just nodes.

Per Kosta's comment in #3, we're committed to a lean set of building blocks to enable a wide array of use cases on a common base. We're definitely excited to be involved in moving a D8 port forward, although I have to be honest that our velocity will be in large part dictated by project needs. Given the 7.x-3.x rewrite took us around 800 hours, I'd assume something similar for 8.x.

kostajh’s picture

Version: 7.x-3.x-dev » 8.x-3.x-dev
ceardach’s picture

Version: 8.x-3.x-dev » 7.x-3.x-dev

My primary goal is to do a straight 1:1 port of the 3.x branch just to merely get things working. THEN think about other stuff.

I have done significant development in extensions for the 7.x version in a salesforce_sync and salesforce_queue modules. Sync is improving the developer interface (SOAP focused now, but I've got a REST+SOAP branch). Queue has everything that was discussed in comment #1.

The salesforce_sync module also has other features roped in that I'd like to see integrated more discretely. Sync rules allows for setting what conditions will allow overwriting when syncing, such as only when the target value is empty. There's also token support, so that, for example, if two records need to be synced simultaneously and one depends upon the other, the dependent can reference the other record as a token.

Abstract the heavy lifting as a library so that work done on 8.x features can be easily ported back to 7.x, so that this and future versions would require a lighter drupal-specific wrapper.

Abstract salesforce_mapping. Currently it focuses on just entities, but I'd like to abstract it so what is being mapped is a plugin, allowing for a generalized mapping UI and ability to map other things, such as webform.

As for testing, there's still the issue of how to authenticate with Salesforce. I could not get authentication using oauth working with simpletest. The only way I could get authentication to work is to scrape the data from the primary database and copy it to the test database. Besides that, I've got REST and SOAP testing done in that REST+SOAP branch I mentioned earlier.

ceardach’s picture

Interesting... I don't have a 8.x-3.x-dev in my version dropdown, which is why my comment reverted it back to 7.x.

AaronBauman’s picture

Version: 7.x-3.x-dev » 8.x-3.x-dev

weird, must be some kind of caching issue on d.o
I imported your initial port from github to create the new branch a couple hours ago.

+1 to get a straight port from 7.x-3.x before adding any new features

kostajh’s picture

As for testing, there's still the issue of how to authenticate with Salesforce. I could not get authentication using oauth working with simpletest. The only way I could get authentication to work is to scrape the data from the primary database and copy it to the test database. Besides that, I've got REST and SOAP testing done in that REST+SOAP branch I mentioned earlier.

That's why I think we should take the approach from #4, to create something like a "Salesforce Test Server" module (see http://drupalcode.org/project/mollom.git/tree/refs/heads/7.x-2.x:/tests for an example).

It would take a bit of work to get this implemented, but once it's done, you don't have to rely on using credentials from an existing Salesforce instance for running the tests.

ceardach’s picture

That's why I think we should take the approach from #4, to create something like a "Salesforce Test Server" module (see http://drupalcode.org/project/mollom.git/tree/refs/heads/7.x-2.x:/tests for an example).

Could you explain how this would work for Salesforce specifically? What would be the steps/workflow?

kostajh’s picture

Could you explain how this would work for Salesforce specifically? What would be the steps/workflow?

I think the basic idea (@levelos mentioned this here; Mailchimp is using the same approach) is that there is a salesforce_tests_server module, whose job is to mimick the responses you get from CRUD with the Salesforce REST API. So in the tests, when you call $salesforce->apiCall(), you're actually posting responses to for example https://localhost/salesforce-test/rest/v1 instead of https://na15.salesforce.com. The Salesforce Tests Server responds with some dummy data. The tests can use the data returned from the Salesforce Tests Server as a basis for making assertions. Writing up the dummy responses to the potential calls to the Salesforce REST API would be a tedious task.

If I get time next week I can try to write a proof of concept using this approach.

Anonymous’s picture

Issue summary: View changes

Just curious about the progress of this - I see that the last update was about a year ago. Is this still on target, especially now with the beta out?

Anonymous’s picture

Just a quick update I did as I needed to get this up and running on the current beta. This is mainly just updates to the new permissions.yml format and src/ locations.

Also some API changes in ConfigForm and SalesforceClient. I also hid the Entity, as it was causing problems. I didn't touch much of anything else - just enough to get it up and running without errors since the last update was back in 2013.

Macronomicus’s picture

Todd are you still running this with your patch on the latest D8 release?
I can see this is old and maybe forgotten module but ill test it and Todds patch soon with the latest d8 release.

Anonymous’s picture

I had to do a couple of modifications, I believe - I'm running 8.0.1 (well developing, nothing live) and everything *pretty* much works. I haven't really done anything dramatic as I was still getting used to what the module was doing and the differences in Drupal 8.

I really should take a harder look now that I have a bit more experience. I was hoping that it would be a nice kickstart to an official update. :(

I'll do a new patch with the changes I did that I'm using for 8.0.1. It's by no means official nor complete but hopefully it's enough to get started. I still haven't moved onto the full scale SF integration to dive into it further. Perhaps I'll take a look this weekend/month.

Macronomicus’s picture

Sweet, thanks man. Basic might work for me since I dont need much, I had considered just winging it without the module. lol Im building the site in d7 already but jumping to 8 has been very tempting!
Thanks again man, perhaps there is an official update coming soon.

armyguyinfl’s picture

Todd,

Does this patch allow the Salesforce API Suite module to work with D8 with full functionality? A D7 working module for D8 for integration to Salesforce without any additional custom module coding?
Relevant URL: https://www.drupal.org/node/2124001 & https://www.drupal.org/files/issues/salesforce-update_to_beta_6-2124001....
Regarding: salesforce-update_to_beta_6-2124001.patch

Anonymous’s picture

It's not perfect - it was only intended to get it up and running from the beta version, so by all means, it probably doesn't do everything. I need to come back around but it will basically allow you to authorize/authenticate with Salesforce and use SalesforceSelectQuery and SalesforceClient. I don't know about any of the other integrations. I'm still in the process of developing my own site using Salesforce methods but it's not live yet, so I'm just kind of making it up as a go.

It shouldn't be taken as official by any means. :)

AaronBauman’s picture

Hey Todd, thanks a ton for the patch.
Obviously our 8.x branch is in dire need of an update, having been untouched for a couple years now.

I went ahead and applied your patch to hopefully inject some life back into this project, but in general I think we should keep this thread at the meta-level. If anyone has more patches to contribute, please post them in new issues so we can keep things sorted.

Now that D8 has been stable for a while, I'm working on getting back to where we were at previously with 8.x.
So many core components and services have changed, that even with recent patches we're still WSOD'ing at this point, so we've got a lot of ground to re-cover.

edwinbsmith’s picture

So, new guy here.

I've made some changes to this module to get it working with the authorization_code workflow (this workflow in Salesforce doesn't use a a refresh token).

How do I find the documentation that lets me know how to contribute to the project, provide patches and all that?

Cameron Tod’s picture

Hi edwinbsmith,

This documentation might help https://www.drupal.org/patch/submit

If you need a hand, I am happy to help you get set up - hit me up on IRC or twitter, username cam8001.

  • aaronbauman committed ab6b1d0 on 8.x-3.x
    Issue #2124001 - update ROADMAP.txt
    Update completed list, MVP targets,...
AaronBauman’s picture

Issue summary: View changes

Updating issue summary with more info from roadmap.txt

This week I'll be working on creating issues for all these items, followed by updates to this issue thread with links to issues (and tags)

AaronBauman’s picture

Issue summary: View changes
Anonymous’s picture

Circling back. I did a run on salesforce_soap and I'll attach a patch this week. It wasn't a big module so I figured I would convert it for use.

AaronBauman’s picture

Issue summary: View changes

Shuffling priorities and updating issue summary to reflect current project status.

AaronBauman’s picture

Issue summary: View changes
gambry’s picture

Hi folk,

I'm new to Salesforce in general. A client asked to integrate the website with Salesforce API. Authentication is done through Username-Password OAuth Authentication Flow, but my understanding is this is not covered by current 3.0 - 3.1 roadmap?

Is it worth to have this integrated? Will you accept a submodule or better having this as a separated contrib?

AaronBauman’s picture

Since version 7.x-3.x this module uses Web Server Oauth, so that user credentials are never captured in Drupal.

I don't think there's anything to be gained by supporting username-password oauth.

AaronBauman’s picture

FYI I'm tagging some issues with "Release blocker"

When the release blocker queue is empty, i'll push an 8.x-3.0 stable