Проблема с сохранением полей в SuiteCRM: слишком большой размер строки - PullRequest
0 голосов
/ 28 февраля 2020

У меня проблема в SuiteCRM версии 7.11.10 (Sugar версии 6.5.25).

Я пытаюсь позвонить в поле. Когда я ставлю размер поля, как 255, 100 или 50 не удается. Но если я поставлю размер как 5, он будет работать.

Database failure

Вывод sugarcrm.log для ошибок следующий:

Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Mysqli_query failed.
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Cannot create column Query Failed: ALTER TABLE accounts_cstm add COLUMN phone_c varchar(100)  NULL : MySQL error 1118: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Exception handling in /opt/suitecrm/include/MVC/Controller/SugarController.php:400
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Exception in Controller: Database failure. Please refer to suitecrm.log for details.
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] backtrace:
#0 /opt/suitecrm/include/database/DBManager.php(353): sugar_die('Database failur...')
#1 /opt/suitecrm/include/database/DBManager.php(328): DBManager->registerError('Cannot create c...', 'Cannot create c...', true)
#2 /opt/suitecrm/include/database/MysqliManager.php(179): DBManager->checkError('Cannot create c...', true)
#3 /opt/suitecrm/modules/DynamicFields/DynamicField.php(657): MysqliManager->query('ALTER TABLE acc...', true, 'Cannot create c...')
#4 /opt/suitecrm/modules/DynamicFields/templates/Fields/TemplateField.php(594): DynamicField->addFieldObject(Object(TemplatePhone))
#5 /opt/suitecrm/modules/ModuleBuilder/controller.php(399): TemplateField->save(Object(DynamicField))
#6 /opt/suitecrm/include/MVC/Controller/SugarController.php(525): ModuleBuilderController->action_SaveField()
#7 /opt/suitecrm/include/MVC/Controller/SugarController.php(494): SugarController->do_action()
#8 /opt/suitecrm/include/MVC/Controller/SugarController.php(468): SugarController->handle_action()
#9 /opt/suitecrm/modules/ModuleBuilder/controller.php(101): SugarController->process()
#10 /opt/suitecrm/include/MVC/Controller/SugarController.php(373): ModuleBuilderController->process()
#11 /opt/suitecrm/include/MVC/SugarApplication.php(113): SugarController->execute()
#12 /opt/suitecrm/index.php(52): SugarApplication->execute()
#13 {main}

Я понимаю, что SuiteCRM сохраняет строку, размер которой превышает максимальный размер строки 65535, возможно потому, что он использует много столбцов с фиксированным размером VARCHAR столбцов. И когда он добавляет последние столбцы, он не помещается, если вы не уменьшите размер. Я попытался уменьшить размер благодаря этой записи .

Кажется, БД подсказывает мне решение. Измените некоторые VARCHAR столбцы на TEXT или BLOB .

Я пытаюсь добавить меньшие поля, такие как текстовые или целочисленные поля, и у меня нет проблем. К сожалению, уменьшение размера поля не работает, например, с выпадающими списками. Добавление выпадающих списков не всегда выполняется. Похоже, что столбцы SuiteCRM слишком велики, и для дополнительных данных недостаточно размера.

Есть ли способ изменить конфигурацию, избегая каких-либо изменений кода? Нужно ли обновлять версию SuiteCRM?

1 Ответ

0 голосов
/ 29 февраля 2020

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

По умолчанию для текстовых полей (varchars) по умолчанию установлено значение 255, которые складываются очень быстро.

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

При желании вы можете добавлять поля по коду, используя основную таблицу (вместо _cstm Таблица). Этот пример добавляет поле roof_type в таблицу возможностей.

$dictionary['Opportunity']['fields']['roof_type'] = array(
'name' => 'roof_type',
'vname' => 'LBL_ROOF_TYPE',
'type' => 'varchar',
'len' => '255',
);
...