Does anyone know how I can overcome this and send the order_id to the tab URL?
After a lot of tries, I couldn't manage to get an order_id to a Admin Grid Dataprovider.
This is the code I have
view/adminhtml/layout/sales_order_view.xml - To add a new tab to order view
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="left"> <referenceBlock name="sales_order_tabs"> <block class="Invoicing\Moloni\Block\Adminhtml\Order\View\Tab\Documents" name="sales_order_documents.grid.container"/> <action method="addTabAfter"> <argument name="name" xsi:type="string">moloni_documents</argument> <argument name="block" xsi:type="string">sales_order_documents.grid.container</argument> <argument name="after" xsi:type="string">order_invoices</argument> </action> </referenceBlock> </referenceContainer> <referenceBlock name="sales_order_documents.grid.container"> <uiComponent name="orders_documents_grid"/> </referenceBlock> </body> </page>
view/adminhtml/ui_components/orders_documents_grid.xml
<?xml version="1.0" encoding="UTF-8"?> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <argument name="data" xsi:type="array"> <item name="js_config" xsi:type="array"> <item name="provider" xsi:type="string">orders_documents_grid.orders_documents_grid_data_source</item> </item> </argument> <settings> <spinner>orders_documents_grid_columns</spinner> <deps> <dep>orders_documents_grid.orders_documents_grid_data_source</dep> </deps> </settings> <dataSource name="orders_documents_grid_data_source" component="Magento_Ui/js/grid/provider"> <settings> <filterUrlParams> <param name="order_id">*</param> </filterUrlParams> <updateUrl path="mui/index/render"/> </settings> <dataProvider class="Invoicing\Moloni\Ui\DataProvider\OrderDocumentsProvider" name="orders_documents_grid_data_source"> <settings> <requestFieldName>id</requestFieldName> <primaryFieldName>entity_id</primaryFieldName> </settings> </dataProvider> </dataSource> <columns name="orders_documents_grid_columns"> <column name="entity_name"> <settings> <filter>text</filter> <label translate="true">Nome</label> </settings> </column> <column name="entity_vat"> <settings> <filter>text</filter> <label translate="true">Contribuinte</label> </settings> </column> </columns> </listing>
Ui/DataProvider/OrderDocumentsProvider.php
<?php /** * Created by PhpStorm. * User: Nuno * Date: 30/07/2019 * Time: 16:20 */ namespace Invoicing\Moloni\Ui\DataProvider; use Invoicing\Moloni\Libraries\MoloniLibrary\Moloni; use Magento\Ui\DataProvider\AbstractDataProvider; use Magento\Framework\App\Request\Http; use Magento\Sales\Api\OrderRepositoryInterface; class OrderDocumentsProvider extends AbstractDataProvider { /** * @var \Magento\Ui\DataProvider\AddFieldToCollectionInterface[] */ protected $addFieldStrategies; /** * @var \Magento\Ui\DataProvider\AddFilterToCollectionInterface[] */ protected $addFilterStrategies; /** * @var Http */ protected $request; /** * @var OrderRepositoryInterface */ protected $orderRepository; /** * @var Moloni */ private $moloni; /** * Construct * * @param string $name * @param string $primaryFieldName * @param string $requestFieldName * @param Http $request * @param array $meta * @param array $data */ public function __construct( $name, $primaryFieldName, $requestFieldName, Http $request, OrderRepositoryInterface $orderRepository, Moloni $moloni, array $meta = [], array $data = [] ) { $this->request = $request; $this->moloni = $moloni; $this->orderRepository = $orderRepository; $this->data = $data; parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); } /** * @return \Magento\Sales\Api\Data\OrderInterface */ public function getOrder() { $orderId = $this->request->getParam("order_id"); return $this->orderRepository->get($orderId); } /*** * @return array */ public function getData() { $documentsList = [ [ 'entity_name' => print_r($this->request->getParams(), true), 'entity_vat' => print_r($this->data, true) ] ]; return [ 'totalRecords' => count($documentsList), 'items' => $documentsList, ]; } public function setLimit($offset, $size) { } public function addOrder($field, $direction) { } public function addFilter(\Magento\Framework\Api\Filter $filter) { } }
Whenever I try to open the sales order view, all other tabs load the url like this:
https://magento.retronwarz.com/admin/mui/index/render/key/0d7cba1af800b031dce791267facdc34b5a062f3932738f45e74225339a629e8/order_id/8/?namespace=sales_order_view_invoice_grid
But, when I try to load my tab, the param order_id is not sent, so it looks like:
https://magento.retronwarz.com/admin/mui/index/render/key/0d7cba1af800b031dce791267facdc34b5a062f3932738f45e74225339a629e8/?namespace=orders_documents_grid&isAjax=true
Does anyone know how I can overcome this and send the order_id to the tab URL?