Mostly answering for my previous company because my current company is still in the planning stages.
1. What outside/3rd party systems do you interface/integrate to?
Numerous e-commerce platforms including Magento, Shopify, Commerce Cloud (Salesforce), and a couple others. We had several brands and several websites, and kept adding more sites and switching platforms.
Third party software (from Kodak) to calculate efficient nesting of orders onto jobs. The nature of printing is that if you have 10 orders for 1000 pieces, you do not make 10 plates and run 1000 sheets each. You make 1 plate that has all 10 orders on it and run 1000 sheets.
Intranet web site where the marketing department could drop Excel files containing contacts from trade shows. This would automatically create customers and orders for product samples.
Command line tools to work around bugs in Epicor’s EDI file formats. (I think one of the bugs may be fixed now; not sure about the other.)
2. What is your methodology for such integration (BPM, Epicor Functions, Custom Code, Via Rest, Etc)
I didn’t have access to Epicor Functions at the time. The web order integration took the form of a Windows service. It would periodically pull new orders from all the websites and put them in Epicor using the v1 REST API, including finding or creating customers and creating deposits. I wrote a client generator for rapid development with Epicor’s REST API.
The job nesting software was driven by BPMs on Order Entry. When an order was marked Ready To Process, it would drop an XML file in a hot folder. When a job was computed and approved, the nesting software would drop another XML file in another hot folder. Another Windows service would pick it up and create a job in Epicor. There were other BPMs that would limit the ways orders could be changed after they were exported.
3. What were your challenges?
Discovering all the steps involved in creating orders in Epicor was more tedious than challenging. I created trace logs of everything that happens when an order is created in the UI, and followed hunches about which calls are important and which are just UI fluff.
Creating deposits was particularly challenging because it uses BOs that are exposed in the REST API but not listed on the REST help page. I learned their names from someone on this forum. I have no idea how they found out. It took a lot of experimentation to figure out how to use that endpoint.
Epicor’s advice is to import all web orders under a single Web Customer. We wanted to create customers in Epicor for every web customer, and link customers from different sites to the same Epicor customer by email address. So I set up a UD table that was keyed by Site, Platform (in case it changed), and External Customer ID. This created a many-to-one relationship between website customers and Epicor customers. If there was any ambiguity about the Epicor customer (multiple customers with the same email address, etc.) the integration would email the CSRs with instructions to disambiguate them. I learned there’s a whole industry around cleaning up customer databases, and I can see why…