magento - Magento 2 将自定义字段添加到销售订单导出 csv 问题
问题描述
我在销售订单网格中添加了一个跟踪号列。它在销售订单网格中显示良好。但是,当我通过 csv 导出数据时,发生了以下错误。
您不能多次定义相关名称“sst”
我已经实施了以下步骤。
将自定义列添加到 sales_order_grid.xml
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<columns name="sales_order_columns">
<column name="track_number">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Tracking Number
</item>
</item>
</argument>
</column>
</columns>
</listing>
并通过 di.xml 文件中的插件覆盖sales_order_additional_columns函数
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<plugin name="sales_order_additional_columns" type="Vendor\ModuleName\Plugins\AddColumnsSalesOrderGridCollection" sortOrder="100" disabled="false" />
</type>
</config>
覆盖销售订单网格的集合。
<?php
namespace Vendor\Modulename\Plugins;
use Magento\Framework\Message\ManagerInterface as MessageManager;
use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as SalesOrderGridCollection;
class AddColumnsSalesOrderGridCollection
{
private $messageManager;
private $collection;
public function __construct(MessageManager $messageManager,
SalesOrderGridCollection $collection
) {
$this->messageManager = $messageManager;
$this->collection = $collection;
}
public function aroundGetReport(
\Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory $subject,
\Closure $proceed,
$requestName
) {
$result = $proceed($requestName);
if ($requestName == 'sales_order_grid_data_source') {
if ($result instanceof $this->collection
) {
$select = $this->collection->getSelect();
$select->join(
["sst" => "sales_shipment_track"],
'main_table.entity_id = sst.entity_id',
'sst.track_number'
)
->distinct();
}
}
return $this->collection;
}
}
解决方案
join 在导出过程中发生了两次,为避免它,请在注册表中添加检查:
use Magento\Framework\Message\ManagerInterface as MessageManager;
use Magento\Framework\Registry;
use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as SalesOrderGridCollection;
class AddColumnsSalesOrderGridCollection
{
private $messageManager;
private $collection;
private $registry;
public function __construct(MessageManager $messageManager,
SalesOrderGridCollection $collection,
Registry $registry
)
{
$this->messageManager = $messageManager;
$this->collection = $collection;
$this->registry = $registry;
}
public function aroundGetReport(
\Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory $subject,
\Closure $proceed,
$requestName
)
{
$result = $proceed($requestName);
if ($requestName == 'sales_order_grid_data_source') {
if ($result instanceof $this->collection
) {
if (is_null($this->registry->registry('shipment_joined'))) {
$select = $this->collection->getSelect();
$select->join(
["sst" => "sales_shipment_track"],
'main_table.entity_id = sst.entity_id',
'sst.track_number'
)
->distinct();
$this->registry->register('shipment_joined', true);
}
}
}
return $this->collection;
}
}
推荐阅读
- python - Tkinter:在顶层窗口上使用 ttkthemes
- reactjs - Material UI 自定义类后面的属性
- ios - 在 iOS 14 上的 SwiftUI 中显示两次视图
- scala - 如何作为任务的结果返回空向量?
- cloud - Openstack多站点云编排
- javascript - Pug / Jade:在 list-group-item 内容之前添加 font-awsome 按钮
- elasticsearch - 从远程服务器向 Elasticsearch 传递数据
- ruby-on-rails - 根据用户状态显示或隐藏“高级功能”的最佳实践?
- android-ffmpeg - “ffmpeg -i test.mp4 -vf drawtext=fontfile=arial.ttf:text=welcome output.mp4”,“-vf”是什么意思?
- html - 鼠标悬停会使顶部栏中的文本和图标从网站上消失