SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Web Services. Примеры работы

Как я уже говорил в первой статье данного цикла, веб-сервисы SugarCRM представлены двумя протоколами: SOAP и REST. Почитать об их различии можно здесь http://citforum.ru/internet/webservice/soap_rest/.

Но что же использовать? Что лучше? Однозначного ответа на этот вопрос нет. Многие гиганты веб-индустрии также предоставляют право выбора пользователю, поддерживая и протокол SOAP, и протокол REST.

Для SugarCRM я лично начинал использовать SOAP, так как было намного больше примеров использования именно данного протокола, но постепенно мне показалось более «правильным» использовать именно REST протокол.

Те, кому будет интересно использование REST протокола, могут использовать данную статью http://www.ibm.com/developerworks/library/x-sugarcrmrest/index.html как пособие. Написана она Джоном Мертиком, одним из разработчиков SugarCRM.

А мы же разберем несколько примеров использования SOAP протокола.

Для работы через Soap протокол воспользуемся стандартным классом php SoapClient.

Создадим экземпляр данного класса:

1
2
3
4
5
6
7
// location - путь к soap.php файлу, лежащему в корне CRM
// uri - URL адрес вашей SugarCMR
$options = array(
    "location" => 'http://127.0.0.1/sugar6/soap.php',
    "uri" => 'http://127.0.0.1/sugar6',
);
$client = new SoapClient(NULL, $options);

Залогинимся в нашу ЦРМ и получим список модулей, которые доступны для данного пользователя.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
// Массив с информацией для авторизации
$user_auth = array(
    'user_name' => 'admin',
    'password' => MD5('12345'),
    'version' => '.01'
);
 
$response = $client->login($user_auth, 'Soap tested application');
 
// Сохраняем id ссесии, она обязательно потребуется при вызове любых функций
$session = $response->id;
 
$response = $client->get_available_modules($session);
var_dump($response->modules);

Так как я залогинился под администратором, то я увижу список всех модулей, доступных в SugarCRM.

Приступим наконец-то к чему-то более полезному. Например, извлечем все записи контрагентов, где в имени присутствует SugarTalk, и отсортируем по дате создания. Как мы помним из обзора функций WEB API, для этого используется функция get_entry_list. Получим следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
// так как SugarCRM будет делать join дугих таблиц, всегда определяйте, к какой таблице относится поле в запросе,
// иначе получите стандартный ответ sql : Column in where clause is ambiguous
$response = $client->get_entry_list($session, 'Accounts', 'accounts.name LIKE "%SugarTalk%"', 'accounts.date_entered DESC');
 
$count_records = $response->result_count;
echo 'Количество записей : ' . $count_records . '<br>';
 
$accounts = $response->entry_list;
foreach ($accounts as &$acc)
{
  //Преобразуем в читабельный для нас массив
$acc->arrayFields = NameValueToArray($acc->name_value_list);
echo 'Название компании:<b>' . $acc->arrayFields['name']
. '</b>&nbsp;&nbsp;' . 'Запись изменена:<b>' . $acc->arrayFields['date_modified']  . '</b><br>';
}

В данном коде мы извлекли все записи контрагентов, попадающих под наше условие. Самые наблюдательные уже заметили функцию NameValueToArray. Код данной функции:

1
2
3
4
5
6
7
8
function NameValueToArray($items){
    $out_arr = array();
    foreach ($items as $item)
    {
        $out_arr[$item->name] = $item->value;
    }
    return $out_arr;
}

Эта короткая функция очень полезна. Дело в том, что все значения полей CRM возвращает в виде массива объектов. obj ('name'=>'name_field', 'value' => 'field_value'), а данная функция преобразует данную конструкцию в более привычный для нас ассоциативный массив.

Далее получим id всех контактов контрагента. Для этого воспользуемся функцией get_relationships, которая возвращает нам id всех связанных записей, удовлетворяющих условию. Так как нам необходимо получить все записи, условие мы задавать не будем.

1
2
3
4
5
6
7
8
//Возьмем id для первого контрагента
$account_id = $accounts[0]->arrayFields['id'];
//Извлечем все контакты для этого контрагента
$ids = $client->get_relationships($session, 'Accounts', $account_id, 'Contacts');
foreach ($ids->ids as $contact)
{
    echo 'ID контакта: ' . $contact->id . '<br>';
}

Я получил данный результат выполнения всех этих функций:

SugarCRM WEB API результат

Давайте напоследок разберем еще один актуальный пример: извлечение записи по email-адресу.
Я думаю, всем известно, что SugarCRM хранит email-адреса в отдельной таблице email_addresses, и для работы с ними используется модуль EmailAddresses. Таким образом реализуется связь один-ко-многим.
Для извлечения записи через SOAP протокол, можно, конечно, воспользоваться стандартной схемой:

1
$response = $client->get_entry_list($session, 'EmailAddresses', 'email_addresses.email_address="Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра."');

Далее получаем relationship, а затем, имея id записи, get_entry нужной нам записи.

Но можно данную схему реализовать «красивее» и в одну операцию.
Для примера будем искать предварительный контакт с email-адресом Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..

Тогда данный запрос будет следующим:

01
02
03
04
05
06
07
08
09
10
//email для поиска
$email = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.';
// формируем условие where
$filter = "leads.id in (
  select eabr.bean_id
  from email_addr_bean_rel eabr
  join email_addresses ea on eabr.email_address_id = ea.id and ea.deleted = 0
  where eabr.bean_module = 'Leads' and ea.email_address = '$email' and eabr.deleted=0)";
$response = $client->get_entry_list($session, 'Leads', $filter);
$leads = $response->entry_list;

Как видно, мы просто добавили в третий параметр (условие выборки — WHERE) необходимость извлечь только записи с id, полученными в результате подзапроса к таблице email_addr_bean_rel и email_addresses с поиском нужного нам email-адреса.

На этом я заканчиваю короткое HOW-TO по использованию SOAP протокола для связи с SugarCRM. И еще раз приведу полный код того, что мы с вами делали.

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

Последнее изменениеПонедельник, 10 июля 2017 18:11
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 17758 раз
Другие материалы в этой категории: « Web Services. API Вышла новая версия популярной CRM — SugarCRM 6.1 »

7535 комментарии

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости

  • 1
  • 2
  • 3
  • 4