Perché non si ottengono risultati nei report usando come filtro le select multiple?
E’ un bug presente da alcune versioni in SuiteCRM per cui, all’interno dei filtri dei report, le tendine a selezione multipla vengono codificate in modo errato nella generazione dell’interrogazione al database.
In parole povere con la tendina a selezione multipla il report non funziona. Vediamo come risolvere il problema.
La risoluzione esposta di seguito non è upgrade safe, questo significa che se aggiornate SuiteCRM, molto probabilmente le modifiche descritte sotto verranno cancellate.
Al termine del file
modules/AOR_Reports/AOR_Report.php
dopo l’ultima parentesi graffa inserire la funzione MyOwn_unencodeMultienum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function MyOwn_unencodeMultienum($string) { if (is_array($string)) { return $string; } if (substr($string, 0 ,1) == "^" && substr($string, -1) == "^") { $string = substr($string, 1); $string = substr($string, 0, -1); } return explode('^,^', $string); } |
Sostituire quindi la chiamata alla funzione unencodeMultienum (intorno alla riga 1534) con la nuova funzione MyOwn_unencodeMultienum ottenendo
1 2 3 |
$multi_values = MyOwn_unencodeMultienum($condition->value); |
Ora non resta che modificare l’operatore di confronto della query, alcune righe sotto inserendo l’operatore REGEXP
1 2 3 4 5 6 7 8 9 10 |
//codice da sostituire //$value .= $field.' '.$app_list_strings['aor_sql_operator_list'][$condition->operator]." '".$multi_value."'"; //codice da inserire al posto della riga precedente if($condition->operator == 'Equal_To') $value .= $field.' '.'REGEXP'." '".$multi_value."'"; else $value .= $field.' '.'NOT REGEXP'." '".$multi_value."'"; |
Con le modifiche precedenti andiamo a modificare la costruzione dell’interrogazione al database.