A maneira mais elegante seria usar o mesmo código que habilita o modo plano ao salvar a configuração. Pode ser encontrado em Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode
:
public function processValue()
{
if ((bool)$this->getValue() != (bool)$this->getOldValue()) {
if ((bool)$this->getValue()) {
$this->indexerState->loadByIndexer(\Magento\Catalog\Model\Indexer\Product\Flat\Processor::INDEXER_ID);
$this->indexerState->setStatus(\Magento\Framework\Indexer\StateInterface::STATUS_INVALID);
$this->indexerState->save();
} else {
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
}
}
}
Então, eu tenho certeza que você poderia fazer algo assim:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
Onde $this->_productFlatIndexerProcessor
é uma instância de \Magento\Catalog\Model\Indexer\Product\Flat\Processor
.
Alternativa possível
No entanto, esse método não salva a configuração, portanto, quando o sistema verifica se o flat está ativado por meio da configuração, ele ainda retorna verdadeiro.
Uma alternativa possível (a ser testada) seria usar um plugin no isFlatEnabled
método deMagento\Catalog\Model\Indexer\Product\Flat\State
(o método é realmente definido na Magento\Catalog\Model\Indexer\AbstractFlatState
classe).
Com base no que você deseja alcançar, você pode configurar um plug-in after para forçar esse método a retornar false sob certas condições.