Integration Ideas

I am about to create a new integration with a web commerce site (Drupal 7 in this case, but I am talking generically). For this discussion, let’s assume this will be the latest version of Epicor (10.2.600.X).
There are many ways to accomplish this and I was wondering if anyone had some feedback of past attempts. I would assume that both systems can push data out immediately. Here are a few ideas:

  1. Since both sides of the integration can send and receive REST calls, this is one option, but it assumes 100% uptime.
  2. I could create/use a middleware package.
  3. I could write files and let the other system grab them on a schedule (like EDI, for example).
  4. I could use CDC on both sides (Drupal uses MariaDB, but not all systems would).
  5. Epicor could push/pull directly to the other DB on a schedule.

Thoughts on the above or any other things I should consider?

1 Like

I am finalizing a middle layer web API to handle the brokering of calls between ERP and the web commerce site.
I figured this is better for flexibility in hosting, session management, endpoint management, and ease of use consuming Epicor services like BAQ vs. Functions, etc.
Not sure that’s super illuminating but wanted to share if it is helpful

1 Like

What made you choose that route over others?

We built out direct REST integration from the commerce site to Epicor that involved a ton of messy code. It works fine, but is entirely unsustainable from an extendibility and testing standpoint. Raw Epicor REST involves too much heavy datasets that are too confusing for your average (or even above average) web dev not familiar with Epicor.
This project is to mitigate that and provide a bridge API to fit between the two systems. It provides an easy way to manage endpoints as well as the session/license type consumed. The web dev can then focus on what they are good at and I can focus on what I am good at, which is the Epicor and API side.
This web API (.NET Core) is also portable and can be hosted either internally or externally assuming a correct network config.
I also wanted this API to be well documented and have found this to be a good way to do that vs. 3 different tools involved in the total integration. The consumption of all data and services will all pass through this API.


I know it’s not like me to have an opinion on cloudy things… :roll_eyes:

@Aaron_Moreng is right. Using the Raw REST functions is too chatty. EFx (Functions) can really reduce the chatter and insulate the web store from Epicor implementation details. It also gives you some flexibility to plug into other store fronts - like Amazon, etc. if required later.

And I like the middle layer idea too. I myself would lean toward using a queueing service instead of writing my own. If I’m selling off the shelf items, I would have an update routine to populate the SKUs by writing them to a queue and having a trigger update a datastore (MariaDB. MySQL, whatever) in the cloud close to the web store. If the Web Store needed live information, a request would be put on the queue and the queue would try to resolve the request with a REST call to Epicor, if the request timed-out (Epicor down or unreachable) then I would use the datastore as a cache to fulfill the request if possible. I would probably use CDC on the Epicor side to send messages (order confirmation, shipment status, available inventory on-hand) to the queue to update the datastore. Both Amazon and Azure have reliable queueing services and can host MariaDB, MySql, etc. and both have triggers for sending emails as needed. They also scale if you need to. I know with Azure API management, you can also get rate limiting, extra security, and Swagger page for your API.


I’d love to know more about CDC in Epicor, do you use it? I want to replace my custom webhook integration (which is a combo of writing events to a UD table via BPMs and then consuming those messages) and the new native CDC functionality

I have not. We’re still on .500 and I’m not sure how to get subscribers loaded or if this is a closed ecosystem for Epicor use only. :man_shrugging: But worse case, you’d be able to use your BPMs…