Logic_hooks rn twice

Hello,
my before_save code is working right well:

<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); class Generate { function generateID(&$bean, $event, $arguments) { $logged_user_env = $GLOBALS['current_user']->emp_dirsource_c; $GLOBALS['log']->fatal('The current envirorment: ' . ' ' . $logged_user_env); $query = "SELECT MAX(dbgit_leadid_c) from leads_cstm "; $results = $bean->db->query($query, true); $row = $bean->db->fetchByAssoc($results); $GLOBALS['log']->fatal('The max LeadCode is: ' . ' ' .$row['MAX(dbgit_leadid_c)']); // Check if its empty...this will ensure that the update will be done everytime even if not necessary if(empty($bean->dbgit_leadrefcode_c) || empty($bean->dbgit_leadid_c)) { $bean->retrieve($bean->id); $GLOBALS['log']->fatal('The LeadID is: ' . ' ' .$bean->id); // Prepare Lead Number varchar $newID = sprintf("%05d",$row['MAX(dbgit_leadid_c)']+1); $prefix = "DBG"; $year = date("Y"); $type = "L"; $separator = "-"; // Merge all variables $lead_ref_number = $prefix . $logged_user_env . $separator . $year . $separator . $newID . $separator . $type; // Update the record with newly generated value $bean->db->query("UPDATE leads_cstm SET dbgit_leadrefcode_c ='{$lead_ref_number}',dbgit_leadid_c ='{$newID}' WHERE id_c='{$bean->id}'"); $bean->save(); } $GLOBALS['log']->fatal('The new LeaID is: ' . ' ' .$lead_ref_number); } } ?>

Editing records ther’s no problem but when i create a new one the log shows me “Duplicate Entry for database” and i can see that it runs twice.

I’ve also tried some loop prevents technique without luck.

What i have missing?

Thank you

Hi,

It seems issue in your code.

As I understood In before_save hook are trying to save bean again. There is no need to save again as crm will save it.

Yes…correct it was wrong…replaced with:

// Merge all variables
$lead_ref_number = $prefix . $logged_user_env . $separator . $year . $separator . $newID . $separator . $type;

        // Update the record with newly generated value
        //$bean->db->query("UPDATE leads_cstm SET dbgit_leadrefcode_c ='{$lead_ref_number}',dbgit_leadid_c ='{$newID}' WHERE id_c='{$bean->id}'");
        $bean->dbgit_leadrefcode_c = $lead_ref_number;
        $bean->dbgit_leadid_c = $newID;

Thank you