Overview

M2E Pro allows observing data changes triggered by various Magento Core Models. However, very frequently Magento Products, Categories, Attributes, etc. are updated without the usage of Magento Core Standard Functionality (Magento Core Models), so M2E Pro may not detect these changes.

M2E Pro may not detect changes if:

  • Data is manipulated via direct SQL requests (Direct SQL injections).
  • Changes made by side models of a side module.
  • Changes made through Magento API.
  • Any other approach that is not using a Magento Core Functionality.

If data in your Magento system gets updated by any of the above-described methods, there is a requirement to notify M2E Pro explicitly. There are 2 options to do that:

  1. Object method - uses all variations of M2E Pro (slower).

  2. Structural model - only tracks data changes in existing Magento Products (fast).

Models can be found in your Magento File system: app/code/Ess/M2ePro/PublicServices.

Object method

Object method notifies M2E Pro about all Magento Product changes and facilities:

  1. automated addition/removal of products from M2E Pro Listings (Auto Add/Remove Rules);

  2. synchronization (List, Relist, Stop and all available options of Revise Rules);

  3. tracking of changes in all attributes used in Magento products settings.

Usage of Object Model(sample):

// $this->_objectManager instance of \Magento\Framework\ObjectManagerInterface

$model = $this->_objectManager->create(\Ess\M2ePro\PublicServices\Product\ObjectChange::class);

// you have a product ID for observing

$model->observeProduct(561);

// you have '\Magento\Catalog\Model\Product' object for observing

$product = $this->productFactory->create();

$product->load(561);

$model->observeProduct($product);

// make changes for these products by direct sql

$model->applyChanges();
CODE

The snippet above demonstrates the creation of an M2E Pro Object Model. Then 2 products are registered and changes to these products are observed in 2 different ways. Once products have been registered, data for these products can be manipulated using SQL injections or any other method.

After data is changed, the method applyChanges() must be called. While method applyChanges() is running, M2E Pro will automatically observe all the changes that have originated outside of Magento Core Models.

Recommendation

For multiple Magento product data change:

  1. create M2E Pro Object Model

  2. register in products to be updated Products

  3. apply changes

  4. trigger method applyChanges()

Important note

It is not recommended to create M2E Pro Pro Object models for each product individually.

Note

The Object Method is not suitable for a large number of product changes (i.e. in 10.000’s) because Object Method is very resource-consuming. It observes all automatic features of M2E Pro and slows down your code execution making import/update tools (if any) to work at unsatisfactory speed.

Structural model

Structural Model notifies M2E Pro about changes made to a particular attribute/option (only price, quantity, status) of a Magento Product. This model is different from the Object method:

  • Object Method catches changes from the moment of registration to the moment of execution.

  • Structural Method requires only notification confirming changes of a particular product data.

Note

Structural Method triggers only the following automatic features: List, Relist, Stop, Price/Quantity Revise Rules of Synchronization Policy.

Usage of the Structural Model (sample):

// $this->_objectManager instance of \Magento\Framework\ObjectManagerInterface

$model = $this->_objectManager->create(\Ess\M2ePro\PublicServices\Product\SqlChange::class);

// notify M2E Pro about some change of product with ID 17

$model->markProductChanged(17);

// make price change of product with ID 18 and then notify M2E Pro

$model->markPriceWasChanged(18);

// make QTY change of product with ID 19 and then notify M2E Pro

$model->markQtyWasChanged(19);

// make status change of product with ID 20 and then notify M2E Pro

$model->markStatusWasChanged(20);

// make attribute 'custom_attribute_code' value change from 'old' to 'new' of product with ID 21

// in store with ID 1 and then notify M2E Pro

$model->markProductAttributeChanged(21, 'custom_attribute_code', 1, 'old', 'new');

$model->applyChanges();
CODE

The snippet above demonstrates the usage of an M2E Pro Structural Model with respect to Price, QTY, Status changes.


Recommendation

M2E Pro Structural Model usage:

  1. create an instance of M2E Pro Structural model

  2. make changes to Magento Products data (i.e. direct SQL requests)

  3. reflect these changes in the model

  4. trigger method applyChanges() of the structural model

Important note

It is not recommended to create M2E Pro Pro Structural models for each product individually.

Note

Always utilize the Structural model for a high number of Magento products’ changes. This method works fast (vs Object method) and not resource-consuming. We do not recommend using this method if your system is making use of all automatic features of M2E Pro.