Автоматическая подстановка значений при создании записей в сабпанели в SugarCRM

Материал из SpravkaCRM.Ru - Справочник по CRM

Перейти к: навигация, поиск


Разработка и внедрение CRM-систем

Разработка и внедрение CRM-систем "под ключ" на базе SugarCRM. Любые задачи для любого вида бизнеса. Установка бесплатной CRM-системы бесплатно. Интеграция с существующей инфраструктурой, бухгалтерской программой, телефонией. Доработка существующих проектов. Обучение персонала.
+7 (495) 646-06-27
8 (800) 555-06-28 (звонок бесплатный)
evgenjekson (звонок бесплатный)
195938768
info@lemars.ru
узнать подробнее ...
CRM-система: SugarCRM
Версия: CE 6.4.1 (Другие версии)
Интерфейс: русский
URL: http://ce.sugarcrm.crmsystem.ru
Пользователь: jim, sarah, sally, max, will, chris
Пароль: как и имя пользователя
Тип доступа: пользовательский, без административных прав

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

В SugarCRM, при просмотре какой-либо записи, внизу страницы располагаются сабпанельки с записями других модулей, связанными с текущей записью. Например: при просмотре какого-либо контрагента, внизу страницы в виде сабпанели имеется информация о контактах, принадлежащих этому контрагенту:

Или, при просмотре сделки, внизу в сабпанелях имеется информация о мероприятиях, проводимых в рамках этой сделки:

Добавить новую встречу, которую надо провести по текущей сделке, можно нажав кнопку "Назначить встречу":

Система предложит ввести данные о новой встрече.

Допустим, нам надо автоматизировать ввод темы встречи. Тема должна быть в следующем формате:

Встреча: <ТемаСделки>

Для достижения желаемого результата нам надо отредактировать функционал, ответственный за формирование кнопки "Назначить встречу".

Классы, отдающие HTML-код той или иной кнопки, находятся в папке /include/generic/SugarWidgets. Нам нужны файлы, имеющие префикс SugarWidgetSubPanel. Но, как мы видим, таких файлов нашлось достаточно много. Какой же файл отвечает за вывод требуемой нам кнопки "Назначить встречу"?

Для ответа на этот вопрос мы должны посмотреть в файл, ответственный за формирование списка сабпанелей, и кнопок на них. Открываем файл /modules/Opportunities/metadata/subpaneldefs.php:

$layout_defs['Opportunities'] = array(
	// list of what Subpanels to show in the DetailView
	'subpanel_setup' => array(
        'activities' => array(
			'order' => 10,
			'sort_order' => 'desc',
			'sort_by' => 'date_start',
			'title_key' => 'LBL_ACTIVITIES_SUBPANEL_TITLE',
			'type' => 'collection',
			'subpanel_name' => 'activities',   //this values is not associated with a physical file.
			'module'=>'Activities',

			'top_buttons' => array(
				array('widget_class' => 'SubPanelTopCreateTaskButton'),
				array('widget_class' => 'SubPanelTopScheduleMeetingButton'),
				array('widget_class' => 'SubPanelTopScheduleCallButton'),
				array('widget_class' => 'SubPanelTopComposeEmailButton'),
			),

			'collection_list' => array(
				'meetings' => array(
					'module' => 'Meetings',
					'subpanel_name' => 'ForActivities',
					'get_subpanel_data' => 'meetings',
				),
				'tasks' => array(
					'module' => 'Tasks',
					'subpanel_name' => 'ForActivities',
					'get_subpanel_data' => 'tasks',
				),
				'calls' => array(
					'module' => 'Calls',
					'subpanel_name' => 'ForActivities',
					'get_subpanel_data' => 'calls',
				),
			)
		),

Это верхний участок конфигурационного массива, содержащий настройки для отображения сабпанели "Мероприятия". Как видим из представленного листинга, у сабпанели должно быть четыре кнопки, описанные классами, указанными в массиве top_buttons:

  • SubPanelTopCreateTaskButton
  • SubPanelTopScheduleMeetingButton
  • SubPanelTopScheduleCallButton
  • SubPanelTopComposeEmailButton

Нам нужна вторая кнопка, описанная классом SubPanelTopScheduleMeetingButton. Ищем одноименный файл в папке /include/generic/SugarWidgets: /include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleMeetingButton.php

Нам нужна функция _get_form() класса SugarWidgetSubPanelTopScheduleMeetingButton. Предназначение данной фукнции: формирование HTML-кода кнопки. Как она будет подставляться в общий HTML-шаблон страницы: на данный момент нас не интересует. Наша задача на данный момент: добавить в HTML-код нужные нам конструкции.

Думаю, надо немного рассказать, как работает автоподстановка значений. В данном примере нас интересует поле "Тема" модуля "Встречи". Системное название этого поля: "name". Все, связанное с этим полем, имеет название "name":

  • Свойство класса Meeting (Встречи), хранящее значения поля Тема - имеет название name;
  • Название поля в базе данных, хранящее значения поля Тема - имеет название name;
  • <input type="text" name="name" id="name" size="30" maxlength="50" value="" title="" tabindex="100"> - подобный HTML-код генерится для ввода значения воля "Тема".

Т.е. по названию поля в системе работа идет из с базой данных, и с свойством класса, и с HTML-кодами. И такая ситуация практически по всем полям всех модулей.

При добавлении/редактировании записи, если SugarCRM "видит" значение в массиве $_REQUEST, имя которого совпадает с названием поля, то система автоматически подставляет это значение при выводе шаблона редактирования. Т.е. нам не стоит беспокоиться о том, как подставить нужное значение в HTML-шаблон редактирования полей модуля. Нам надо лишь позаботиться о том, что в страницу поступило соответствующее значение через $_GET или $_POST.

Хочется отметить то, что каждая кнопка, по сути, является отдельно живущей на странице формой, имеющей свои характеристики и массу скрытых параметров. Наша задача: добавить в список скрытых параметров переменную с ключем name и нужным нам значением. Наполнение формы скрытыми полями идет при помощи наполнения массива $additionalFormFields:

// Добавление названия встречи
if($defines['focus']->module_dir == 'Opportunities') {
	// Если кнопка выводится при просмотре карточки Сделки
	$additionalFormFields['name'] = "Встреча: " . $defines['focus']->name;
}

Здесь переменная $defines['focus'] - это экземпляр класса просматриваемой записи. В нашем случае это Сделка.

Добавьте этот код в файл /include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleMeetingButton.php до конструкции

// fill in additional form fields for all but action
foreach($additionalFormFields as $key => $value)
{
	if($key != 'action')
	{
		$button .= '<input type="hidden" name="' . $key . '" value="' . $value . '" />' . "\n";
	}
}

После сохранения изменений, перезагрузки страницы и нажатия кнопки "Назначить встречу", у вас должно получиться примерно следующее:

Про работу с сабпанелями также можно почитать статьи: Настройка субпанелей в SugarCRM и Ручная настройка субпанелей в SugarCRM.

Для тестирования возможностей, описанных в этой статье, вы можете воспользоваться демо-доступом к SugarCRM, специально установленной для таких целей. Как войти в демонстрационную версию SugarCRM описано на нашем сайте http://www.spravkacrm.ru/systems/sugarcrm/demo. Если у Вас возникли любые вопросы, связанные с SugarCRM, мы с удовольствием на них ответим на нашем форуме. Для прямого общения с специалистом по SugarCRM, Вы можете связаться с нами удобным для Вас способом:

+7 (495) 646-06-27
8 (800) 555-06-28 (звонок бесплатный)
+7 (910) 908-21-23 (мобильный, МТС)
evgenjekson (бесплатная переадресация на сотовый)
195938768
info@lemars.ru
Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="http://www.spravkacrm.ru/">SpravkaCRM.Ru - Справочник по CRM</A>)
наши проекты
смотрим также
смотрим также