Динамическое управление полями обязательными для заполнения (SuiteCRM)

Использование стандартной для SuiteCRM javascript функций removeFromValidate и addToValidate позволяет изменить списка полей, которые необходимо заполнить при редактировании записи. Ниже пример скрипта, который можно загрузить на форму ‘editview’.

/* 
 *  formName (string) - id тега 'form', которая содержит поля
 *  field (string) - id поля
 *  typeField (string) - тип поля 
 *  validSwitch (boolean) - включить (true) или выключить (false) контроль заполнения поля 
 */
function validate_fields_by_status(formName,field,typeField,validSwitch){
    removeFromValidate(formName,field);
    let label ='';
    if($('#'+field).parent().prev().hasClass('label')){
        label = $('#'+field).parent().prev().html().split(':')[0];
    }
    addToValidate(formName,field,typeField,validSwitch,label);
}

Загрузить скрипт можно несколькими способами, приведу два из них. Оба предусматривают изменение файла editviewdefs.php конкретного модуля. Для примера назовем модуль – CustomModules. Создайте или отредактируйте файл в пользовательской директории custom/modules/CustomModules/metadata/ . Обратите внимание, что изменение файлов не позволяет после этого использовать инструмент Studio.

  • Загрузить javascript непосредственно в файл
<?php
$viewdefs ['CustomModules'] =array(
  'EditView' => array(
...
    'templateMeta' => array(
...
      'javascript' =>'<script type="text/javascript"> /* javascript код */ </script>',
...
    ),
  ),
);
  • Загрузить javascript во внешний файл, например custom/modules/CustomModules/metadata/js/script.js , а затем уже включить его файл editviewdefs.php .
<?php
$viewdefs ['CustomModules'] =array(
  'EditView' => array(
...
    'templateMeta' => array(
...
      'includes' => array(
        0 => array(
          'file' => 'custom/modules/CustomModules/metadata/js/script.js',
        ),
      ),
...
    ),
  ),
);