Get it on Google Play

Formación CRM y Liferay: Como integrar archivos vía REST a SugarCRM/SuiteCRM desde Java

31-10-2016
 
CRM

CRM

Si hay algo difícil de encontrar es como subir archivos vía integración REST a SugarCRM o SuiteCRM(versión 10, porque en versiones anteriores es mas fácil).

Con la siguiente función podemos cargar archivos a registros(previamente creados, no se puede crear el registro y adjuntar el fichero en el mismo paso):

public static JSONObject uploadFile(String module, String id, String field, File f, String token) {
	StringBuilder output=new StringBuilder();

	try {
		byte[] file=Files.readAllBytes( f.toPath() );

		URL url=new URL("https://www.misuitecrm.com/"+module+"/"+id+"/file/"+field+"?filename="+URLEncoder.encode( f.getName(),"UTF-8" )); 
		HttpURLConnection con = (HttpURLConnection) url.openConnection();
		    
		con.setRequestProperty("oauth-token", token);
		con.setRequestProperty("Content-Length", ""+file.length );
	        con.setRequestProperty("Content-Type", "application/document-doc");

		con.setDoInput(true);
       		con.setDoOutput(true);
		con.setRequestMethod("PUT");

		DataOutputStream out = new  DataOutputStream(con.getOutputStream());
		out.write( file );
		out.flush();
		out.close();

		con.connect();
		BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
		    
		String temp = null;
		output = new StringBuilder();
		while((temp = in.readLine()) != null){
			output.append(temp).append(" ");
			}			
	} catch (Exception ex) { ex.printStackTrace(); }

	try {
		JSONObject r=JSONFactoryUtil.createJSONObject( output.toString() );
			
		if ( r.has("error_message") ) System.out.println( "Error en SugarCRM "+"/"+module+"/"+id+"/file/"+field+"?filename="+URLEncoder.encode( f.getName(),"UTF-8" ) );
			
		return r;
	} catch (Exception ex) { System.out.println( "Error al parsejar la sortida: "+output ); }
		
	return null;
	}

Es un tema que en la documentación de Sugar lo tienen muy mal resuelto y tampoco es muy robusto, si te equivocas con alguna cabecera simplemente da error y no funciona(Naturalmente, un error incoherente). Con esta función, si queremos añadir un archivo al registro ‘XXXX-XXXX-XXXX’ del módulo ‘Notes’ y en el campo ‘filename’ simplemente lo podemos hacer así:

	uploadFile('Notes', 'xxxx-xxxx-xxxx', 'filename', file, token);

Si no sabeis como encontrar el campo ‘token’ leeros el articulo ‘Formación SugarCRM: Desarrollando conectándonos a la API Rest‘. Tampoco iría mal que repasarais el resto de artículos sobre SugarCRM y SuiteCRM.

Con una función muy similar podéis obtener el fichero de la base de datos:

public static byte[] downloadFile(String module, String id, String field, String token) {
	try {
		URL url=new URL("https://www.misuitecrm.com/"+module+"/"+id+"/file/"+field); 
		HttpURLConnection con = (HttpURLConnection) url.openConnection();
		    
		con.setRequestProperty("oauth-token", token);
	        con.setRequestProperty("Cache-Control", "no-cache, must-revalidate"); 
	        con.setRequestProperty("Connection", "keep-alive");
	        con.setRequestProperty("Content-Type", "application/octet-stream"); 

            	con.setDoInput(true);
            	con.setDoOutput(false);
            	con.setRequestMethod("GET");

		con.connect();
		    
		InputStream in=con.getInputStream();
		ByteArrayOutputStream out=new ByteArrayOutputStream(); 
		byte[] buf = new byte[1024];
		int len;

		while ((len = in.read(buf)) > 0) {
			out.write(buf, 0, len);
			}
		  		
		in.close();
		out.close();		    
		    
		return out.toByteArray();
	} catch (Exception ex) { ex.printStackTrace(); }

	return null;
	}

En fin, que lo disfrutéis y que terminéis de disfrutar del puente 😀

Interesado en formación Liferay?

 

Leave a Reply