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:

This entry was posted on Quinta-feira, Julho 19th, 2007 at 23:11 and is filed under php, symfony. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

3 Responses to “How-to: Integrando Symfony e SugarCRM”

  1. rpsblog.com » A week of symfony #29 (16-&gt;22 July 2007) Says:

    […] How-to: Integrando Symfony e SugarCRM […]

  2. Superhaggis on Symfony » sfSugarCRM - A Portuguese slant Says:

    […] http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/ for more […]

  3. weelsokPere Says:

    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!

Leave a Reply