We've just upgraded a Magento 2.1.9 live website up to development 2.4.1 site. The new site has been fully redeveloped with new theme, extensions and content, and the only thing stopping us from going live is the migration of orders as the development site is now out of date with the orders and customer accounts.
So to make this easy, we purchased the Aitoc Orders Import and Export module.
So we installed it on the new 2.4.1 development site and it seems to work fine, however when we install it on the live 2.1.9 website it fails with the following log:
a:4:
{i:0;s:97:"The requested component ("settings") is not found. Before using, you must add the implementation.";i:1;s:8981:"
#0 /vendor/magento/module-ui/Model/Manager.php(207): Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition->getComponentData('settings')
#1 /vendor/magento/module-ui/Model/Manager.php(279): Magento\Ui\Model\Manager->createRawComponentData('settings', false)
#2 /vendor/magento/module-ui/Model/Manager.php(298): Magento\Ui\Model\Manager->createDataForComponent('settings', Array)
#3 /vendor/magento/module-ui/Model/Manager.php(298): Magento\Ui\Model\Manager->createDataForComponent('action', Array)
#4 /vendor/magento/module-ui/Model/Manager.php(298): Magento\Ui\Model\Manager->createDataForComponent('massaction', Array)
#5 /vendor/magento/module-ui/Model/Manager.php(298): Magento\Ui\Model\Manager->createDataForComponent('listingToolbar', Array)
#6 /vendor/magento/module-ui/Model/Manager.php(265): Magento\Ui\Model\Manager->createDataForComponent('listing', Array)
#7 /vendor/magento/module-ui/Model/Manager.php(166): Magento\Ui\Model\Manager->prepare('sales_order_gri...')
#8 /vendor/magento/framework/View/Element/UiComponentFactory.php(144): Magento\Ui\Model\Manager->prepareData('sales_order_gri...')
#9 /vendor/magento/framework/View/Layout/Generator/UiComponent.php(124): Magento\Framework\View\Element\UiComponentFactory->create('sales_order_gri...', NULL, Array)
#10 /vendor/magento/framework/View/Layout/Generator/UiComponent.php(93): Magento\Framework\View\Layout\Generator\UiComponent->generateComponent(Object(Magento\Framework\View\Layout\Data\Structure), 'sales_order_gri...', Array, Object(Magento\Framework\View\Layout\Interceptor))
#11 /vendor/magento/framework/View/Layout/GeneratorPool.php(86): Magento\Framework\View\Layout\Generator\UiComponent->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#12 /vendor/magento/framework/View/Layout.php(327): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#13 /var/generation/Magento/Framework/View/Layout/Interceptor.php(89): Magento\Framework\View\Layout->generateElements()
#14 /vendor/magento/framework/View/Layout/Builder.php(129): Magento\Framework\View\Layout\Interceptor->generateElements()
#15 /vendor/magento/framework/View/Page/Builder.php(55): Magento\Framework\View\Layout\Builder->generateLayoutBlocks()
#16 /vendor/magento/framework/View/Layout/Builder.php(65): Magento\Framework\View\Page\Builder->generateLayoutBlocks()
#17 /vendor/magento/framework/View/Layout.php(244): Magento\Framework\View\Layout\Builder->build()
#18 /vendor/magento/framework/View/Layout.php(859): Magento\Framework\View\Layout->build()
#19 /var/generation/Magento/Framework/View/Layout/Interceptor.php(414): Magento\Framework\View\Layout->getBlock('menu')
#20 /vendor/magento/module-backend/Model/View/Result/Page.php(59): Magento\Framework\View\Layout\Interceptor->getBlock('menu')
#21 /var/generation/Magento/Backend/Model/View/Result/Page/Interceptor.php(24): Magento\Backend\Model\View\Result\Page->setActiveMenu('Magento_Sales::...')
#22 /vendor/magento/module-sales/Controller/Adminhtml/Order.php(140): Magento\Backend\Model\View\Result\Page\Interceptor->setActiveMenu('Magento_Sales::...')
#23 /vendor/magento/module-sales/Controller/Adminhtml/Order/Index.php(17): Magento\Sales\Controller\Adminhtml\Order->_initAction()
#24 /var/generation/Magento/Sales/Controller/Adminhtml/Order/Index/Interceptor.php(24): Magento\Sales\Controller\Adminhtml\Order\Index->execute()
#25 /vendor/magento/framework/App/Action/Action.php(102): Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor->execute()
#26 /vendor/magento/module-backend/App/AbstractAction.php(226): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#27 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#28 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor->___callParent('dispatch', Array)
#29 /vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Sales\\C...', 'dispatch', Object(Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor), Array, 'adminAuthentica...')
#30 /vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}
(Object(Magento\Framework\App\Request\Http))
#31 /vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#32 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Sales
C...', 'dispatch', Object(Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor), Array, 'adminMassaction...')
#33 /vendor/magento/module-backend/App/Action/Plugin/MassactionKey.php(33): Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#34 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Backend\App\Action\Plugin\MassactionKey->aroundDispatch(Object(Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#35 /var/generation/Magento/Sales/Controller/Adminhtml/Order/Index/Interceptor.php(39): Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor->___callPlugins('dispatch', Array, Array)
#36 /vendor/magento/framework/App/FrontController.php(55): Magento\Sales\Controller\Adminhtml\Order\Index\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#37 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#38 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#39 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento
Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#40 /vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#41 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#42 /var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#43 /vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#44 /vendor/magento/framework/Interception/Interceptor.php(146): Magento\Framework\App\Http->launch()
#45 /var/generation/Magento/Framework/App/Http/Interceptor.php(26): Magento\Framework\App\Http\Interceptor->___callPlugins('launch', Array, Array)
#46 /vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http\Interceptor->launch()
#47 /index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#48
{main}
";s:3:"url";s:109:"/sales/order/index/key/a1234ab123456789123456789abcd1234567890blahblah123456789/";s:11:"script_name";s:10:"/index.php";}
We have contacted the developers (Aitoc technical support), however we have been waiting for 22 days to look into it and they have made no effort to log into the server to resolve it. So I thought I'd seek help here to see if we can diagnose the issue and fix it ourselves.
Alternatively, is there a safer way to update the new development site with the latest orders?
Update: From what I've read, its a compatibility issue with 2.1.x as the developers wrote the plugin for 2.2.x but have not made it backwards compatible (even though they do advertise it as being 2.1.9 compatible). So I came across this: http://blog.tobiasforkel.de/en/2018/09/08/custom-ui-component-and-validation-settings/ and wondered if, the settings array within 'export_page' was the issue.
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<listingToolbar name="listing_top">
<massaction name="listing_massaction">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
<item name="urlPath" xsi:type="string">ordersexportimport/profile/export</item>
<item name="paramName" xsi:type="string">profile_id</item>
</item>
</argument>
<action name="export_page">
<settings>
<type>export_order</type>
<label translate="true">Export Selected Orders</label>
<actions class="Aitoc\OrdersExportImport\Ui\Component\MassAction\Order\Profile\Options"/>
</settings>
</action>
</massaction>
</listingToolbar>
</listing>