What you need is first a running number, like the case number or bug number .
This can be realized by an autoincrement field in your module. If the module does not have an autoincrement field you can create your own by a vardef extension, e.g. for opportunities in custom/Extension/modules/Opportunities/Ext/Vardefs/ with a file like this:
<?php $dictionary['Opportunity']['fields']['opportunity_index'] = array ( 'name' => 'opportunity_index', 'vname' => 'LBL_OPP_INDEX', 'type' => 'int', 'readonly' => true, 'len' => 11, 'required' => true, 'auto_increment' => true, 'unified_search' => true, 'full_text_search' => array ( 'boost' => 3, ), 'comment' => 'Visual unique identifier', 'duplicate_merge' => 'disabled', 'disable_num_format' => true, 'studio' => array ( 'quickcreate' => false, ), ); $dictionary['Opportunity']['indices']['number'] = array ( 'name' => 'oppnumk', 'type' => 'unique', 'fields' => array ( 0 => 'opportunity_index', ), ); $dictionary['Opportunity']['indices'][1] = array ( 'name' => 'opportunity_index', 'type' => 'unique', 'fields' => array ( 0 => 'opportunity_index', ), ); ?>
During QR&R you must make sure that all SQL commands for the opportunity table are exectuted in one SQL statement.
Then you can create a custom field e.g. opportunity_number_c and add a prefix and/or suffix in a logic_hook after_save.to the running index e.g. like this:
<?php class my_OpportunitiesHookImpl { public function afterSave($bean, $event, $arguments) { $prefix = "OPP#"; $suffix = "_crm"; //Prevent endless loop by checking alread set number: if ($bean->opportunity_number_c == "") { $number = $bean->opportunity_index; $number = "000000" . $number; $number = substr($number, -6); $opp = BeanFactory::getBean('Opportunities', $bean->id); $opp->opportunity_number_c = $prefix; $opp->opportunity_number_c .= $number; $opp->opportunity_number_c .= $suffix; $opp->save(); } } }
The format can be just as you want, you can even add some parte of the date to it.
Harald Kuske
Principal Solution Architect – Professional Services, EMEA
hkuske@sugarcrm.com
SugarCRM Deutschland GmbH