Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Magento 2 ERP Integration Best Practices: Micro...

Joshua Warren
September 15, 2017

Magento 2 ERP Integration Best Practices: Microsoft Dynamics

Magento 2 ERP Integration Best Practices: Microsoft Dynamics. Presented at MageTitans USA 2017.

Joshua Warren

September 15, 2017
Tweet

More Decks by Joshua Warren

Other Decks in Technology

Transcript

  1. Page | 2 © 2017 Mage Titans Magento 2 ERP

    Integration Best Practices: Microsoft Dynamics
  2. Page | 3 © 2017 Mage Titans Joshua Warren CEO,

    Creatuity @JoshuaSWarren / #MageTitansUSA
  3. Page | 5 © 2017 Mage Titans • Family of

    ERP systems • Dynamics AX • Dynamics GP • Dynamics NAV • Dynamics SL • Dynamics C5 Microsoft Dynamics
  4. Page | 6 © 2017 Mage Titans • Manages finance,

    manufacturing, CRM, supply chain and inventory for medium-sized enterprises Microsoft Dynamics NAV
  5. Page | 7 © 2017 Mage Titans • Needs no

    introduction Magento Commerce
  6. 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
  7. 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
  8. 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
  9. Page | 12 © 2017 Mage Titans • Eliminate dependence

    on third-party encrypted ERP connectors A Corporate Mission
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. Page | 22 © 2017 Mage Titans • Task Layer

    • Service Layer • Data Layer • Connection Layer Layers
  19. 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
  20. Page | 24 © 2017 Mage Titans • Used to

    perform requests to Microsoft Dynamics • Executes and parses requests Service Layer
  21. Page | 25 © 2017 Mage Titans • Contains all

    logic related to processing both Magento and Microsoft Dynamics data Data Layer
  22. 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
  23. Page | 28 © 2017 Mage Titans • Extract data

    from a source • Process, map and transform that data • Deliver it to the destination Basic Concepts
  24. 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
  25. Page | 30 © 2017 Mage Titans • Keeps code

    clean & easy to maintain Structure
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. Page | 42 © 2017 Mage Titans • One consistent

    system for all integrations, lowering maintenance costs and time to implement • Open source? Collaboration? Vision
  36. 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
  37. 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