Новое в SugarCRM 6.5 и подводные камни

Добрый день! Хочу поделиться опытом работы с новой версией шуги — 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) &amp;gt; 1)
{
    $sqv[0] = '(';
    $sqv[1] = ')';
}
$where = '( ' . implode(" and $sqv[0]", $where_clauses) . " )$sqv[1]";
//*******************custom_code********************

Т.е. правильно составляем условие выборки (не хватало круглых скобок в некоторых случаях).


Если кто-то заметил (а может даже исправил) ещё какие-то неполадки новой версии и хочет поделиться, милости прошу на наш форум! Задавайте вопросы, пишите комментарии к статье.

Написать комментарий

Вы должны войти чтобы комментировать.