Cursos Magento

Integração ativa no Magento 2 – Estudo de caso (Estoque)

,

Atualizado em 01 de março de 2022

Não tem como pensar em e-commerce sem pensar em integração. E o Magento 2 é o melhor da sala quando se fala no assunto.

Podemos consumir as APIs REST, SOAP, GraphQL tendo o Magento como passivo na integração, ou de forma ativa com Plugins e Observers dentro de módulos Magento.

No minicurso de APIs REST por exemplo, mostramos mais de 650 exemplos de uso das API’s do Magento. Alguns exemplos você pode conferir neste outro artigo.

Quando falamos de integração ativa, ou seja, aquelas que o Magento realiza alguma ação quando determinado evento ocorre, fazemos uso de módulos personalizados para nossa necessidade.

Alternativamente, você pode usar um módulo de Webhooks – mencionado no nosso grupo de alunos – como Webhooks for Magento 2 da Mageplaza (gratuito). Ele chamará um serviço/webservice externo toda vez que determinado evento for chamado, facilitando boa parte das integrações.

Observers – uma má escolha para integrações

No Magento 1.x era muito comum recorrermos aos observers para realizar operações ativas e integrações.

No entanto, quando falamos de usar observers no Magento 2 para realizar integrações a situação muda completamente.

Enquanto o Magento 1.x era muito orientado a eventos, o Magento 2 deixou isso um pouco de lado, já que temos um novo componente: o Plugin.

Plugins e Repositórios – Integração ativa

De forma resumida, Plugins nos permitem modificar “praticamente” qualquer método de qualquer classe, disparando eventos antes, depois ou “em volta” de sua execução. Isso é explicado em detalhes e com exemplos no Magento 2: O Curso.

Outro componente bem interessante são os Repositórios. Eles são chamados quando criamos, alteramos, lemos ou apagamos qualquer registro em alguma entidade do Magento 2.

E daí?

Sendo assim, é razoável afirmar que, se quisermos realmente disparar uma ação quando – por exemplo – um cliente é criado o ideal é criar um Plugin no repositório que cuida de clientes, no caso o CustomerRepository.

Desta forma, mesmo que nosso cliente seja criado via API, admin, ou mesmo na tela de cadastro de cliente, nosso evento será disparado.

Integração de Estoque ativa – exemplos

No Magento 2: O Curso a gente viu como ler um serviço externo e atualizar milhares de itens no estoque em poucos segundos usando Iterators no Magento.

Recentemente, no grupo de alunos do mesmo curso, uma aluna trouxe uma necessidade específica: disparar um evento quando determinado produto sofresse alteração de estoque.

Dúvida publicada no grupo exclusivo de alunos do Magenteiro

Ao tentar fazer isso com uso de observers percebemos que não seria possível, pois nem sempre o evento era disparado. Ou seja, nossa integração não funcionaria.

No entanto, com a criação de um Plugin, tivemos um resultado melhor.

No caso, criei um plugin para ser executado antes do método \Magento\InventoryApi\Api\SourceItemsSaveInterface::execute. Veja como ficou:

<?php

namespace Magenteiro\StockWatch\Plugin\Api;

use Magento\Framework\Logger\Monolog;

class SourceItemsSaveInterfacePlugin
{
    /**
     * @var Monolog
     */
    private Monolog $logger;

    public function __construct(Monolog $logger)
    {
        $this->logger = $logger;
    }

    public function beforeExecute(\Magento\InventoryApi\Api\SourceItemsSaveInterface $subject, array $sourceItems)
    {
        foreach ($sourceItems as $item) {
            $newQty = $item->getQuantity();
            $this->logger->debug('PRODUTO ALTERADO', [$item->getSku(), $newQty]);
        }
    }
}

As alterações de estoque agora são gravadas no var/log/debug.log do Magento. Você pode filtrar com o comando tail -f var/log/debug.log | grep "PRODUTO ALTERADO" enquanto realiza uma alteração de estoque e ver se funcionou pra você. 🙂

Se preferir, faça download do módulo completo preenchendo os dados abaixo:

Conclusões

  1. Quem se inscreve em cursos como este tem acesso a um grupo exclusivo de Magenteiros comprometidos com o sucesso e sempre dispostos a ajudar.
  2. O uso de plugins aplicados à classes de repositórios como CustomerRepository, OrderRepositoryInterface, ou à interfaces de APIs são extremamente úteis para garantir que determinado evento seja disparado antes ou após determinada alteração da entidade envolvida.
  3. Tome cuidado ao realizar regras complexas e/ou que envolvam webservices de terceiros em suas integrações. Isto pode afetar a performance de sua loja de forma significativa e até torná-la inoperante em casos de falhas não tratadas.

Espero que tenha gostado.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/integracao-ativa-no-magento-2-estudo-de-caso-estoque/"]