La forma más elegante sería usar el mismo código que el código que habilita el modo plano al guardar la configuración. Se puede encontrar en 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);
}
}
}
Así que estoy bastante seguro de que podrías hacer algo así:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
¿Dónde $this->_productFlatIndexerProcessorestá una instancia de \Magento\Catalog\Model\Indexer\Product\Flat\Processor.
Alternativa posible
Sin embargo, ese método no guarda la configuración, por lo que cuando el sistema verifica si Flat está habilitado a través de la configuración, aún devuelve verdadero.
Una posible alternativa (para ser probado) sería usar un complemento en el isFlatEnabledmétodo deMagento\Catalog\Model\Indexer\Product\Flat\State (el método está realmente definido en la Magento\Catalog\Model\Indexer\AbstractFlatStateclase).
Según lo que desee lograr, puede configurar un complemento posterior para forzar que el método devuelva falso bajo ciertas condiciones.