Weitere ähnliche Inhalte
Ähnlich wie Magento 2 ERP Integration Best Practices: Microsoft Dynamics (20)
Mehr von Joshua Warren (20)
Kürzlich hochgeladen (20)
Magento 2 ERP Integration Best Practices: Microsoft Dynamics
- 2. Page | 2© 2017 Mage Titans
Magento 2 ERP Integration Best Practices:
Microsoft Dynamics
- 3. Page | 3© 2017 Mage Titans
Joshua Warren
CEO, Creatuity
@JoshuaSWarren / #MageTitansUSA
- 5. Page | 5© 2017 Mage Titans
• Family of ERP systems
• Dynamics AX
• Dynamics GP
• Dynamics NAV
• Dynamics SL
• Dynamics C5
Microsoft Dynamics
- 6. Page | 6© 2017 Mage Titans
• Manages finance, manufacturing, CRM, supply chain and inventory for
medium-sized enterprises
Microsoft Dynamics NAV
- 7. Page | 7© 2017 Mage Titans
• Needs no introduction
Magento Commerce
- 8. 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
- 9. 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
- 10. 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
- 12. Page | 12© 2017 Mage Titans
• Eliminate dependence on third-party encrypted ERP connectors
A Corporate Mission
- 13. 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
- 15. 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
- 16. 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
- 17. 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
- 18. 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
- 19. 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
- 20. 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
- 21. 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
- 22. Page | 22© 2017 Mage Titans
• Task Layer
• Service Layer
• Data Layer
• Connection Layer
Layers
- 23. 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
- 24. Page | 24© 2017 Mage Titans
• Used to perform requests to Microsoft Dynamics
• Executes and parses requests
Service Layer
- 25. Page | 25© 2017 Mage Titans
• Contains all logic related to processing both Magento and
Microsoft Dynamics data
Data Layer
- 26. 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
- 28. Page | 28© 2017 Mage Titans
• Extract data from a source
• Process, map and transform that data
• Deliver it to the destination
Basic Concepts
- 29. 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
- 30. Page | 30© 2017 Mage Titans
• Keeps code clean & easy to maintain
Structure
- 31. 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
- 32. 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
- 33. 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
- 34. 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
- 35. 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
- 37. 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
- 38. 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
- 39. 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
- 41. 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
- 42. Page | 42© 2017 Mage Titans
• One consistent system for all integrations, lowering
maintenance costs and time to implement
• Open source? Collaboration?
Vision
- 44. 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
- 45. 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