• Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, вы все верно говорите. Смотрите как формируется массив $data. В начале был массив $arrTicket:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
            );

    Далее он попадает в статический метод класса TicketTable:
    $result = Support\TicketTable::add($arTicket);
    $TICKET_ID = $result->getId();
     if (!$result->isSuccess()) {
                    $arResult = $arTicket;
                    if ($arParams['ALLOW'] && (int)$request['PARRENT_MESSAGE_ID'] > 0) {
                        $arResult['PARRENT_MESSAGE_ID'] = $request['PARRENT_MESSAGE_ID'];
                    }
                    $arResult["ERRORS"] = $result->getErrorMessages();

    Класс TicketTable является наследником вот этого класса из ядра и используя его метод
    $result = parent::add($data)
    Отправляет массив $data дальше. Проверка полей осуществляется в данной методе класса DataManager:
    public static function checkFields(Result $result, $primary, array $data)
        {
            $entity = static::getEntity();
            //checks required fields
            foreach ($entity->getFields() as $field)
            {
                if ($field instanceof ScalarField && $field->isRequired())
                {
                    $fieldName = $field->getName();
                    if (
                        (empty($primary) && (!isset($data[$fieldName]) || $field->isValueEmpty($data[$fieldName])))
                        || (!empty($primary) && isset($data[$fieldName]) && $field->isValueEmpty($data[$fieldName]))
                    )
                    {
                        $result->addError(new FieldError(
                            $field,
                            Loc::getMessage("MAIN_ENTITY_FIELD_REQUIRED", array("#FIELD#"=>$field->getTitle())),
                            FieldError::EMPTY_REQUIRED
                        ));
                    }
                }
            }
    
            // checks data - fieldname & type & strlen etc.
            foreach ($data as $k => $v)
            {
                if ($entity->hasField($k))
                {
                    $field = $entity->getField($k);
    
                }
                else
                {
                    throw new Main\ArgumentException(sprintf(
                        'Field `%s` not found in entity when trying to query %s row.',
                        $k, $entity->getName()
                    ));
                }
    
                $field->validateValue($v, $primary, $data, $result);
            }
        }

    Когда я добавил проблемное поле в самый первый массив $arrTicket, то ошибка пропала:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
                'PLATFORM_TECHNOLOG' => $request["PLATFORM_TECHNOLOG"]
            );

    Но мне как-то подобное решение не нравится. Хотя файл компонента можно без проблем перенести в local и не трогая файлов ядра решить вопрос. Что думаете?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Вот принтовка $data:
    Array
    (
        [TITLE] => Сколько ты зарабатываешь?!??
        [CATEGORY_ID] => 4
        [PRIORITY_ID] => 0
        [MESSAGE] => цкцукцкцукцу
        [OWNER_USER_ID] => 684
        [DATE_CREATE] => Bitrix\Main\Type\DateTime Object
            (
                [value:protected] => DateTime Object
                    (
                        [date] => 2021-01-26 01:59:54.000000
                        [timezone_type] => 3
                        [timezone] => America/New_York
                    )
    
            )
    
        [CREATED_USER_ID] => 684
        [RESPONSIBLE_USER_ID] => 1
        [SITE_ID] => s1
        [IP] => 192.168.56.1
        [STATUS_ID] => 1
    )

    Нашел таблицу. Она называется: altasib_support_ticket. Столбец PLATFORM_TECHNOLOG в ней имеется:
    600fc0c79105d070769762.jpeg
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, в $data всегда массив переданный в component.php:
    $result = Support\TicketTable::add($arTicket);
    Формируется он из значений части полей вот так:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
            );
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    и всё таки я попробовал.... ожидаемо не помогло
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    Так в git pull по моему и так заложен git fetch
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, добавил столбец PLATFORM_TECHNOLOG, ошибка не пропала
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    getMap() выдаёт следующий массив:
    Array
    (
        [ID] => Array
            (
                [data_type] => integer
                [primary] => 1
                [autocomplete] => 1
                [title] => №
            )
    
        [SITE_ID] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Сайт
            )
    
        [KindAction] => Array
            (
                [data_type] => string
                [required] => 
            )
    
        [PLATFORM_TECHNOLOG] => Array
            (
                [data_type] => string
                [required] => 1
            )
    
        [DATE_CREATE] => Array
            (
                [data_type] => datetime
                [required] => 1
                [title] => Дата создания
            )
    
        [DATE_CREATE_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => DATE_CREATE
                    )
    
            )
    
        [TIMESTAMP] => Array
            (
                [data_type] => datetime
                [title] => Дата изменения
            )
    
        [TIMESTAMP_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => TIMESTAMP
                    )
    
            )
    
        [LAST_MESSAGE_DATE] => Array
            (
                [data_type] => datetime
                [title] => Дата последнего сообщения
            )
    
        [LAST_MESSAGE_USER_ID] => Array
            (
                [data_type] => integer
                [title] => Автор последнего сообщения
            )
    
        [LAST_MESSAGE_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.LAST_MESSAGE_USER_ID] => ref.ID
                    )
    
            )
    
        [LAST_MESSAGE_BY_SUPPORT] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_CLOSE] => Array
            (
                [data_type] => boolean
                [title] => Закрыто
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [DATE_CLOSE] => Array
            (
                [data_type] => datetime
                [title] => Дата закрытия
            )
    
        [DATE_CLOSE_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => DATE_CLOSE
                    )
    
            )
    
        [OWNER_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Автор
            )
    
        [OWNER_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.OWNER_USER_ID] => ref.ID
                    )
    
            )
    
        [CREATED_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Создано
            )
    
        [CREATED_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.CREATED_USER_ID] => ref.ID
                    )
    
            )
    
        [MODIFIED_USER_ID] => Array
            (
                [data_type] => integer
                [title] => Изменено
            )
    
        [MODIFIED_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.MODIFIED_USER_ID] => ref.ID
                    )
    
            )
    
        [RESPONSIBLE_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Ответственный
            )
    
        [RESPONSIBLE_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.RESPONSIBLE_USER_ID] => ref.ID
                    )
    
            )
    
        [CATEGORY_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Категория
            )
    
        [CATEGORY] => Array
            (
                [data_type] => ALTASIB\Support\CategoryTable
                [reference] => Array
                    (
                        [=this.CATEGORY_ID] => ref.ID
                    )
    
            )
    
        [PRIORITY_ID] => Array
            (
                [data_type] => integer
                [title] => Приоритет
            )
    
        [STATUS_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Статус
            )
    
        [STATUS] => Array
            (
                [data_type] => ALTASIB\Support\StatusTable
                [reference] => Array
                    (
                        [=this.STATUS_ID] => ref.ID
                    )
    
            )
    
        [SLA_ID] => Array
            (
                [data_type] => integer
                [title] => Уровень поддержки
            )
    
        [SLA] => Array
            (
                [data_type] => ALTASIB\Support\SlaTable
                [reference] => Array
                    (
                        [=this.SLA_ID] => ref.ID
                    )
    
            )
    
        [TITLE] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Заголовок обращения
            )
    
        [IP] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => IP
            )
    
        [MESSAGE] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Текст обращения
            )
    
        [MESSAGE_CNT] => Array
            (
                [data_type] => integer
                [expression] => Array
                    (
                        [0] => (SELECT COUNT(altasib_support_ticket_message.ID) from altasib_support_ticket_message WHERE altasib_support_ticket_message.TICKET_ID=%s)
                        [1] => ID
                    )
    
                [title] => Сообщений
            )
    
        [MESSAGES] => Array
            (
                [data_type] => ALTASIB\Support\TicketMessageTable
                [reference] => Array
                    (
                        [=this.ID] => ref.TICKET_ID
                    )
    
            )
    
        [GROUP_ID] => Array
            (
                [data_type] => integer
            )
    
        [GROUP] => Array
            (
                [data_type] => \Bitrix\Socialnetwork\WorkgroupTable
                [reference] => Array
                    (
                        [=this.GROUP_ID] => ref.ID
                    )
    
            )
    
        [TASK_ID] => Array
            (
                [data_type] => integer
            )
    
        [DEAL_ID] => Array
            (
                [data_type] => integer
            )
    
        [IS_OVERDUE] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_NOTIFY_SEND] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_DEFERRED] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [SUM_ELAPSED_TIME] => Array
            (
                [data_type] => integer
                [expression] => Array
                    (
                        [0] => (SELECT SUM(altasib_support_ticket_message.ELAPSED_TIME) from altasib_support_ticket_message WHERE altasib_support_ticket_message.TICKET_ID=%s)
                        [1] => ID
                    )
            )
        [COMMENT] => Array
            (
                [data_type] => string
            )
    )

    Таблица судя по всему называется altasib_support_ticket_message?!??
    Если да то столбца "PLATFORM_TECHNOLOG" тут нет:
    600acd1b492d6807090902.jpeg
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    Особо значит что какие-то изменения с удалённого репозитория приходят но не все..... а мне нужно чтобы локалка полностью такой же как и удалённый репозиторий. Ветка точно та что мне нужна, а именно dev. Чекаут обычно делаю через интрефейс шторма а не через консоль. Может быть попробовать:
    git reset --hard
    ?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    За проверку полей отвечает вот эта функция:
    public static function checkFields(Result $result, $primary, array $data)
        {
            $entity = static::getEntity();
            //checks required fields
            foreach ($entity->getFields() as $field)
            {
                if ($field instanceof ScalarField && $field->isRequired())
                {
                    $fieldName = $field->getName();
                    if (
                        (empty($primary) && (!isset($data[$fieldName]) || $field->isValueEmpty($data[$fieldName])))
                        || (!empty($primary) && isset($data[$fieldName]) && $field->isValueEmpty($data[$fieldName]))
                    )
                    {
                        $result->addError(new FieldError(
                            $field,
                            Loc::getMessage("MAIN_ENTITY_FIELD_REQUIRED", array("#FIELD#"=>$field->getTitle())),
                            FieldError::EMPTY_REQUIRED
                        ));
                    }
                }
            }
    
            // checks data - fieldname & type & strlen etc.
            foreach ($data as $k => $v)
            {
                if ($entity->hasField($k))
                {
                    $field = $entity->getField($k);
    
                }
                else
                {
                    throw new Main\ArgumentException(sprintf(
                        'Field `%s` not found in entity when trying to query %s row.',
                        $k, $entity->getName()
                    ));
                }
    
                $field->validateValue($v, $primary, $data, $result);
            }
        }

    То есть если я верно понял, она получает сущность в которой есть имена всех полей, затем она проверяет есть ли в $data элемент с аналогичным именем, если нет то записывает ошибку. Получается я всё верно сделал добавив в массив недостающий элемент
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Про namespace знаю.... но не всё.... а с рефлексией затупил и указал неполное имя класса
    Короче в итоге я добрался до нужного класса он оказался наследником этого класса ядра Битрикса для добавления информации использует его метод add:
    $result = parent::add($data)
    В конце работы метода возвращается $result. В $data лежит $arTicket в который я и добавил новую строку.
    Лезть и править что-то в ядре битрикса я конечно же не буду, но посмотреть как работает метод add любопытно. Но насколько я понял внутри пространства имен можно использовать только классы которые в нём определены и таже рефлексия работать уже не будет?!?? Как мне тогда найти файл с классом Bitrix\Main\Entity\DataManager?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    кстати после добавления моего элемента в массив, тикет приходит в поддержку
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    пробовал добраться до пространства имён с помощью:
    new ReflectionClass('Support\TicketTable')
    В результате получаю:
    Class Support\TicketTable does not exist
    Я всё верно сделал или имя класса введено не так?!??
    Ставить IDE не варик.... у меня на локалке только часть файлов, большая часть, включая ядро системы поднята на виртуалке.... туда IDE не поставишь..... а весит всё добро 12 гигов
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    эта запись по коду ниже самого $arTicket и мой новый элемент так же добавится как и все остальные если Вы об этом
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Так короче удалось избавиться от ошибки. В компоненте есть массив :
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
            );

    Как можно догадаться в нём хранятся данные тикета в службу поддержки. Он же фигурирует в проверке которую я выкладывал выше. Короче я прото добавил в него новый элемент PLATFORM_TECHNOLOG:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
                'PLATFORM_TECHNOLOG' => $request["PLATFORM_TECHNOLOG"]
            );

    И сообщение отправилось без ошибок. Но что-то мне такое решение не нравится. Как думаете?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Ярослав Александров, в $request лежит объект HttpRequest
    в котором есть массив:
    [values:protected] => Array
                    (
                        [TICKET_ID] => 0
                        [PARRENT_MESSAGE_ID] => 
                        [SEND_MESSAGE] => Y
                        [t_submit_go] => 
                        [PLATFORM_TECHNOLOG] => technologist
                        [OWNER_ID] => 684
                        [sessid] => cc527ce93748c7a8981c48180090c88b
                        [CATEGORY_ID] => 4
                        [KindAction] => 1387
                        [TITLE] => Сколько ты зарабатываешь?!??
                        [MESSAGE] => ryryryr
                    )

    Как видите поле [PLATFORM_TECHNOLOG] на которое ругается валидатор, мол оно пустое имеет значение. если нужно могу прислать объект целиком
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    PetrPo, да участок нашёл, но ответа на суть проблемы это не дало. Теперь мне нужно найти метод: $result->isSuccess(), который как я понял пришёл из пространства имён ALTASIB\Support, но как найти файл с этим пространством имён?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Вот ссылка на архив с файлам шаблона в папке local и компонентом который я вытащил из папки bitrix
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    PetrPo, по указанному Вами пути нашел нужный файл и в нём нашел участок кода который добавляет ошибку:
    $result = Support\TicketTable::add($arTicket);
    $TICKET_ID = $result->getId();
     if (!$result->isSuccess()) {
                    $arResult = $arTicket;
                    if ($arParams['ALLOW'] && (int)$request['PARRENT_MESSAGE_ID'] > 0) {
                        $arResult['PARRENT_MESSAGE_ID'] = $request['PARRENT_MESSAGE_ID'];
                    }
                    $arResult["ERRORS"] = $result->getErrorMessages();

    Метод $result->isSuccess() возвращает false
    Как теперь добраться до данного метода чтобы посмотреть что там происходит???!
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    PetrPo, вот така структура данного компонента:
    60093a3beb581818038291.jpeg
    И там я уже вроде всё просмотрел. Но всё таки подскажите на какой файл обратить внимание??!?