Link a Lead record to a Project record using logic hook

I have created a one-to-many relationship between Project and Lead records. (called 'project_leads_1' in Studio)

I would like it so that when a new Lead record is created that meets certain criteria (last name = '@Incoming Email Sales Lead'), the Lead record is linked to a specific Project Record ('Incoming Email Sales' Project).

However, it's not working.  What am I missing?

I'm using 'before_save' logic hook on the Leads module

.....

$rel_name = 'project_leads_1';  // name of the relationship in Studio

$incoming_sales_leads_proj = [hard coded ID];

$incoming_service_leads_proj = [hard coded ID];
if($bean->last_name == '@Incoming Email Sales Lead')
{
$bean->load_relationship($rel_name);
$bean->$rel_name->add($incoming_sales_leads_proj);

}
else if($bean->last_name == '@Incoming Email Service Lead')
{
 $bean->load_relationship($rel_name);
 $bean->$rel_name->add($incoming_service_leads_proj);
}

......

Sugar 13.0

Parents
  • it is possible that the $rel_name is not correct, it is also possible that the name is different depending on which side of the relationship you are looking at.

    The name that you see in studio is not necessarily the name of the relationship itself.

    For example the account_leads relationship is called "accounts" when viewed from the Lead side, but it's called "leads" from the Account side. So if the bean is Leads you need to use "accounts" if the bean is Accounts then you need to use "leads" as the link name.

    Check 

    cache/modules/Leads/Leadvardefs.php

    find the relationship in the vardefs and check the "name" field, that is what you should use a link name in the load_relationship

    You can also add an additional check in your code:

    if($bean->load_relationship($rel_name)){
      //then proceed;
    }else{
      //log the error so you know the relationship is not right
    }

    FrancescaS

Reply
  • it is possible that the $rel_name is not correct, it is also possible that the name is different depending on which side of the relationship you are looking at.

    The name that you see in studio is not necessarily the name of the relationship itself.

    For example the account_leads relationship is called "accounts" when viewed from the Lead side, but it's called "leads" from the Account side. So if the bean is Leads you need to use "accounts" if the bean is Accounts then you need to use "leads" as the link name.

    Check 

    cache/modules/Leads/Leadvardefs.php

    find the relationship in the vardefs and check the "name" field, that is what you should use a link name in the load_relationship

    You can also add an additional check in your code:

    if($bean->load_relationship($rel_name)){
      //then proceed;
    }else{
      //log the error so you know the relationship is not right
    }

    FrancescaS

Children
  • Thanks.  We're on Sugar Cloud so the cache files are not readily accessible.  I've requested Sugar support for it.

    In the meantime, I've tried your last suggestion and it does appear that 'project_leads_1' is the only one that doesn't throw an error but it still doesn't link the Lead record to the project.  I'm using the after_save logic hook, as Harald suggested.

    $rel_names = array('projects', 'project', 'project_leads_1', 'project_leads', 'projects_leads');
    foreach($rel_names as $rel_name)
    {
      if($bean->load_relationship($rel_name))
      {
        $GLOBALS['log']->fatal('----- relationship name: ' . $rel_name . ' -----');
        if($bean->last_name == 'Incoming Email Sales Lead')
        {
          ...
        }

      }
      else
      {
        $GLOBALS['log']->fatal('----- Error: Incorrect relationship name: ' . $rel_name . ' -----');
      }

    }