code: public function onUpdate(ResourceEventInterface $event)
      {
          $item = $this->getSupplierOrderItemFromEvent($event);
  
          // Disallow product change
          if ($this->persistenceHelper->isChanged($item, 'product')) {
              $productCs = $this->persistenceHelper->getChangeSet($item, 'product');
              if ($productCs[0] != $productCs[1]) {
                  // TODO message as translation id
                  throw new IllegalOperationException("Changing supplier order item product is not supported yet.");
              }
          }
  
          $changed = $this->synchronizeWithProduct($item);
          if ($changed) {
              $this->persistenceHelper->persistAndRecompute($item, false);
          }
  
          // TODO These tests are made in the supplier order listener and should not be done twice...
          $order = $item->getOrder();
          if ($this->persistenceHelper->isChanged($order, 'state')) {
              $stateCs = $this->persistenceHelper->getChangeSet($order, 'state');
  
              // If order just did a stockable state transition
              if (
                  SupplierOrderStates::hasChangedFromStockable($stateCs) ||
                  SupplierOrderStates::hasChangedToStockable($stateCs)
              ) {
                  // Abort (handled by the supplier order listener)
                  return;
              }
          }
  
          if (SupplierOrderStates::isStockableState($order->getState())) {
              // Updates the ordered quantity and price
              if ($this->stockUnitLinker->applyItem($item)) {
                  // Dispatch supplier order content change event
                  $this->scheduleSupplierOrderContentChangeEvent($item->getOrder());
              }
          }
      }
docs: Update event handler.
  
  @param ResourceEventInterface $event
  @throws IllegalOperationException