Magento – Magento 2 can’t update customer custom attribute value at customer observer(customer_save_after)

customerevent-observermagento-2.1

I am trying to save customer custom attribute value at customer_save_after observer. but observer script is not working at observer but that script working at contoller.

events.xml

<event name="customer_save_after">
<observer name="VestricsM2_Connector_Customer_Save_After" instance="VestricsM2\Connector\Observer\CustomerSaveAfter" /> </event>

Observer/CustomerSaveAfter.php

protected $customerRepository;

protected $_logger;

/**
 * @param \Magento\Framework\ObjectManagerInterface $objectManager
 */
public function __construct(
    \Magento\Framework\ObjectManagerInterface $objectManager,
    \Psr\Log\LoggerInterface $logger,
    \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
) {
    $this->_objectManager = $objectManager;
    $this->_logger = $logger;
    $this->customerRepository = $customerRepository;
}

/**
 * customer register event handler
 *
 * @param \Magento\Framework\Event\Observer $observer
 * @return void
 */
public function execute(\Magento\Framework\Event\Observer $observer)
{
    $customer = $observer->getEvent()->getCustomer();

    if($customer->getId()){
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $customerRepository = $objectManager->create('Magento\Customer\Model\Customer')->load('1');
         $customerRepository->setUpdatedinsap('1');
         $customerRepository->save();

       /* $writer = new \Zend\Log\Writer\Stream(BP .'/var/log/observer-log-file.log');
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        $logger->info($customerRepository->getData());*/

    }

Best Answer

Using CustomerRepositoryInterface you can save your custom customer attribute value,

Save your customer attribute value using try/cache block,

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $customer = $observer->getEvent()->getCustomer();

    if($customer->getId()){
        $customer = $this->customerRepository->getById($customer->getId());
        $customer->setCustomAttribute('updatedinsap',1);
        try {                
            $customer = $this->customerRepository->save($customer);
        }catch (Exception $e) {
            return $e->getMessage();
        }
    }
   return;

}