Ручная настройка субпанелей в SugarCRM

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

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

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

Разработка и внедрение CRM-систем "под ключ" на базе SugarCRM. Любые задачи для любого вида бизнеса. Установка бесплатной CRM-системы бесплатно. Интеграция с существующей инфраструктурой, бухгалтерской программой, телефонией. Доработка существующих проектов. Обучение персонала.
+7 (495) 646-06-27
8 (800) 555-06-28 (звонок бесплатный)
evgenjekson (звонок бесплатный)
195938768
info@lemars.ru
узнать подробнее ...

Демо-доступ к SugarCRM

CRM-система: SugarCRM
Версия: CE 6.3.0 (Другие версии)
Интерфейс: русский
URL: http://ce.sugarcrm.crmsystem.ru
Пользователь: jim, sarah, sally, max, will, chris
Пароль: как и имя пользователя
Тип доступа: пользовательский, без административных прав

В статье Настройка субпанелей в SugarCRM я описал, как можно редактировать список полей, отображаемых в сабпанелях. Делалось это через студию в админке SugarCRM, и потому раздел был для администраторов SugarCRM. Но при всей своей крутизне и навороченности студии SugarCRM, все же не все действия можно там делать. Иногда встают задачи, когда необходимо ручками лезть в код и менять его по своему усмотрению.

Но вернемся к нашему предмету разговора: сабпанелям. На официальном форуме SugarCRM в одной из тем встал вопрос: А как же "запихать" в сабпанель "История" еще одно поле, а в частности - описание заметок? Т.е. пользователь хотел, чтобы в его CRM-системе в сабпанели "История", при отображении в ней заметок, помимо стандартных полей выводилось описание заметок.

Сабпанель "История", как "Мероприятия", является несколько обособленным объектом в SugarCRM, и представляет собой "коллекцию" из нескольких модулей сразу. В частности, в сабпанели "История" отображаются записи модулей: "Звонки", "Встречи", "Задачи", "Заметки", "Е-майлы". Если посмотреть на описание этой сабпанели, например, для Контрагентов, то мы увидим следующий блок кода: Файл /modules/Accounts/metadata/subpaneldefs.php

'history' => array(
	'order' => 20,
	'sort_order' => 'desc',
	'sort_by' => 'date_entered',
	'title_key' => 'LBL_HISTORY_SUBPANEL_TITLE',
	'type' => 'collection',
	'subpanel_name' => 'history',   //this values is not associated with a physical file.
	'header_definition_from_subpanel'=> 'meetings',
	'module'=>'History',
	'top_buttons' => array(
		array('widget_class' => 'SubPanelTopCreateNoteButton'),
		array('widget_class' => 'SubPanelTopArchiveEmailButton'),
            	array('widget_class' => 'SubPanelTopSummaryButton'),
	),	
	'collection_list' => array(	
		'tasks' => array(
			'module' => 'Tasks',
			'subpanel_name' => 'ForHistory',
			'get_subpanel_data' => 'tasks',
		),
                'meetings' => array(
                	'module' => 'Meetings',
	                'subpanel_name' => 'ForHistory',
	                'get_subpanel_data' => 'meetings',
                ),
		'calls' => array(
			'module' => 'Calls',
			'subpanel_name' => 'ForHistory',
			'get_subpanel_data' => 'calls',
		),
		'notes' => array(
			'module' => 'Notes',
			'subpanel_name' => 'ForHistory',
			'get_subpanel_data' => 'notes',
		),	
		'emails' => array(
			'module' => 'Emails',
			'subpanel_name' => 'ForHistory',
			'get_subpanel_data' => 'emails',
		),	
	)			
),

Блок collection_list содержит список модулей, записи которых будут отображаться в сабпанели "История". Для каждого из модулей, как вы видите, присутствует параметр subpanel_name. Этот параметр указывает название сабпанели, чья конфигурация будет применена для вывода общей, итоговой сабпанели. Фактически, этот параметр указывает на название файла в модуле, который будет обработан при выводе итоговых данных. Файлы с названием, указанным в subpanel_name, находятся в /modules/модуль/metadata/subpanels/значение_subpanel_name.php.

Как вы видите, все сабпанели называются ForHistory. Связано это с тем, что коллекционная субпанель будет работать только в том случае, если сабпанели каждого из модулей будут НАСТРОЕНЫ НА ОТОБРАЖЕНИЕ ОДИНАКОВЫХ ПОЛЕЙ В ОДИНАКОВОЙ ПОСЛЕДОВАТЕЛЬНОСТИ! Это ключевое условие. Если "докопаться" до функционала получения записей для коллекционной сабпанели, то можно увидеть, что SQL-запрос на получение связанных записей разных модулей формируется SugarCRM через UNION, т.е.:

( SELECT поля FROM звонки JOIN связи WHERE условия попадания)
UNION
( SELECT поля FROM встречи JOIN связи WHERE условия попадания)
UNION
( SELECT поля FROM задачи JOIN связи WHERE условия попадания)
UNION
( SELECT поля FROM заметки JOIN связи WHERE условия попадания)
UNION
( SELECT поля FROM емайлы JOIN связи WHERE условия попадания)

а одно из условий корректного использования конструкции UNION в MySQL - это одинаковое кол-во и названия возвращаемого результата у каждого из SELECT-ов. Вот и получается по нашей задаче, что если мы хотим добавить какое-либо поле в отображение коллекционной сабпанели "История", то вывод этого поля необходимо прописать в файле ForHistory.php каждого из модулей, находящихся в коллекции.

Для этого добавляем в каждый файл ForHistory.php в переменную list_fields, в нужное нам место (но это место должно быть для всех файлов одно и тоже) следующий код:

'description'=>array(
	'vname' => 'LBL_DESCRIPTION',
	'width' => '30%',
),

Эта конструкция укажет, что необходимо в результирующий список добавить поле "Описание".

Получилось примерно следующее:

Для тестирования возможностей, описанных в этой статье, вы можете воспользоваться демо-доступом к 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>)
Меню форума
наши проекты
смотрим также
смотрим также