Функции по созданию связи один ко многим в Vtiger CRM

Функции по созданию связи один ко многим в Vtiger CRM

Программисты и разработчики задаются вопросом: "Как связать модули в Vtiger CRM между собой?". При этом, самая распространённая связь между модулями - это 1 ко многим.

Эта связь означает, что в карточке родительского (или основного) модуля присутствует поле, в котором вы можете выбрать нужную запись дочернего модуля. А в карточке дочернего модуля есть вкладка, при клике на которую вы можете увидеть все связанные с этой карточкой записи.

Таким образом, чтобы правильно организовать связь один ко многим в Vtiger CRM, нам надо проделать следующее действия:

  • в первом модуле мы создаём поле, которое связывает нас с записью дочернего модуля;
  • во втором модуле мы создаём связанный список, который позволит нам просматривать те записи, которые были выбраны через данное поле.

Иными словами, нам потребуются две функции. Их можно использовать в работе, например, когда вы пишете пользовательские функции или скрипты по созданию модуля. Их использование позволит вам быстро организовать связь "один ко многим" между двумя модулями.

public function createRelationship($module1, $module2, $fieldLabel)

    {

    include_once "vtlib/Vtiger/Module.php";

        $block = 'LBL_CUSTOM_INFORMATION';

        $module = Vtiger_Module::getInstance($module1);

        $module1Class = Vtiger_Module::getClassInstance($module1);

        $block1 = Vtiger_Block::getInstance($block, $module);

        $columnName = "";

        if ($actionRelatedList == true) {

            $columnName = "cf_nrl_" . strtolower($module2) . rand(1, 1000) . "_id";

        } else {

            $columnName = "cf_" . strtolower($module2) . "_id";

        }

        $fieldName = $columnName;

        $field1 = new Vtiger_Field();

        $field1->label = $fieldLabel;

        $field1->name = $fieldName;

        $field1->table = $module1Class->table_name;

        $field1->column = $fieldName;

        $field1->generatedtype = 2;

        $field1->columntype = "INT(10)";

        $field1->uitype = 10;

        $field1->typeofdata = "I~O";

        $field1->quickcreate = 2;

        $field1->sequence = 7;

        $block1->addField($field1);

        $field1->setRelatedModules(array($module2));

        $block1->save($module);

        return $field1->id;

    }

Функция createRelationship позволяет нам создать в первом модуле (module1) поле, связанное со вторым модулем (module2), которое нам позволит выбирать нужные записи из второго модуля и связывать их с первым. Функция создаст поле в формате cf_potentials_id, где potentials - название связанного модуля. Поле будет создано в блоке LBL_CUSTOM_INFORMATION.

Функция принимает следующие параметры:

  • module1 - главный модуль, в который будет добавлено поле со связанным модулем,
  • module2 - модуль, с которым мы планируем сделать связь через данное поле,
  • fieldLabel - как мы планируем назвать наше новое поле. Желательно название полей делать на английском и затем переводить его через файлы переводов.

После того, как мы сделали в нашем главном модуле связь со вторым модулем, то теперь во втором модуле мы должны видеть все записи, которые на данный момент к нему привязаны. Для этого нам потребуется вывести вкладку связанных списков, при клике на которую будут выведены нужные нам связанные записи. Сделать это можно через другую функцию:

 

    /**

     * @param $module1

     * @param $module2

     * @param $relListLabel

     */

    public function addRelatedList($module1, $module2, $relListLabel, $actions)

    {

        include_once "vtlib/Vtiger/Module.php";

        $module = Vtiger_Module::getInstance($module2);

        $module->setRelatedList(Vtiger_Module::getInstance($module1), $relListLabel, $actions, "get_dependents_list");

    }

 

Функция принимает в себя следующие параметры:

  • module1 - модуль, в котором мы планируем вывести связанный список,
  • module2 - модуль, в котором мы ранее создавали поле и который будет выводить связанные записи,
  • relListLabel - заголовок списка, обычно оно совпадает с module2,
  • actions - принимает массив действий, которые можно делать в списке. Например: array('add', 'select') - данный массив позволит добавлять новые и выбирать существующие записи в связанном списке.

Внимание! Используйте данные функции на свой страх и риск. И не забывайте делать бекапы данных перед их использованием. Изменения необратимы.

Если у вас остались вопросы, с удовольствием на них отвечу через форму обратной связи.

Популярное

Самые популярные посты

Как быть максимально продуктивным на удалённой работе?
Business

Как быть максимально продуктивным на удалённой работе?

Я запустил собственный бизнес и намеренно сделал всё возможное, чтобы работать из любой точки мира. Иногда я сижу с своём кабинете с большим 27-дюймовым монитором в своей квартире в г. Чебоксары. Иногда я нахожусь в офисе или в каком-нибудь кафе в другом городе.

Привет! Меня зовут Сергей Емельянов и я трудоголик
Business PHP

Привет! Меня зовут Сергей Емельянов и я трудоголик

Я программист. В душе я предприниматель. Я начал зарабатывать деньги с 11 лет, в суровые 90-е годы, сдавая стеклотару в местный магазин и обменивая её на сладости. Я зарабатывал столько, что хватало на разные вкусняшки.

Акция! Профессиональный разработчик CRM за 2000 руб. в час

Выделю время под ваш проект. Знания технологий Vtiger CRM, SuiteCRM, Laravel, Vue.js, Golang, React.js. Предлагаю варианты сотрудничества, которые помогут вам воспользоваться преимуществами внешнего опыта, оптимизировать затраты и снизить риски. Полная прозрачность всех этапов работы и учёт временных затрат. Оплачивайте только рабочие часы разработки после приемки задачи. Экономьте на платежах по его содержанию разработчика в штате. Возможно заключение договора по ИП. С чего начать, чтобы нанять профессионального разработчика на full-time? Просто заполните форму!

Telegram
@sergeyem
Telephone
+4915211100235