bitrix-migrations icon indicating copy to clipboard operation
bitrix-migrations copied to clipboard

Проблема с автоматическими миграциями на добавление пользовательских полей

Open svn72 opened this issue 5 years ago • 2 comments

При создании автомиграции массив fields формируется некорректно.

Фрагмент результирующего кода метода up():

public function up()
    {
        $fields = array (
  'ENTITY_ID' => 'HLBLOCK_4',
  'FIELD_NAME' => 'UF_NAME',
  'USER_TYPE_ID' => 'string',
  'XML_ID' => '',
  'SORT' => 200,
  'MULTIPLE' => 'N',
  'MANDATORY' => 'Y',
  'SHOW_FILTER' => 'N',
  'SHOW_IN_LIST' => 'Y',
  'EDIT_IN_LIST' => 'Y',
  'IS_SEARCHABLE' => 'N',
  'SETTINGS' => 'a:6:{s:4:"SIZE";i:20;s:4:"ROWS";i:1;s:6:"REGEXP";N;s:10:"MIN_LENGTH";i:0;s:10:"MAX_LENGTH";i:0;s:13:"DEFAULT_VALUE";N;}',
  'LIST_FILTER_LABEL' => 
  array (
    'ru' => 'Название',
  ),
  'LIST_COLUMN_LABEL' => 
  array (
    'ru' => 'Название',
  ),
  'EDIT_FORM_LABEL' => 
  array (
    'ru' => 'Название',
  ),
);

        $this->addUF($fields);
    }

Проблемный участок в STTINGS s:6:"REGEXP";N;

при применении такой миграции в поле "регулярное выражение для проверки" и "значение по умолчанию" попадает "a"

что при попытке создания элемента приведет к ошибке формата

Поле "Название" не удовлетворяет проверочному регулярному выражению.

После настройки поля вручную в таблице данный блок выглядит как s:6:"REGEXP";s:0:"";

svn72 avatar Sep 17 '19 12:09 svn72

Уточнение, если SETTINGS вставить как в таблице b_user_field сериализованным массивом то поле создастся все равно не корректно, т.к. в методе CUserTypeEntity::add данное поле сериализуется без проверки, т.е. подразумевается передача массива в данный метод.

Нужно делать предобработку поля "SETTINGS" на этапе создания файла миграции

svn72 avatar Sep 17 '19 13:09 svn72

Здравствуйте, проблема актуальна?)

enjame avatar Oct 21 '19 11:10 enjame