Skip to content

Instantly share code, notes, and snippets.

@amusarra
Last active January 4, 2016 04:48
Show Gist options
  • Select an option

  • Save amusarra/8570573 to your computer and use it in GitHub Desktop.

Select an option

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'
);
?>
@amusarra
Copy link
Copy Markdown
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
Copy Markdown

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
Copy Markdown

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
Copy Markdown

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

@amusarra
Copy link
Copy Markdown
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