Get it on Google Play

Integración Liferay con SugarCRM

11-08-2016
 
Liferay+Sugarcrm Fusión

Liferay+Sugarcrm Fusión

En el post “Formación SugarCRM: Desarrollando conectándonos a la API Rest” ya vimos como conectarnos con el API de SugarCRM. Ahora vamos a ampliarlo un poquito mas y ver como nos integramos desde Liferay.

En este caso, conectaremos con el API Rest enviando los parametros a través de JSON. Liferay ofrece soporte a través de su API a JSON mediante la clase ‘JSONObject'(Muy útil). También requeriremos de ciertas dependencias que las declararemos en el fichero ‘liferay-plugin-package.properties’:

portal-dependency-jars=jstl-api.jar,jstl-impl.jar,commons-httpclient.jar,httpclient.jar,httpcore.jar

Después necesitaremos ciertas variables de configuración que las añadiremos en el fichero ‘portal-exto.properties’:

lostsys.sugarcrm.api.rest=http://www.mi-sugar-url.com/rest/v10
lostsys.sugarcrm.oauth.grant_type=password
lostsys.sugarcrm.oauth.client_id=sugar
lostsys.sugarcrm.oauth.client_secret=
lostsys.sugarcrm.oauth.username=<mi username>
lostsys.sugarcrm.oauth.password=<mi password>

Ahora me creo mi función que me servirá para hacer todas las peticiones al CRM:

public static JSONObject sugarRequest(String url, JSONObject params) {
	return sugarRequest(url, params, null, null);
	}
	
public static JSONObject sugarRequest(String url, JSONObject params, String token) {
	return sugarRequest(url, params, token, null);
	}

public static JSONObject sugarRequest(String url, JSONObject params, String token, String method) {
	StringBuilder output=new StringBuilder();
	if ( method==null ) method="POST";

	try {
		DefaultHttpClient httpClient = new DefaultHttpClient();
		HttpUriRequest postRequest;
			
		if ( method.equals("PUT") ) postRequest=new HttpPut(PropsUtil.get("lostsys.sugarcrm.api.rest")+url);
		else postRequest=new HttpPost(PropsUtil.get("lostsys.sugarcrm.api.rest")+url);

		if ( token!=null ) postRequest.setHeader("oauth-token", token);
			
		StringEntity input = new StringEntity( params.toString() );
		input.setContentType("application/json");

		if ( method.equals("PUT") )	((HttpPut) postRequest).setEntity(input);
		else ((HttpPost) postRequest).setEntity(input);

		HttpResponse response = httpClient.execute(postRequest);
		BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));

		String o;
		while ((o = br.readLine()) != null) {
			output.append(o);
			}

		httpClient.getConnectionManager().shutdown();
	} catch (Exception ex) { ex.printStackTrace(); }

	try {
		return JSONFactoryUtil.createJSONObject( output.toString() );
	} catch (Exception ex) { System.out.println( "Error al parsejar la sortida: "+output ); }
		
	return null;
	}

Ahora, ya puedo comunicarme con el CRM, por ejemplo si quisiera crear y editar un registro en el módulo ‘Opportunities’ lo haria de la siguiente manera:

/* Obtenemos el token para autentificación*/
params=JSONFactoryUtil.createJSONObject();

params.put("grant_type", PropsUtil.get("bgse.sugarcrm.oauth.grant_type") );
params.put("client_id", PropsUtil.get("bgse.sugarcrm.oauth.client_id") );
params.put("client_secret", PropsUtil.get("bgse.sugarcrm.oauth.client_secret") );
params.put("username", PropsUtil.get("bgse.sugarcrm.oauth.username") );
params.put("password", PropsUtil.get("bgse.sugarcrm.oauth.password") );
params.put("rest_data","");
params.put("platform","base");

String token=token.getString("access_token").getString("access_token");

System.out.println("Acces Token: "+token);

/* Creamos el registro */
params=JSONFactoryUtil.createJSONObject();
params.put("name","test");
params.put("description","test2");
		
String id=sugarRequest("/Opportunities/", params, token).getString("id");

System.out.println("Id registro nuevo: "+id);

/* Editamos el registro */
params=JSONFactoryUtil.createJSONObject();
params.put("name","test [Edited]");
params.put("description","test2 [Edited]");

String reg=sugarRequest("/Opportunities/"+id+"/", params, token, "PUT").toString();
		
System.out.println( "Registro actualizado"+reg );

En fin, después de todos estos posts sobre el API de SugarCRM ya deberíais ser capaces de integrar Sugar con cualquier sistema.

Por cierto, no se si me habré pasado mucho con la imagen que ilustra el post. Orgullo Friki! (Afectados pueden comentar abajo)

Interesado en formación Liferay?

 

Leave a Reply

© Albert Coronado Calzada