How-to: Integrando Symfony e SugarCRM
O SugarCRM é uma interessante aplicação open source para Gestão de Relacionamento com o Cliente (CRM). Mesmo que muitas características avançadas sejam reservadas às versões pagas (Professional e Enterprise), sua versão livre possui recursos muito completos de customização de módulos, plugins, entre outros, e desempenha muito bem a sua função. Um dos recursos que viabiliza grande parte de plugins e integrações é um Webservice construído em NuSOAP, para que outras aplicações interajam com os dados do SugarCRM.
Supondo um endereço de intranet, o WSDL deste webservice estaria disponível na URL:
- http://intranet/sugarcrm/soap.php?wsdl
Este how-to abrange a integração do SugarCRM com o Symfony. Neste cenário, uma aplicação deve manter os mesmos registros de contas (Accounts) que existem no SugarCRM. Vamos apenas gerar um array onde a chave será o ID da conta e o valor será o nome da conta.
Uma curiosa surpresa ao iniciar a integração foi descobrir que havia um plugin para o Symfony chamado sfSugarCRM, constituído de duas classes:
- sfSugarCRMSOAPClient: Classe com um método no padrão Singleton que retorna a instância de SoapClient conectada ao WSDL do SugarCRM.
- sfSugarCRM: Classe que abstrai algumas requisições ao Webservice do SugarCRM.
Importante: este plugin não utiliza NuSOAP, mas sim as bibliotecas SOAP distribuídas nas versões do PHP5 e posteriores. Certifique-se que a extensão SOAP está instalada.
Inicialmente, seguindo a breve documentação de exemplo do sfSugarCRM, vamos instalar o plugin:
./symfony plugin-install http://plugins.symfony-project.com/sfSugarCRMPlugin ./symfony cc
Pulemos os passos de criação da aplicação e do módulo no Symfony, o código abaixo conecta ao Webservice:
$sugar = new sfSugarCRM("http://intranet/sugarcrm/soap.php?wsdl"); $sugar->setUsername("usuario"); $sugar->setPassword("senha");
O trecho acima armazena o usuário e a senha em variáveis de instância, e as utiliza para a chamada de alguns métodos do servidor SOAP, que são:
- Localizar contatos pelo nome: searchContactsByName()
- Localizar contatos pelo e-mail: searchContactsByEmail()
- Retornar lista de usuários: getUserList()
- Métodos para criação de registros: createLead(), createContact(), createAccount(), createOpportunity(), createCase()
Um detalhe a importante é que os métodos acima enviam usuário e senha a cada requisição ao Webservice. Alguns métodos do Webservice, entretando, exigem como parâmetro o ID do login, uma string gerada com a chamada ao método login() do Webservice. Como a classe sfSugarCRM não implementa nenhum método para isso, abaixo um patch que cria essa função:
Para aplicar o patch, entre na raiz do projeto e digite:
patch -p0 < patch.txt
Após aplicado o patch, você tem os novos métodos na classe sfSugarCRM: getLoginId() e doLogin() , que facilitam a chamada para diversos métodos do Webservice. Dessa forma, é só criar novos métodos na classe sfSugarCRM! Criei um método chamado getEntryList() (que utiliza o método get_entry_list() do webservice), veja como retornar todos os clientes:
$params = array( "module_name" => "Accounts", "order_by" => "name ASC", "offset" => 0, "select_fields" => array("name"), "max_results" => 1000 ); $sugar->getEntryList($params); $response = $sugar->getResponse(); $contas = array(); foreach ($response->entry_list as $entry) { $contas[$entry->id] = $entry->name_value_list[0]->value; } print_r($contas);
Então é isso! Este material não será de uso constante, mas fica como referência quando um cenário semelhante surgir
Referências:

Julho 23rd, 2007 at 04:03
[…] How-to: Integrando Symfony e SugarCRM […]
Julho 26th, 2007 at 19:25
[…] http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/ for more […]
Outubro 29th, 2008 at 13:36
Great website. I hope you like my wagging metal Oh, good joke) How many computer programmers does it take to change a light bulb? Are you kidding? That’s a hardware problem!