Добрый день! Хочу поделиться опытом работы с новой версией шуги — 6.5. Для начала вспомним какие изменения были произведены разработчиками:
- полнотекстовый поиск
- интеграция с iCal
- расширенная интеграция с Microsoft Outlook и Lotus Notes. Сделано это чтобы легко импортировать контакты LinkedIn прямо в шугу
- дополнительная интеграция с IBM Connections, Unica, WebSphere Commerce и Sterling Commerce
- изменение продолжительности встречи и звонка растягиванием события в календаре
- добавление даты окончания встречи
- напоминание о встрече и звонке приходит на email также связанным контактам и лидам
- возможность фильтрации шаблонов для email в списке
- напоминания о звонке/встрече теперь разделены на popup и email напоминания с выбором времени для каждого
Теперь я расскажу о подводных камнях и борьбе с ними.
Напоминание о встрече и звонке приходит на email также связанным контактам и лидам.
Довольно необычное дополнение, которое не всем придётся по-вкусу. Отключается заменой стандартного задания в планировщике для уведомлений sendEmailReminders на кастомное.
Т.е. добавить в файле custom/modules/Schedulers/_AddJobsHere.php функцию sendEmailRemindersCustom и добавить в массив $job_strings название функции:
function sendEmailRemindersCustom() { require_once("custom/modules/Schedulers/EmailReminder.php"); $reminder = new EmailReminder(); return $reminder->process(); } array_push($job_strings, 'sendEmailRemindersCustom');
А также добавить название задачи в языковой файл планировщика в custom/Extension/modules/Schedulers/Ext/Language/ru_ru.sendEmailRemindersCustom.php:
$mod_strings ['LBL_SENDEMAILREMINDERSCUSTOM'] = 'Отправка напоминаний о звонках и встречах только ответственным';
Т.е. мы изменили лишь путь к файлу EmailReminder.php, который делает всю работу по рассылке. Соответственно нужно его довавить в папку custom/modules/Schedulers и скопировать содержимое из оригинального файла, который находится в папке modules/Activities.
Наконец-то можно приступить к изменению самой логики определения адресатов, которым приходит уведомление. На самом деле нужно только удалить в фукнции getRecipients нашего кастомного файла EmailReminder.php несколько следующих блоков:
// fetch contacts $query = "SELECT user_id FROM {$field_part}s_contacts WHERE {$field_part}_id = '{$id}' AND accept_status != 'decline' AND deleted = 0"; $re = $db->query($query); while($row = $db->fetchByAssoc($re) ) { $contact = new Contact(); $contact->retrieve($row['contact_id']); if ( !empty($contac->email1) ) { $arr = array( 'type' => 'Contacts', 'name' => $contact->full_name, 'email' => $contact->email1, ); $emails[] = $arr; } } // fetch leads $query = "SELECT user_id FROM {$field_part}s_leads WHERE {$field_part}_id = '{$id}' AND accept_status != 'decline' AND deleted = 0"; $re = $db->query($query); while($row = $db->fetchByAssoc($re) ) { $lead = new Lead(); $lead->retrieve($row['lead_id']); if ( !empty($lead->email1) ) { $arr = array( 'type' => 'Leads', 'name' => $lead->full_name, 'email' => $lead->email1, ); $emails[] = $arr; } }
Вот и всё. Однако, на первых двух Release Candidate версиях (и обновлениях до них соответственно) все уведомления о звонке/встрече приходили совершенно пустые из-за файла с шаблонами. Решается заменой файла с шаблонами из более старой шуги версии 6.4.4 в новой. Это файл ru_ru.notify_template.html, который находится в папке include/language. Приставка ru_ru указывает, что он для русской локали, если Вам нужно для любой другой, просто подставьте соответственную приставку.
Также почему-то все уведомления корректно срабатывают только один раз для одного и того же мероприятия. Т.е. создал звонок, выставил для него напоминание, всё хорошо. Поменял для этого звонка время начала — часто не пришло уведомление и pop-up. (может так задумано?) Решение пока не нашёл. Если вы сталкнетесь с решением данной проблемы, пишите на нашем форуме, будем рады помощи.
Неполадки при автообновлении дашлетов чартов/диаграмм.
Довольно серьёзная ошибка, который проявляется дублированием дашлета с наложением на другой:
Исправляется дополнительным подключением файла стиля, который почему-то отключён в версии 6.5. В файле include/SugarCharts/Jit/Jit.php функция getChartResources должна выглядеть след. образом:
function getChartResources() { return ' <link type="text/css" href="'.getJSPath('include/SugarCharts/Jit/css/base.css').'" rel="stylesheet" /> <!--[if lt IE 9]> <script type="text/javascript" src="'.getJSPath('include/SugarCharts/Jit/FlashCanvas/flashcanvas.js').'"></script> <![endif]--> <script language="javascript" type="text/javascript" src="'.getJSPath('include/SugarCharts/Jit/js/Jit/jit.js').'"></script> <script language="javascript" type="text/javascript" src="'.getJSPath('include/SugarCharts/Jit/js/sugarCharts.js').'"></script> '; }
Т.е. просто добавлено подключение файла base.css. После этого ошибка пропадает и казалось бы что всё хорошо, однако через время была обнаружена новая неполадка с дашлетом календаря из-за выше подключённого стиля.
Разработчики выбирали из двух зол?:)
Исправляется комментированием или удалением одной строчки в стиле:
.legend table td.label { /*padding: 0px 20px 5px 0px;*/ text-align: left; }
Ошибка при пагинации(перелистывания) записей в субпанеле при настроенном фильтре
Обнаружилось на версии 6.5 RC2, проверили на чистой 6.5, 6.4, ошибка повторилась.
Ошибка заключается в том, что при пагинации записей в субпанели сбивается фильтр поиска. Т.е. мы открыли субпанель, отобразились все, к примеру, 500 записей. Настроили фильтр, нажали поиск. Допустим нашлось 100 записей. Т.к. по-умолчанию на одной странице отображается лишь 20, начинаем перелистывать, при этом сбивается фильтр и мы видим опять все 500 записей.
Решение проблемы заключается в правке файла view.popup.php в папке include/MVC/View/views. В фукнции display находим строчку:
$_REQUEST[$search_key] = $GLOBALS['db']->quote($search_value);
комментируем или удаляем её и вставляем следующий код:
/**********************code from 6.3*************************/ if (!is_array($search_value)) { $_REQUEST[$search_key] = $GLOBALS['db']->quote($search_value); } else { foreach ($search_value as $key => $val) { $val = $GLOBALS['db']->quote($val); } $_REQUEST[$search_key] = $search_value; } /***********************code from 6.3************************/
Ошибка была в том, что далее в другом файле в функцию передавался массив $search_key, когда нужна строка. Т.е. не происходило преобразования массива в строку.
Как видно, этот код был взял из версии 6.3, в которой соответственно такой проблемы нет.
Проблема с поиском в субпанели
Была обнаружена при настройке фильтра контактов в субпанели из карточки контрагента в шуге версии 6.5. При проверке, в версии 6.4 тоже самое. Опять спасает стабильность версии 6.3.
Проявляется неприятность в следующем: при выборе пустого источника предварительных контактов и, к примеру, холодного прозвона(если у вас мало записей, выберите все источники предварительных контактов), а также написании в имени и фамилии белиберды, т.е. составления запроса, которой не должен вернуть никаких записей, записи всё же находятся. Корень проблемы в выборе пустого элемента. Думаю эта проблема возникает везде в субпанелях при выборе пустого элемента в каком-либо списке.
Решением является правка файла PopupSmarty.php в папке include/Popups.
В фукнции _get_where_clause находим строчку:
$where = '( ' . implode(' and ', $where_clauses) . ' )';
комментируем или удаляем её и вставляем след. код:
//*******************custom_code******************** $sqv = array(0 => '', 1 => ''); if(count($where_clauses) &gt; 1) { $sqv[0] = '('; $sqv[1] = ')'; } $where = '( ' . implode(" and $sqv[0]", $where_clauses) . " )$sqv[1]"; //*******************custom_code********************
Т.е. правильно составляем условие выборки (не хватало круглых скобок в некоторых случаях).
Если кто-то заметил (а может даже исправил) ещё какие-то неполадки новой версии и хочет поделиться, милости прошу на наш форум! Задавайте вопросы, пишите комментарии к статье.