CUSTOMIZACIÓN DEL PROCESO EXPORT GRID

Hoy vamos a ver como personalizar la exportación de los datos de un grid del backoffice en Magento2 a través del ui component. ExportButton
Se da por hecho que el grid se ha creado mediante el ui component y existe el archivo listing.xml
El componente ExportButton es el responsable de exportar los datos contenidos en un grid a un formato específico (csv, xml, entre otros)

Para explicarlo más fácilmente usaremos un módulo que hemos llamado “StockAlert”

La configuración del componente ExportButton con un selectProvider específico, se hace en el tag de configuración listingToolbar del archivo listing.xml
… / app / code / [vendor] / [module] / view / adminhtml / ui_component / [vendor] _ [module] _ [referencia] _ listing.xml

[cc lang="html"]
interactiv4_stockalert_report_listing.interactiv4_stockalert_report_listing.spinner_columns.ids
csv
CSV
interactiv4_stockalert/export/gridToCsv
xml
Excel XML
interactiv4_stockalert/export/gridToXml
[/cc]

Analicemos el código anterior:

Dentro del tag existe un tag que es donde se especifica el selectProvider

[cc lang="html"]
interactiv4_stockalert_report_listing.interactiv4_stockalert_report_listing.spinner_columns.ids
[/cc]

Ahora, en un siguiente tag se indica los controladores donde se personaliza la salida en el formato deseado

[cc lang="html"]
csv
CSV
interactiv4_stockalert/export/gridToCsv
xml
Excel XML
interactiv4_stockalert/export/gridToXml
[/cc]

El tag [cc lang=»html»]interactiv4_stockalert/export/gridToCsv[/cc] hace referencia al controlador, que a su vez, implementará el modelo “ConvertToCsv.php”

El controlador … / app / code / [vendor] / [module] / Controller / Adminhtml / Export / GridToCsv.php

[cc lang="html"]<!--?php &lt;br ?--> declare(strict_types=1);
/**
* @author Interactiv4 Team
* @copyright Copyright (c) Interactiv4 (https://www.interactiv4.com)
*/
namespace Interactiv4\StockAlert\Controller\Adminhtml\Export;
use Interactiv4\StockAlert\Model\Export\ConvertToCsv;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Response\Http\FileFactory;
/**
* Class Render
*/
class GridToCsv extends Action
{
/**
* @var ConvertToCsv
*/
protected $converter;
.
.
.
[/cc]

Y el modelo … / app / code / [vendor] / [module] / Model / Export / ConvertToCsv.php

[cc lang="html"]
<!--?php &lt;br ?--> declare(strict_types=1);
/**
* @author Interactiv4 Team
* @copyright Copyright (c) Interactiv4 (https://www.interactiv4.com)
*/
namespace Interactiv4\StockAlert\Model\Export;
use Magento\Framework\Api\Search\DocumentInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Convert\ExcelFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\Directory\WriteInterface;
use Magento\Ui\Component\MassAction\Filter;
use Magento\Ui\Model\Export\MetadataProvider;
use Magento\Ui\Model\Export\SearchResultIteratorFactory;
/**
* Class ConvertToXls
*/
class ConvertToCsv
{
/**
* @var WriteInterface
*/
protected $directory;
.
.
.
[/cc]

Ahora esta clase (ConvertToCsv.php) ya se puede personalizar e implementar el código que se quiera para que el archivo de exportación tenga el formato deseado.