Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Magento 2 ERP Integration Best Practices: Microsoft Dynamics

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

    View full-size slide

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

    View full-size slide

  3. Introductions

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. 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

    View full-size slide

  8. 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

    View full-size slide

  9. 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

    View full-size slide

  10. Page | 11
    © 2017 Mage Titans

    View full-size slide

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

    View full-size slide

  12. 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

    View full-size slide

  13. Integration Architecture

    View full-size slide

  14. 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

    View full-size slide

  15. 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

    View full-size slide

  16. 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

    View full-size slide

  17. 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

    View full-size slide

  18. 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

    View full-size slide

  19. 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

    View full-size slide

  20. 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

    View full-size slide

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

    View full-size slide

  22. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. 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

    View full-size slide

  26. Integration Implementation

    View full-size slide

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

    View full-size slide

  28. 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

    View full-size slide

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

    View full-size slide

  30. 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

    View full-size slide

  31. 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

    View full-size slide

  32. 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

    View full-size slide

  33. 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

    View full-size slide

  34. 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

    View full-size slide

  35. End User Experience

    View full-size slide

  36. 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

    View full-size slide

  37. 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

    View full-size slide

  38. 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

    View full-size slide

  39. Future Improvements

    View full-size slide

  40. 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

    View full-size slide

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

    View full-size slide

  42. 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

    View full-size slide

  43. 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

    View full-size slide

  44. @JoshuaSWarren / Creatuity.com
    Questions?

    View full-size slide