Come personalizzare la visualizzazione di qualsiasi campo nei SubPanel
In SugarCRM CE 6.5 o in SuiteCRM, la visualizzazione dei campi nei SubPanel segue più o meno le stesse regole della visualizzazione nella ListView, ma a volte sarebbe utile poter vedere qualche campo in un modo particolare, al di fuori dello standard.
In questo articolo vi mostro come creare una visualizzazione del tutto personalizzabile di un qualsiasi campo presente in un SubPanel.
Ho trovato che è possibile modificare il modo in cui un campo viene visualizzato nei SubPanel, ridefinendo il "widget" standard che si occupa, appunto, di visualizzarlo. Il tutto in modo totalmente Upgrade-Safe (ovvero come customizzazione standard che non viene persa in caso di aggiornamento di release di SugarCRM CE o SuiteCRM).
Nel file che definisce il SubPanel per un determinato modulo, ad esempio in custom\modules\<module_name>\metadata\subpanels\<subpanel_name>.php, possiamo cambiare il widget incaricato di visualizzare un determinato campo, utilizzando in particolare il widget SubPanelDetailViewLink che è stato creato per visualizzare il campo sotto forma di link alla DetailView di un determinato oggetto. Normalmente questo widget viene usato per i campi Relate o Flex Relate o Parent o per il campo Name, ma noi lo sfrutteremo per realizzare la visualizzazione che vogliamo noi.
Oltre a questo aggiungiamo un nostro parametro per indicare il tipo di visualizzazione che vogliamo ottenere.
Ecco un esempio:
'parent_type' => array(
'name' => '<field_name>',
'vname' => 'LBL_QUOTE',
'widget_class' => 'SubPanelDetailViewLink',
'custom_type' => 'show_quote',
'width' => '10%',
'sortable' => false,
),
In questo frammento di codice abbiamo appunto cambiato il parametro "widget_class" per riferirci al widget che personalizzeremo e abbiamo aggiunto il parametro "custom_type" per indicare come vorremo mostrare questo campo <field_name>.
Ora copiamo il file include\generic\SugarWidgets\SugarWidgetSubPanelDetailViewLink.php in custom\include\generic\SugarWidgets\SugarWidgetSubPanelDetailViewLink.php, per realizzare la nostra personalizzazione.
In cima al metodo public function displayList(&$layout_def), andremo a mettere la gestione della nostra visualizzazione particolare, avendo cura di verificare il parametro "custom_type" (e di lasciare il resto del codice seguente invariato):
public function displayList(&$layout_def) {
if (! empty($layout_def['custom_type'])) {
$bean = BeanFactory::getBean($layout_def['module'], $layout_def['fields']['ID']);
switch ($layout_def['custom_type']) {
case 'show_quote':
return '<whatever_we_want>';
}
}Qui abbiamo verificato se è presente il parametro "custom_type", se sì, possiamo recuperare il bean che stiamo visualizzando tramite $layout_def['module'] e $layout_def['fields']['ID'] e poi se il tipo di visualizzazione richiesta è "show_quote", come abbiamo specificato nella definizione del subpanel, nel parametro "custom_type".
Naturalmente allo "switch" possiamo aggiungere altri "case" per gestire altre visualizzazioni particolari sempre in base al nostro parametro "custom_type".
Dopo un “Ripara velocemente e Ricostruisci“, il nostro "trucchetto" dovrebbe entrare in funzione!
In questi esempi:
- <module_name> significa il nome del modulo, così come lo vedi nell'URL, ad esempio, Contacts, Leads, Accounts, ecc.
- <view_name> significa il nome della vista, ad esempio editview, detailview, ecc.
- <field_name> indica il nome del campo di cui stiamo personalizzando la visualizzazione.
- <whatever_we_want>: indica il punto in cui inserire la nostra visualizzazione personalizzata, tenendo conto che qui abbiamo a disposizione l'oggetto $bean che fa riferimento al bean visualizzato in questa riga del SubPanel.
Problemi? Contattaci per una consulenza professionale su SugarCRM CE o SuiteCRM.