Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Page | 2 © 2017 Mage Titans Magento 2 ERP Integration Best Practices: Microsoft Dynamics

Slide 3

Slide 3 text

Page | 3 © 2017 Mage Titans Joshua Warren CEO, Creatuity @JoshuaSWarren / #MageTitansUSA

Slide 4

Slide 4 text

Introductions

Slide 5

Slide 5 text

Page | 5 © 2017 Mage Titans • Family of ERP systems • Dynamics AX • Dynamics GP • Dynamics NAV • Dynamics SL • Dynamics C5 Microsoft Dynamics

Slide 6

Slide 6 text

Page | 6 © 2017 Mage Titans • Manages finance, manufacturing, CRM, supply chain and inventory for medium-sized enterprises Microsoft Dynamics NAV

Slide 7

Slide 7 text

Page | 7 © 2017 Mage Titans • Needs no introduction Magento Commerce

Slide 8

Slide 8 text

Page | 8 © 2017 Mage Titans • Business processes such as fulfillment and inventory management become highly automated • Employees don’t waste time manually entering data • Focus on delivering unique value – not just doing the things a computer could do Magento Commerce + Dynamics NAV

Slide 9

Slide 9 text

Page | 9 © 2017 Mage Titans • Stable, scalable integration • Simple to maintain, low cost of ownership – no one wants to spend their budget on ERP integrations • Easy to support – no one wants to answer tickets about an ERP integration Project Goals

Slide 10

Slide 10 text

Page | 10 © 2017 Mage Titans • Import basic product & inventory data from Dynamics (no PIM) • Export customers and orders from Magento into Dynamics • Import shipment data from Dynamics • Don’t break the Dynamics-powered POS deployed in 30+ stores – this is a real-world deployment, not a theoretical project Business Goals

Slide 11

Slide 11 text

Page | 11 © 2017 Mage Titans

Slide 12

Slide 12 text

Page | 12 © 2017 Mage Titans • Eliminate dependence on third-party encrypted ERP connectors A Corporate Mission

Slide 13

Slide 13 text

Page | 13 © 2017 Mage Titans • Much of this integration was designed and written by an excellent long-time member of our development team, Scott A Special Thanks

Slide 14

Slide 14 text

Integration Architecture

Slide 15

Slide 15 text

Page | 15 © 2017 Mage Titans • Base module for all of our integrations • Provides a common set of logging, reporting and UI components • Ensures all of our integrations have a merchant-friendly admin management page Base Module

Slide 16

Slide 16 text

Page | 16 © 2017 Mage Titans • RabbitMQ, scalable messaging queue • Magento 2 has native support for communicating with Rabbit • Rabbit libraries for PHP, Java, .NET, Python, Javascript, Ruby & Go so ERP developers can use the language of their choice RabbitMQ

Slide 17

Slide 17 text

Page | 17 © 2017 Mage Titans • Creatuity writes the module necessary to publish and consume Rabbit messages in Magento • ERP integrator or client’s in-house ERP team writes the code to publish and consume Rabbit messages for the ERP RabbitMQ – In General

Slide 18

Slide 18 text

Page | 18 © 2017 Mage Titans • Creatuity also supports the client’s Microsoft Dynamics instance, so we’re writing both ends of the connection • Continuing to develop best practices around where to host the ERP-specific code in this case – another Magento module or a separate script RabbitMQ – Microsoft Dynamics

Slide 19

Slide 19 text

Page | 19 © 2017 Mage Titans • Does the ERP have an existing PHP library? • If not, what language is the ERP’s library written in? RabbitMQ – Architecture Questions

Slide 20

Slide 20 text

Page | 20 © 2017 Mage Titans • Best case – ERP’s library is written in PHP, merchant is using Magento Commerce Cloud • Worst case – client’s ERP utilizes an antiquated language and is hosted behind a strict firewall RabbitMQ – Architecture Questions

Slide 21

Slide 21 text

Page | 21 © 2017 Mage Titans • Sometimes RabbitMQ is more than a smaller site needs • “Cron mode” enables direct communication from Magento to Dynamics using Magento’s cron system for scheduled tasks • Works well in this case as we are responsible for both the Magento code and the ERP integration code Rabbit Alternative - Cron Mode

Slide 22

Slide 22 text

Page | 22 © 2017 Mage Titans • Task Layer • Service Layer • Data Layer • Connection Layer Layers

Slide 23

Slide 23 text

Page | 23 © 2017 Mage Titans • Product update, shipment update and order update are each tasks • Easily add new tasks in the future • Cron and RabbitMQ level tasks occur here Task Layer

Slide 24

Slide 24 text

Page | 24 © 2017 Mage Titans • Used to perform requests to Microsoft Dynamics • Executes and parses requests Service Layer

Slide 25

Slide 25 text

Page | 25 © 2017 Mage Titans • Contains all logic related to processing both Magento and Microsoft Dynamics data Data Layer

Slide 26

Slide 26 text

Page | 26 © 2017 Mage Titans • Performs and manages the actual connection to Microsoft Dynamics • Encapsulates all connection logic so remaining code doesn’t care how the connection works or if it changes Connection Layer

Slide 27

Slide 27 text

Integration Implementation

Slide 28

Slide 28 text

Page | 28 © 2017 Mage Titans • Extract data from a source • Process, map and transform that data • Deliver it to the destination Basic Concepts

Slide 29

Slide 29 text

Page | 29 © 2017 Mage Titans • Designed as a single Magento module • Module is broken down into 10 main models to implement our layers • Some of the models then break down into smaller components Structure

Slide 30

Slide 30 text

Page | 30 © 2017 Mage Titans • Keeps code clean & easy to maintain Structure

Slide 31

Slide 31 text

Page | 31 © 2017 Mage Titans • Manager that manages the overall data transformation process • Extractor pulls data from source, uses a Mapper to map fields to a standard format • Transform class performs basic transformations Data Layer

Slide 32

Slide 32 text

Page | 32 © 2017 Mage Titans • Processor class processes changes in Magento that need to happen based on data from the ERP • Allows us to utilize core Magento functions for making these changes • DI & architecture of Magento 2 makes this simple • For instance – we use the core StockRegistryInterface API Data Layer - Processor

Slide 33

Slide 33 text

Page | 33 © 2017 Mage Titans $stockItem = $this->stockRegistry->getStockItem($productData->getId()); $stockItem ->setQty($intermediateData->getQty()) ->setIsInStock($intermediateData->getIsInStock()); $this->stockRegistry->updateStockItemBySku($productData->getSku(), $stockItem); Updating Magento Stocks from ERP

Slide 34

Slide 34 text

Page | 34 © 2017 Mage Titans • Microsoft Dynamics NAV can be customized – field names can be changed • Don’t hard-code field names • Separate out implementation-specific code from platform- specific code Lessons Learned

Slide 35

Slide 35 text

Page | 35 © 2017 Mage Titans • 150 hours of development work and QA • 10 hours of documentation • Deploying this integration for future Microsoft Dynamics clients could be a 5-10 hour process Implementation Effort

Slide 36

Slide 36 text

End User Experience

Slide 37

Slide 37 text

Page | 37 © 2017 Mage Titans • Customers on the site aren’t aware the ERP exists – which is our goal • Their orders are fulfilled quickly and they receive a tracking number soon after placing their order • If the customer experience is impacted by your ERP, there’s room to improve that integration Customer-Facing Experience

Slide 38

Slide 38 text

Page | 38 © 2017 Mage Titans • Warehouse staff fulfill orders out of Microsoft Dynamics as they always have – no need to login to a separate system • Customer service representatives can view up-to-date product inventory and order status information in Magento, no need to login to Dynamics • If a sync encounters an issue, detailed information is available in the Magento admin panel for easy troubleshooting and resolution Admin User Experience

Slide 39

Slide 39 text

Page | 39 © 2017 Mage Titans • Previous off-the-shelf connector required a developer to SSH to the server any time the sync failed. • Encrypted code made debugging impossible • No stable base for feature enhancements Developer Experience

Slide 40

Slide 40 text

Future Improvements

Slide 41

Slide 41 text

Page | 41 © 2017 Mage Titans • Refactoring code to allow other members of the Microsoft Dynamics family to easily integrate with Magento • Developing new adapters based on other integration methods (i.e., CSV files) • Expanding to connect with other ERPs as well Adapters

Slide 42

Slide 42 text

Page | 42 © 2017 Mage Titans • One consistent system for all integrations, lowering maintenance costs and time to implement • Open source? Collaboration? Vision

Slide 43

Slide 43 text

Results

Slide 44

Slide 44 text

Page | 44 © 2017 Mage Titans • Restocked products go live on Magento much more quickly • Errors importing one order no longer stops all other orders from importing • It just works – no longer have to think about the ERP integration Faster, More Reliable Syncing

Slide 45

Slide 45 text

Page | 45 © 2017 Mage Titans • This integration would’ve taken substantially longer if not for the design patterns and architecture of Magento 2 • Code is cleaner, easier to maintain and more robust thanks to following the Magento 2 architecture Impact of Magento 2

Slide 46

Slide 46 text

@JoshuaSWarren / Creatuity.com Questions?