Изменение определения существующего поля не работает на другом сервере - PullRequest
1 голос
/ 11 марта 2019

В этом месте suitecrm/custom/Extension/modules/Color/Ext/Vardefs/custom_field_level_name.php

Я пытаюсь использовать следующий код для настройки существующего определения поля

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

Это работает локально в моем компьютере разработчика

Но при развертывании в производство эта настройка не работает.Когда я восстанавливаю и перестраиваю, я ожидаю, что сценарий sql синхронизирует vardefs с базой данных, но не показывает команду ALTER для изменения поля level_name в таблице цветов. Я сделал это с другими полями и пока без проблем.

Почему настройка определения существующего поля не работает на другом сервере?

Спасибо за ваши комментарии ...

Обновление

Я понял, что проблема связана с тем, как генерируется файл suitecrm/custom/modules/Color/Ext/Vardefs/vardefs.ext.php. Содержимое этого файла на удаленном сервере отличается от содержимого на моем локальном компьютере разработчика.Пользовательские определения в поле на моем локальном компьютере и после восстановления в файле suitecrm/custom/modules/Color/Ext/Vardefs/vardefs.ext.php расположены в конце файла, так что оно перезаписывает исходное определение поля.В то время как на удаленном сервере пользовательское определение находится в начале файла, так что они перезаписываются исходным определением файла

Например, в моем локальном содержимом файла есть такой порядок

//...

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

//...

Когда в удаленном режиме есть этот порядок

//...

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

//...

Чтобы исправить ошибку на удаленном сервере, я удалил файл suitecrm/custom/modules/Color/Ext/Vardefs/vardefs.ext.php, и после ремонта я ожидал, что заказ будет исправлен, но это не так.Могу ли я что-нибудь сделать, чтобы убедиться, что пользовательские определения расположены после тех, которые были определены ранее?

Еще раз спасибо за ваши комментарии

1 Ответ

1 голос
/ 12 марта 2019

То, что мы делаем, это либо

  • Всегда создайте поля в обоих экземплярах, а затем объединяйте их с git
  • Синхронизируйте fields_metadata + измененные файлы, а затем выполните восстановление и перестройку.

Это одно из ограничений разработки SuiteCRM / SugarCRM, вы не можете просто что-то делать с кодом, некоторая информация о полях хранится в таблице fields_metadata.

Иногда это просто работаетдля некоторых типов полей, если честно, я не знаю точно, почему.

...