SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Расширение логики модулей или Logic Hooks. Часть 2

В предыдущей статье мы рассмотрели теорию создания logic hooks. Сегодня разберем реальный практический пример использования данных «логических крюков» :smile: . А заодно и увидим механизм автоматического создания relationship (связей) между модулями.

Задача.
У одной из компаний, для которой мы настраивали SugarCRM, большинство контрагентов состоит из одного контакта. Такая ситуация, думаю, присуща не только им. Так вот представьте теперь, как неудобно при создании сделки каждый раз, помимо контрагента, выбирать в сделке в субпанели контакт, который к тому же один. Решили: если контакт у контрагента один, то автоматически добавлять связь со сделкой. Если нет, то тогда менеджер добавляет связь вручную (вы можете легко исправить на добавление связи со всеми контактами, только первым и т.д.). Как видим, для решения этой задачи нам необходимо изменить логику модуля сделки. А именно – добавить действие после сохранения записи. Напомню, что это событие after_save.

Как мы уже знаем из первой части (теоретической), надо создать файл с описанием «хука» по такому пути:

custom/modules/Opportunities/logic_hooks.php

Добавим следующее содержимое:

1
2
3
4
5
6
<?php
$hook_version = 1;
$hook_array = Array();
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(101, 'Проверка и добавление авто связи с контактом', 'custom/Extension/modules/Opportunities/Ext/CustomLogicHook.php','OpportunityCustomLogicHook', 'afterSaveRelationshipToContact');
?>

Если же у вас уже есть такой файл (многие сторонние модули могли уже создать файлы с определением logic hooks), то вам необходимо только добавить описание самого хука. Как видно из описания, после создания сделки вызывается функция: afterSaveRelationshipToContact находящаяся в файле по пути custom/Extension/modules/Opportunities/Ext/CustomLogicHook.php.

Содержимое этого файла:

Ccode class="php plain"><?php
class OpportunityCustomLogicHook extends SugarBean
{
  function afterSaveRelationshipToContact(SugarBean $bean, $event, $arguments)
  {
    $related_contacts = $bean->get_related_list(new Contact(),"contacts");
    if ($related_contacts)
    {
      if (isset($related_contacts['list']) and count($related_contacts['list']) == 0)
      {
        $related_accounts = $bean->get_related_list(new Account(),"accounts");
        if (isset($related_accounts['list']) and count($related_accounts['list']) == 1)
        {
          $account_bean = $related_accounts['list'][0];
          $account_bean->load_relationship('contacts');
          $contact_list = $account_bean->contacts->getBeans(loadBean('Contacts'));
          if (is_array($contact_list) and count($contact_list) == 1)
          {
            $contact = $contact_list[0];
            $bean->contacts->add($contact->id);
          }
        }
        else
          return;
      }
    }
  }
}
?>

Прокомментирую подробно код.

В данной функции мы получаем bean класс сделки. Так что дальше в коде $bean — это класс Opportunity ().

$related_contacts = $bean->get_related_list (new Contact (),"contacts"); — получаем спискок всех контактов, связанных со сделкой.

if (isset ($related_contacts['list']) and count ($related_contacts['list']) == 0); — если связь с модулем контактов действительно существует, и количество контактов, относящихся к данной сделке равно 0, т.е. не существует связанных контактов со сделкой, то добавим автоматическую связь с контактом.

$related_accounts = $bean->get_related_list (new Account (),"accounts"); – получаем контрагента связанного, с данной сделкой. Account – это bean класс для работы с контрагентами.

if (isset ($related_accounts['list']) and count ($related_accounts['list']) == 1) – существует контрагент, связанный с этой сделкой (а иначе мы не сможем добавить связанные контакты, так как не знаем, с каким контрагентом связана сделка).

$account_bean = $related_accounts['list'][0]; — берем класс контрагента, со сделкой может быть связан только один контрагент.

$account_bean->load_relationship ('contacts'); — загружаем связь с контактами, чтобы получить связанные с этим контрагентом контакты.

$contact_list = $account_bean->contacts->getBeans (loadBean ('Contacts'));
 — получаем список связанных контактов.

1
2
3
4
5
if (is_array($contact_list) and count($contact_list) == 1)
{
    $contact = $contact_list[0]; //Только один контакт
    $bean->contacts->add($contact->id); //Добавим связь с этим контактом
}

Я добавлял связь, только если у контрагента один контакт, вы можете, например, в цикле, добавить связь со всеми контактами.

Теперь проверяем нашу логику.

Создаем сделку. При создании сделки выбираем любого контрагента с одним связанным контактом, сохраняем сделку. И наблюдаем в субпанели сразу связь с контактом.

Субпанель контакта в модуле сделки

В следующей статьем мы обязательно рассмотрим, как на основе logic hooks SugarCRM сделать уведомления менеджерам.

Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.

Последнее изменениеПонедельник, 10 июля 2017 18:08
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 18773 раз

6866 комментарии

  • Wholesale NFL Jerseys China

    Wholesale NFL Jerseys China

    Комментировать 02.09.2017 15:59

    Take time to shop around and ask plenty of questions to the different day care centers that you are interested in. Anything from celebrity news, hobbies to house cleaning tips. This support is largely attributed by financial cutbacks by the Dutch government in arts funding. This keeps open the chance to sell slow moving items while sellers can focus their primary sales efforts on Ebay. Now this does work sometimes, but only for a short while and can have major effects on the system later on, so I do not recommend it.
    Wholesale NFL Jerseys China

  • Wholesale NFL Jerseys

    Wholesale NFL Jerseys

    Комментировать 02.09.2017 15:59

    I'll learn from it.This may be accomplished properly with the community banking institution. By signing up with distributors that drop ship, Ebay sellers can setup a store that requires very little maintenance. A guide will walk you step by step through the process of fixing almost any error code you could receive on the Xbox 360, including the 3 red rings of death. Find out which of these tips work for you, and make your home based network marketing business a great success, by using them well.
    Wholesale NFL Jerseys [url=http://www.cheapnfljerseysonline.us.com/]Wholesale NFL Jerseys[/url]

  • imitazione cartier love prezzo

    imitazione cartier love prezzo

    Комментировать 02.09.2017 15:49

    I have been absent for some time, but now I remember why I used to love this website. Thanks, I’ll try and check back more often. How frequently you update your website?
    imitazione cartier love prezzo

  • Angel Brides Wedding Dresses and Bridal Gowns

    Angel Brides Wedding Dresses and Bridal Gowns

    Комментировать 02.09.2017 15:48

    An interesting discussion is worth comment. I think that you should write more on this topic, it might not be a taboo subject but generally people are not enough to speak on such topics. To the next. Cheers

  • PiE

    PiE

    Комментировать 02.09.2017 14:41

    Hi there, You have done a great job. I¡®ll certainly digg it and personally suggest to my friends. I'm sure they will be benefited from this web site.

  • Angel Brides Wedding Dresses and Bridal Gowns

    Angel Brides Wedding Dresses and Bridal Gowns

    Комментировать 02.09.2017 14:41

    Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you can do with some pics to drive the message home a little bit, but other than that, this is wonderful blog. An excellent read. I will definitely be back.

  • cartier men copy ring

    cartier men copy ring

    Комментировать 02.09.2017 14:31

    Hi Good Day for you, I just navigating the topic trying to find an inspiration or else an fascinating article. Significant topic, be grateful for sharing. Robert
    cartier men copy ring

  • montre tank cartier prix faux

    montre tank cartier prix faux

    Комментировать 02.09.2017 14:30

    I every time used to study post in news papers but now as I am a user of web thus from now I am using net for posts, thanks to web.|
    montre tank cartier prix faux

  • UK Press Brake Tool Manufacturers

    UK Press Brake Tool Manufacturers

    Комментировать 02.09.2017 14:29

    Spot on with this write-up, I truly think this website needs much more consideration. I¡®ll probably be again to read much more, thanks for that info.

  • copia bracciale oro cartier

    copia bracciale oro cartier

    Комментировать 02.09.2017 13:17

    Thanks for the good writeup. It actually was a enjoyment account it. Look complex to more delivered agreeable from you! However, how can we communicate?|
    copia bracciale oro cartier http://www.bestlovegift.nl/it/

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости

  • 1
  • 2
  • 3
  • 4