Upload
joshua-warren
View
202
Download
4
Embed Size (px)
Citation preview
Page | 2© 2017 Mage Titans
Magento 2 ERP Integration Best Practices: Microsoft Dynamics
Page | 3© 2017 Mage Titans
Joshua WarrenCEO, Creatuity@JoshuaSWarren / #MageTitansUSA
Introductions
Page | 5© 2017 Mage Titans
• Family of ERP systems
• Dynamics AX• Dynamics GP• Dynamics NAV• Dynamics SL• Dynamics C5
Microsoft Dynamics
Page | 6© 2017 Mage Titans
• Manages finance, manufacturing, CRM, supply chain and inventory for medium-sized enterprises
Microsoft Dynamics NAV
Page | 7© 2017 Mage Titans
• Needs no introduction
Magento Commerce
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
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
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
Page | 11© 2017 Mage Titans
Page | 12© 2017 Mage Titans
• Eliminate dependence on third-party encrypted ERP connectors
A Corporate Mission
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
Integration Architecture
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
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
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
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 Magentomodule or a separate script
RabbitMQ – Microsoft Dynamics
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
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
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
Page | 22© 2017 Mage Titans
• Task Layer
• Service Layer
• Data Layer
• Connection Layer
Layers
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
Page | 24© 2017 Mage Titans
• Used to perform requests to Microsoft Dynamics
• Executes and parses requests
Service Layer
Page | 25© 2017 Mage Titans
• Contains all logic related to processing both Magento and Microsoft Dynamics data
Data Layer
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
Integration Implementation
Page | 28© 2017 Mage Titans
• Extract data from a source
• Process, map and transform that data
• Deliver it to the destination
Basic Concepts
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
Page | 30© 2017 Mage Titans
• Keeps code clean & easy to maintain
Structure
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
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
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
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
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
End User Experience
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
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
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
Future Improvements
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
Page | 42© 2017 Mage Titans
• One consistent system for all integrations, lowering maintenance costs and time to implement
• Open source? Collaboration?
Vision
Results
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
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
@JoshuaSWarren / Creatuity.com
Questions?