Определить собственный REST API в модуле SugarCRM без использования chdir - PullRequest
1 голос
/ 23 апреля 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

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

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

chdir(dirname(__FILE__).'/../../');
2 голосов
/ 28 апреля 2011

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

Файл, который определяет API REST (или SOAP), может быть помещен в базовый путь Sugar.Таким образом, чдырь не нужен.Вы можете назвать его, например, 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' => '.',
),
...
...