Веб-сервисы Microsoft Dynamics GP 10, использующие PHP
Мы рассматриваем возможность использования веб-служб Microsoft Dynamics GP 10 и захотим использовать PHP для создания / обновления клиентов и продаж... Итак, вопрос в том, возможно ли это, и знает ли кто-нибудь о хорошей документации?
Я не нахожу ничего с использованием PHP, другой частью этого вопроса будут учетные данные безопасности, и если PHP сможет правильно передать необходимый логин и полностью взаимодействовать с веб-сервисом GP?
Любые идеи или известные ресурсы?
2 ответа
Для этого я использую набор хранимых процедур eConnect для интеграции GP. Это может быть не самое элегантное решение, но оно работает довольно хорошо. eConnect также хорошо документирована Microsoft.
Если вы решите использовать этот вид интеграции, имеет смысл ознакомиться с приложением Dexterity. Изучение Приложения Ловкости очень помогает при сопоставлении объектов и таблиц, и его следует бесплатно загрузить из Customer Source.
Вот пример хранимой процедуры eConnect для создания записи клиента:
$sql = "declare @p115 int
set @p115=0
declare @p116 varchar(255)
set @p116=''
exec dbo.taUpdateCreateCustomerRcd
@I_vCUSTNMBR = '123456',
@I_vCUSTNAME = 'Company Name',
@O_iErrorState = @p115 OUTPUT,
@oErrString = @p116 OUTPUT
select @p115, @p116";
Чтобы выполнить его, просто сделайте что-то вроде следующего (используя PHP ADODB в этом примере):
gp_execute_sp($sql); function gp_execute_sp($sql, $transactions = true) { global $DBGP; if($transactions) $DBGP->StartTrans(); $rs = $DBGP->Execute($sql); if(is_object($rs) && !$rs->EOF) { if($rs->fields['computed'] != 0) { if($transactions) $DBGP->FailTrans(); throw new Exception(get_error_desc($rs->fields['computed'])); } } elseif(!is_object($rs)) { if($transactions) $DBGP->FailTrans(); throw new Exception("Database Connection Error."); } else { if($transactions) $DBGP->FailTrans(); throw new Exception("Stored proceedure did not return a result."); } if($transactions) $DBGP->CompleteTrans(); } function get_error_desc($value) { global $DBGP; if(is_numeric($value)) { $result = "No Error Available"; $sql = "SELECT ErrorDesc FROM DYNAMICS..taErrorCode WHERE ErrorCode=?"; $rs = $DBGP->execute($sql, array($value)); if(!$rs->EOF) { $result = $rs->fields['ErrorDesc']; } } else { $result = $value; } return $result; }
Я еще не использовал Dynamics GP, но, исходя из моего руководства по разработке, существует устаревшая конечная точка и собственная конечная точка, но обе они являются сервисами SOAP, поэтому я не вижу причин, по которым вы не могли использовать PHP-клиент SOAP.
$client = new SoapClient('http://machine_name:<port_number>/Dynamics/GPService');
$result = $client->GetCompanyList(...);
Я не знаю, что происходит... но, опять же, нет никаких причин, по которым вышеупомянутое не должно быть возможным, поскольку SOAP предназначен для работы с большинством языков, включая PHP, просто он не будет таким простым, каким мог бы быть.
РЕДАКТИРОВАТЬ: Может быть полезно использовать генератор классов WSDL to PHP. Смотрите: сгенерируйте php код из wsdl