Error: Call to undefined method Magento\Sales\Api\Data\OrderItemExtension::setGuid()
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Sales\Api\OrderItemRepositoryInterface">
<plugin name="guid_extension_attribute" type="Convert\GUID\Plugin\OrderItemRepositoryPlugin" />
</type>
</config>
extension_attributes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\Sales\Api\Data\OrderInterface">
<attribute code="guid" type="string"/>
</extension_attributes>
</config>
OrderItemRepositoryPlugin.php
<?php
namespace Convert\GUID\Plugin;
use Magento\Sales\Api\Data\OrderItemExtensionFactory;
use Magento\Sales\Api\Data\OrderItemExtensionInterface;
use Magento\Sales\Api\Data\OrderItemInterface;
use Magento\Sales\Api\Data\OrderItemSearchResultInterface;
use Magento\Sales\Api\OrderItemRepositoryInterface;
/**
* Class OrderItemRepositoryPlugin
*/
class OrderItemRepositoryPlugin
{
/**
* Order feedback field name
*/
const FIELD_NAME = 'guid';
/**
* Order Extension Attributes Factory
*
* @var OrderItemExtensionFactory
*/
protected $extensionFactory;
/**
* OrderItemRepositoryPlugin constructor
*
* @param OrderItemExtensionFactory $extensionFactory
*/
public function __construct(OrderItemExtensionFactory $extensionFactory)
{
$this->extensionFactory = $extensionFactory;
}
/**
*
* @param OrderItemRepositoryInterface $subject
* @param OrderItemInterface $orderItem
*
* @return OrderItemInterface
*/
public function afterGet(OrderItemRepositoryInterface $subject, OrderItemInterface $orderItem)
{
$guid = $orderItem->getData(self::FIELD_NAME);
$extensionAttributes = $orderItem->getExtensionAttributes();
$extensionAttributes = $extensionAttributes ? $extensionAttributes : $this->extensionFactory->create();
$extensionAttributes->setGuid($guid);
$orderItem->setExtensionAttributes($extensionAttributes);
return $orderItem;
}
/**
*
* @param OrderItemRepositoryInterface $subject
* @param OrderItemSearchResultInterface $searchResult
*
* @return OrderItemSearchResultInterface
*/
public function afterGetList(OrderItemRepositoryInterface $subject, OrderItemSearchResultInterface $searchResult)
{
$orderItems = $searchResult->getItems();
foreach ($orderItems as &$item) {
$guid = $item->getData(self::FIELD_NAME);
$extensionAttributes = $item->getExtensionAttributes();
$extensionAttributes = $extensionAttributes ? $extensionAttributes : $this->extensionFactory->create();
$extensionAttributes->setGuid($guid);
$item->setExtensionAttributes($extensionAttributes);
}
return $searchResult;
}
}