Задать вопрос
JacobsMonarch
@JacobsMonarch
Bitrix24 developer

How to validate iblock property value(type of list) while creating new element or updating one?

Н9

Я работаю над классом обслуживания CommissionService, который создает элемент iblock и устанавливает значения свойств. Одним из свойств является тип списка, множественный, и в функции я принимаю массив имен. Меня немного беспокоит проверка имен.

Как лучше это сделать, есть ли у кого-нибудь подобный опыт?

Я знаю, что есть события onbeforeadd и onbeforeupdate, но думаю, что это не сработает. Существует проблема с установкой нескольких значений свойств, если вы используете расширенный класс из ElementApiCodeTable.

Извините за язык, я использую Google Translate.

<?php


namespace Local\Services;

use Bitrix\Iblock\PropertyEnumerationTable;
use RuntimeException;
use Local\Models\DealTable;
use Local\Models\ContractTable;
use UnexpectedValueException;
use Local\Models\CommissionTable;
use \Bitrix\Main;
use \Bitrix\Iblock;

class CommissionService
{

    /**
     * Create commission
     *
     * @param   int     $dealId
     * @param   float   $amount
     * @param   array   $sources
     * @return  int
     * @throws  RuntimeException
     * @throws  UnexpectedValueException
     */
    public function createCommission(int $deal, array $sources, float $amount)
    {
        if (!DealTable::has($deal)) {
            throw new UnexpectedValueException("Deal with id: {$deal} doesn't exist");
        }

        $contract = ContractTable::getByDeal($deal, ["ID", "NAME"]);

        if ($contract == null) {
            throw new UnexpectedValueException("Contract for deal: {$deal} not found");
        }

        $commission = CommissionTable::createObject()
            ->setName($contract["NAME"])
            ->setDeal($deal)
            ->setCommission($amount);
        $commission->addToSource(new Iblock\ORM\PropertyValue(1111));            

        $result = $commission->save();
        if (!$result->isSuccess()) {
            throw new RuntimeException("Failed to create commission: " .  implode(". ", $result->getErrorMessages()));
        }

        $commission->setXmlId($commission->getId());
        $commission->save();
        return $commission->getId();
    }
}
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы