Skip to content

Instantly share code, notes, and snippets.

@amusarra
Last active January 4, 2016 04:48
Show Gist options
  • Save amusarra/8570573 to your computer and use it in GitHub Desktop.
Save amusarra/8570573 to your computer and use it in GitHub Desktop.
Populate a custom contact field from the account value
<?php
$viewdefs ['Contacts'] =
array (
'DetailView' =>
array (
'templateMeta' =>
array (
'form' =>
array (
'buttons' =>
array (
0 => 'EDIT',
1 => 'DUPLICATE',
2 => 'DELETE',
3 => 'FIND_DUPLICATES',
4 =>
array (
'customCode' => '<input type="submit" class="button" title="{$APP.LBL_MANAGE_SUBSCRIPTIONS}" onclick="this.form.return_module.value=\'Contacts\'; this.form.return_action.value=\'DetailView\'; this.form.return_id.value=\'{$fields.id.value}\'; this.form.action.value=\'Subscriptions\'; this.form.module.value=\'Campaigns\'; this.form.module_tab.value=\'Contacts\';" name="Manage Subscriptions" value="{$APP.LBL_MANAGE_SUBSCRIPTIONS}"/>',
'sugar_html' =>
array (
'type' => 'submit',
'value' => '{$APP.LBL_MANAGE_SUBSCRIPTIONS}',
'htmlOptions' =>
array (
'class' => 'button',
'id' => 'manage_subscriptions_button',
'title' => '{$APP.LBL_MANAGE_SUBSCRIPTIONS}',
'onclick' => 'this.form.return_module.value=\'Contacts\'; this.form.return_action.value=\'DetailView\'; this.form.return_id.value=\'{$fields.id.value}\'; this.form.action.value=\'Subscriptions\'; this.form.module.value=\'Campaigns\'; this.form.module_tab.value=\'Contacts\';',
'name' => 'Manage Subscriptions',
),
),
),
),
),
'maxColumns' => '2',
'widths' =>
array (
0 =>
array (
'label' => '10',
'field' => '30',
),
1 =>
array (
'label' => '10',
'field' => '30',
),
),
'includes' =>
array (
0 =>
array (
'file' => 'modules/Leads/Lead.js',
),
),
'useTabs' => false,
'tabDefs' =>
array (
'LBL_CONTACT_INFORMATION' =>
array (
'newTab' => false,
'panelDefault' => 'expanded',
),
'LBL_PANEL_ADVANCED' =>
array (
'newTab' => false,
'panelDefault' => 'expanded',
),
'LBL_PANEL_ASSIGNMENT' =>
array (
'newTab' => false,
'panelDefault' => 'expanded',
),
),
),
'panels' =>
array (
'lbl_contact_information' =>
array (
0 =>
array (
0 =>
array (
'name' => 'full_name',
'label' => 'LBL_NAME',
),
),
1 =>
array (
0 =>
array (
'name' => 'title',
'comment' => 'The title of the contact',
'label' => 'LBL_TITLE',
),
1 =>
array (
'name' => 'phone_work',
'label' => 'LBL_OFFICE_PHONE',
),
),
2 =>
array (
0 =>
array (
'name' => 'department',
'label' => 'LBL_DEPARTMENT',
),
1 =>
array (
'name' => 'phone_mobile',
'label' => 'LBL_MOBILE_PHONE',
),
),
3 =>
array (
0 =>
array (
'name' => 'account_name',
'label' => 'LBL_ACCOUNT_NAME',
'displayParams' =>
array (
'enableConnectors' => true,
'module' => 'Contacts',
'connectors' =>
array (
0 => 'ext_rest_linkedin',
),
),
),
1 =>
array (
'name' => 'phone_fax',
'label' => 'LBL_FAX_PHONE',
),
),
4 =>
array (
0 =>
array (
'name' => 'primary_address_street',
'label' => 'LBL_PRIMARY_ADDRESS',
'type' => 'address',
'displayParams' =>
array (
'key' => 'primary',
),
),
1 =>
array (
'name' => 'alt_address_street',
'label' => 'LBL_ALTERNATE_ADDRESS',
'type' => 'address',
'displayParams' =>
array (
'key' => 'alt',
),
),
),
5 =>
array (
0 =>
array (
'name' => 'email1',
'studio' => 'false',
'label' => 'LBL_EMAIL_ADDRESS',
),
),
6 =>
array (
0 =>
array (
'name' => 'description',
'comment' => 'Full text of the note',
'label' => 'LBL_DESCRIPTION',
),
),
),
'LBL_PANEL_ADVANCED' =>
array (
0 =>
array (
0 =>
array (
'name' => 'report_to_name',
'label' => 'LBL_REPORTS_TO',
),
1 =>
array (
'name' => 'sync_contact',
'comment' => 'Synch to outlook? (Meta-Data only)',
'label' => 'LBL_SYNC_CONTACT',
),
),
1 =>
array (
0 =>
array (
'name' => 'lead_source',
'comment' => 'How did the contact come about',
'label' => 'LBL_LEAD_SOURCE',
),
1 =>
array (
'name' => 'do_not_call',
'comment' => 'An indicator of whether contact can be called',
'label' => 'LBL_DO_NOT_CALL',
),
),
2 =>
array (
0 =>
array (
'name' => 'campaign_name',
'label' => 'LBL_CAMPAIGN',
),
),
),
'LBL_PANEL_ASSIGNMENT' =>
array (
0 =>
array (
0 =>
array (
'name' => 'assigned_user_name',
'label' => 'LBL_ASSIGNED_TO_NAME',
),
1 =>
array (
'name' => 'account_assigned_to',
'label' => 'LBL_ACCOUNT_ASSIGNED_TO',
),
2 =>
array (
'name' => 'assigned_account_user_link',
'label' => 'LBL_ACCOUNT_ASSIGNED_TO',
),
3 =>
array (
'name' => 'date_modified',
'customCode' => '{$fields.date_modified.value} {$APP.LBL_BY} {$fields.modified_by_name.value}',
'label' => 'LBL_DATE_MODIFIED',
),
),
1 =>
array (
0 =>
array (
'name' => 'date_entered',
'customCode' => '{$fields.date_entered.value} {$APP.LBL_BY} {$fields.created_by_name.value}',
'label' => 'LBL_DATE_ENTERED',
),
),
),
),
),
);
?>
<?php
# File: custom/Extension/modules/Contacts/Ext/Language/it_it.lang.ext.php
$mod_strings = array_merge($mod_strings,
array(
'LBL_ACCOUNT_ASSIGNED_TO' => "Account assegnato a",
)
);
<?php
# File: custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_account_assigned_to.ph
$dictionary['Contact']['fields']['account_assigned_to'] = array (
'name' => 'account_assigned_to',
'rname' => 'assigned_user_id',
'id_name' => 'account_id',
'vname' => 'LBL_ACCOUNT_ASSIGNED_TO',
'type' => 'relate',
'join_name'=>'accounts',
'table' => 'accounts',
'isnull' => 'true',
'module' => 'Accounts',
'dbType' => 'id',
'reportable' => false,
'source' => 'non-db',
'massupdate' => false,
'duplicate_merge' => 'disabled',
);
$dictionary['Contact']['fields']['assigned_account_user_link'] = array (
'name' => 'assigned_account_user_link',
'type' => 'relate',
'vname' => 'LBL_ASSIGNED_TO_USER',
'join_name'=>'Users',
'table' => 'Users',
'module' => 'Users',
'source' => 'non-db',
'rname' => 'full_name',
'id_name' => 'account_assigned_to',
'duplicate_merge'=>'enabled'
);
?>
@gianlucapoli
Copy link

Grazie per l'aiuto, ma purtroppo non riesco a far funzionare il codice..

Non mi da errore e non mi aggiunge i 3 campi definiti in custom/modules/Contacts/metadata/detailviewdefs.php

Tu come fai debug su sugar? Il log non aiuta, non dando errore non capisco dove sia il problema, potrebbe essere un carattere sbagliato, come un errore diverso..

Aggiungendo il tuo codice, e facendo un quick repair and rebuild, non vengono aggiunti i campi alla vista dettagliata, magari questa sera provo su una installazione "vergine" di sugar poi ti faccio sapere.

Se hai cmq altri consigli da darmi sono sempre ben accetti (io cmq prima di chiedere a te, avevo provato da solo ed ero molto vicino alla soluzione che mi hai proposto tu ).

Grazie ancora

@amusarra
Copy link
Author

Ciao Gianluca, è veramente strano. Ti ho aggiornato il detailviewdef con la versione completa e in ogni caso di ho messo sulla pagina del gruppo lo zip che contiene la personalizzazione del modulo contact che potresti direttamente installare.

In genere per il debug sono più che sufficienti i file di log di SugarCRM (a livello di debug) e quelli di PHP. Per situazioni più anomale allora utilizzo Eclipse + XDebug.

Bye,
Antonio.

@gianlucapoli
Copy link

Ciao Antonio, l'installazione attraverso il modulo ha funzionato.

Ora analizzando il codice vedo che i file contenuti nello zip del modulo Contact custom vengono inseriti:

sugarcrm\custom\EJ8TJS~8\modules\Contacts\Ext\Vardefs\sugarfield_account_assigned_to.php

mentre mi sarei aspettato di trovarlo in:

sugarcrm\custom\Extension\modules\Contacts\Ext\Vardefs\sugarfield_account_assigned_to.php

e ancora:

sugarcrm\custom\working\modules\Contacts\metadata\detailviewdefs.php

pensavo dovesse andare in:

sugarcrm\custom\modules\Contacts\metadata\detailviewdefs.php

Quello che non capisco è:

ora le modifiche apportate mediante il modulo Contatti "custom" (lo zip che mi hai passato tu) funzionano correttamente, i file sono nelle directory che ti ho detto sopra, mentre nelle directory

custom/modules/Contacts/metadata/detailviewdefs.php
custom/Extension/modules/Contacts/Ext/Vardefs/sugarfield_account_assigned_to.php

ci sono ancora i miei file di ieri in cui avevo inserito a mano le modifiche che mi avevi consigliato tu, io mi aspettavo che avrebbe sovrascritto questi file, con la versione dello zip...

La directory EJ8TJS~8 in sugarcrm\custom\ esiste di default o è stata creata nella mia versione per contenere modifiche specifiche? (io sto lavorando su una versione di sugar 6.5.11 con personalizzazioni apportate da una società esterna).

Il tuo aiuto è stato preziosissimo, ma ho notato che viene inserito l'id dell'account (azienda) collegato, mentre a me serve il nome completo dell'utente assegnato all'account in relazione con il contatto (quindi ora ho un id che punta ad una azienda, di quella azienda mi serve il nome dell'assigned_user_id e la devo portare sul contatto).

Quindi in definitiva, per proseguire a sviluppare modifiche sul campo nuovo devo lavorare sulle directory in cui trovo i file dello zip (sugarcrm\custom\EJ8TJS~8\modules\Contacts\Ext\Vardefs\ sugarcrm\custom\working\modules\Contacts\metadata\ )?

Infine voglio ringraziarti per l'aiuto che mi stai dando con impegno quotidiano, davvero apprezzato. GRAZIE

@gianlucapoli
Copy link

In realtà il link che compare sulla detailview del contatto porta alla scheda detailview dell'azienda, mentre il testo è l'id corretto dello user assegnato all'azienda...

@gianlucapoli
Copy link

In più se apporto modifiche alla maschera di dettaglio le modifiche apportate con lo zip svaniscono O_o

@amusarra
Copy link
Author

Ciao Gianluca,
sono stato molto impegnato e trovo solo adesso il tempo per risponderti.
L'esempio da me riportato mostra l'id dell'utente a cui è assegnato l'account collegato al contatto. Ho aggiornato il vardefext e detailview per mostrare il nome completo dell'utente. Spero che questo sia il tuo desiderato.

Ma la directory EJ8TJS~8 presente sulla tua installazione si chiama proprio così o si tratta di un errore di copia & incolla? Questo nome non mi torna, dovrebbe essere Ext, non vorrei che sia stato fatto qualche genere di modifica alquanto strana.

La directory working è utilizzata in genere dall'ambiente di studio. Mi sembra comunque strano che le modifiche apportate dall'installazione dello zip svaniscano con la modifica in studio.

Bye,
Antonio.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment