Определите собственный REST API в модуле SugarCRM без использования chdir

#php #rest #sugarcrm

#php #rest #sugarcrm

Вопрос:

Я хотел бы определить свой собственный API для экземпляров Sugar через модуль загрузки модуля. Как я могу определить свой собственный SOAP / REST API в модуле SugarCRM без использования команды chdir?

В документации, как это объясняется, для расширения REST API безопасным для обновления способом, используется команда chdir: http://developers.sugarcrm.com/docs/OS/6.1/-docs-Developer_Guides-Sugar_Developer_Guide_6.1.0-Chapter 2 Application Framework.html#9001337

Однако команда chdir запрещена установками, использующими ограничения на загрузку модуля: http://developers.sugarcrm.com/wordpress/2009/08/14/module-loader-restrictions

Наличие команды chdir в коде не допускается, когда эти ограничения включены, что имеет место, например, для экземпляров Sugar on Demand.

Существуют ли какие-либо другие способы определения пользовательских REST API? Как я могу добавить REST API в SugarCRM, используя только модуль? Спасибо.

Ответ №1:

Для тех, кто столкнется с такой же проблемой, я нашел адекватный обходной путь.

Файл, который определяет REST (или SOAP) API, может быть помещен в базовый путь Sugar. Таким образом, chdir не нужен. Вы можете вызвать его, например myapi.php:

 <?php
$webservice_class = 'SugarRestService_v2_custom';
$webservice_path = 'custom/myapi/v2/SugarRestService_v2_custom.php';
$registry_class = 'registry_custom';
$registry_path = 'custom/myapi/v2/registry_custom.php';
$webservice_impl_class = 'SugarRestServiceImpl_v2_custom';
$location = 'custom/myapi/v2/rest.php';
require_once('service/core/webservice.php');
  

Поместите файл в специальный каталог в вашем модуле, например, назовите его basepath. Затем в вашем manifest.php файл, который вы объявляете следующим образом:

 'copy' => array (
0 => 
array (
  'from' => '<basepath>/basepath',
  'to' => '.',
),
...
  

Комментарии:

1. У меня это не работает в локальном CE 6.5 или ondemand 7.1 — мне не удалось скопировать. ошибка в журнале установки.

Ответ №2:

Мы планируем исправить это в будущей версии SugarCRM (см. Ошибку 43734 на http://www.sugarcrm.com/crm/support/bugs.html#issue_43734 для получения дополнительной информации).

Чтобы исправить это на вашем экземпляре, просто добавьте эту строку в начало service/core/webservice.php файл:

 chdir(dirname(__FILE__).'/../../');