service/ProductModuleService.php
public static function update(Context $context, $number, ProductModule $productModule)
    {
        CheckUtils::paramNotEmpty($number, Constants::NUMBER);

        $response = NetLicensingService::getInstance()
            ->post($context, Constants::PRODUCT_MODULE_ENDPOINT_PATH . '/' . $number, $productModule->asPropertiesMap());

        $updatedProductModule = null;

        if (!empty($response->items->item[0])) {
            $updatedProductModule = ItemToProductModuleConverter::convert($response->items->item[0]);
            $updatedProductModule->exists = true;
        }

        return $updatedProductModule;
    }
public static function update(Context $context, $number, ProductModule $productModule)
    {
        CheckUtils::paramNotEmpty($number, Constants::NUMBER);

        $response = NetLicensingService::getInstance()
            ->post($context, Constants::PRODUCT_MODULE_ENDPOINT_PATH . '/' . $number, $productModule->asPropertiesMap());

        $updatedProductModule = null;

        if (!empty($response->items->item[0])) {
            $updatedProductModule = ItemToProductModuleConverter::convert($response->items->item[0]);
            $updatedProductModule->exists = true;
        }

        return $updatedProductModule;
    }
Updates product module properties.See NetLicensingAPI for details:
https://www.labs64.de/confluence/display/NLICPUB/Product+Module+Services#ProductModuleServices-Updateproductmodule

determines the vendor on whose behalf the call is performed
@param \NetLicensing\Context $context

product module number
@param string $number

non-null properties will be updated to the provided values, null properties will stay unchanged.
@param \NetLicensing\ProductModule $productModule

updated product module.
@return ProductModule|null
@throws MalformedArgumentsException
@throws RestException
@throws \ErrorException