Vediamo come creare un campo aggiuntivo direttamente da codice php.
Può rendersi necessario in situazioni di diverso tipo, automatizzare la creazione di un campo per un modulo, ed eseguirla direttamente da codice php.
L’operazione è semplice, bastano poche righe di codice, ma è prima necessario individuare il tipo di campo da aggiungere. Potremmo voler aggiungere uno dei campi di base di SuiteCRM oppure un tipo campo personalizzato come quelli proposti nei nostri moduli.
In generale per aggiungere un nuovo campo sarà sufficiente richiamare il metodo install_custom_fields della classe ModuleInstaller. Con questa chiamata sarnno creati tutti i riferimenti necessari al crm per l’uso e la memorizzazione nel database del campo.
Di seguito l’esempio ripreso dal manuale di sviluppo di SuiteCRM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
$fields = array ( //Text array( 'name' => 'text_field_example', 'label' => 'LBL_TEXT_FIELD_EXAMPLE', 'type' => 'varchar', 'module' => 'Accounts', 'help' => 'Text Field Help Text', 'comment' => 'Text Field Comment Text', 'default_value' => '', 'max_size' => 255, 'required' => false, // true or false 'reportable' => true, // true or false 'audited' => false, // true or false 'importable' => 'true', // 'true', 'false', 'required' 'duplicate_merge' => false, // true or false ), //DropDown array( 'name' => 'dropdown_field_example', 'label' => 'LBL_DROPDOWN_FIELD_EXAMPLE', 'type' => 'enum', 'module' => 'Accounts', 'help' => 'Enum Field Help Text', 'comment' => 'Enum Field Comment Text', 'ext1' => 'account_type_dom', //maps to options - specify list name 'default_value' => 'Analyst', //key of entry in specified list 'mass_update' => false, // true or false 'required' => false, // true or false 'reportable' => true, // true or false 'audited' => false, // true or false 'importable' => 'true', // 'true', 'false' or 'required' 'duplicate_merge' => false, // true or false ), //MultiSelect array( 'name' => 'multiselect_field_example', 'label' => 'LBL_MULTISELECT_FIELD_EXAMPLE', 'type' => 'multienum', 'module' => 'Accounts', 'help' => 'Multi-Enum Field Help Text', 'comment' => 'Multi-Enum Field Comment Text', 'ext1' => 'account_type_dom', //maps to options - specify list name 'default_value' => 'Analyst', //key of entry in specified list 'mass_update' => false, // true or false 'required' => false, // true or false 'reportable' => true, // true or false 'audited' => false, // true or false 'importable' => 'true', // 'true', 'false' or 'required' 'duplicate_merge' => false, // true or false ), //Checkbox array( 'name' => 'checkbox_field_example', 'label' => 'LBL_CHECKBOX_FIELD_EXAMPLE', 'type' => 'bool', 'module' => 'Accounts', 'default_value' => true, // true or false 'help' => 'Bool Field Help Text', 'comment' => 'Bool Field Comment', 'audited' => false, // true or false 'mass_update' => false, // true or false 'duplicate_merge' => false, // true or false 'reportable' => true, // true or false 'importable' => 'true', // 'true', 'false' or 'required' ), //Date array( 'name' => 'date_field_example', 'label' => 'LBL_DATE_FIELD_EXAMPLE', 'type' => 'date', 'module' => 'Accounts', 'default_value' => '', 'help' => 'Date Field Help Text', 'comment' => 'Date Field Comment', 'mass_update' => false, // true or false 'required' => false, // true or false 'reportable' => true, // true or false 'audited' => false, // true or false 'duplicate_merge' => false, // true or false 'importable' => 'true', // 'true', 'false' or 'required' ), //DateTime array( 'name' => 'datetime_field_example', 'label' => 'LBL_DATETIME_FIELD_EXAMPLE', 'type' => 'datetime', 'module' => 'Accounts', 'default_value' => '', 'help' => 'DateTime Field Help Text', 'comment' => 'DateTime Field Comment', 'mass_update' => false, // true or false 'enable_range_search' => false, // true or false 'required' => false, // true or false 'reportable' => true, // true or false 'audited' => false, // true or false 'duplicate_merge' => false, // true or false 'importable' => 'true', // 'true', 'false' or 'required' ), //Encrypt array( 'name' => 'encrypt_field_example', 'label' => 'LBL_ENCRYPT_FIELD_EXAMPLE', 'type' => 'encrypt', 'module' => 'Accounts', 'default_value' => '', 'help' => 'Encrypt Field Help Text', 'comment' => 'Encrypt Field Comment', 'reportable' => true, // true or false 'audited' => false, // true or false 'duplicate_merge' => false, // true or false 'importable' => 'true', // 'true', 'false' or 'required' ), ); require_once('ModuleInstall/ModuleInstaller.php'); $moduleInstaller = new ModuleInstaller(); $moduleInstaller->install_custom_fields($fields); |
Ipotizzando di voler creare il campo crmplatform_field_c per il modulo Accounts, potremmo procedere come mostrato di seguito. Come prima cosa, sarà necessario verificare l’esistenza del campo per poi procedere a crearlo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$bean = BeanFactory::getBean("Accounts"); if(!isset($bean->crmplatform_field_c)){ $fields = array ( array( 'name' => 'crmplatform_field_c', 'label' => 'LBL_CRMPLATFORM_FIELD_C', 'type' => 'varchar', 'module' => 'Accounts', 'help' => '', 'comment' => '', 'default_value' => '', 'max_size' => 255, 'required' => false, 'reportable' => true, 'audited' => false, 'importable' => 'true', 'duplicate_merge' => false, ), ); require_once('ModuleInstall/ModuleInstaller.php'); $moduleInstaller = new ModuleInstaller(); $moduleInstaller->install_custom_fields($fields); } |
La stessa tecnica la potremmo estendere a tutti i moduli per verificar che ogni modulo abbia un campo specifico. Se questo non esiste lo possiamo creare come mostrato sopra.