5 consejos básicos de desarrollo sobre el SDK de SAP Business One
Esenciales para todo aquel que esté empezando
En este post, hablaremos brevemente sobre el desarrollo usando el SDK de SAP Business One(DI API y UI API).
Probablemente estos consejos ya los tengáis en cuenta o no os hagan falta, pero en mi caso me hubiera gustado tenerlos asimilados al empezar a desarrollar.
1 Usar las herramientas disponibles en la DI API para modificar el contenido y/o el esquema de la base de datos.
Esto más que un consejo, se trata de una “ley”, puesto que como todos sabemos es una condición indispensable para que nuestros clientes no pierdan el soporte de SAP. Usando la DI API, tanto sus objetos de negocio como el objeto Recordset, debemos ser capaces de actualizar y leer la información de las tablas estándar y de nuestras propias tablas (UDTs) o nuestros campos (UDFs).
2 Dejar un log “claro” de los errores que se suceden en nuestro addon.
A la hora de corregir los errores que surgen a un usuario de nuestro addon, es de mucha ayuda el contar con una tabla UDT (por ejemplo) a la que podamos acceder para comprobar el estado de la pila de llamadas del addon en el momento de la excepción.
3 Usar siempre bloques try catch finally.
Debemos tratar de “blindar” nuestro código mediante el uso de bloques “try catch finally”, con el objetivo de que no se produzcan excepciones no controladas que provoquen la interrupción y desconexión de nuestro addon sin dar información al usuario.
Esta captura de excepciones es especialmente sensible a la hora de introducir datos, ya sea a través de la interfaz de usuario o a través de interfaces con otros sistemas.
4 Liberar los objetos COM cuando hayamos terminados de usarlos.
Supongamos que necesitamos usar un Recordset para ejecutar una determinada consuta. En el momento en que hayamos ejecutado dicha consulta y extraído la información necesaria, debemos liberar nuestro Recordset, haya o no ocurrido una excepción:
Recordset rs = null; try { rs = kernel.Company.GetBusinessObject(BoObjectTypes.BoRecordset) as Recordset; rs.DoQuery("SELECT ..."); if (rs.RecordCount > 0) //Procesar la información del recordset } catch (Exception ex) { //Procesar la excepción y dejar log del error } finally { if (rs != null) //Liberamos el Recordset haya habido o no excepción System.Runtime.Interop.Marshall.ReleaseComObject(rs); }
5 Congelar y DESCONGELAR los formularios propios durante los momentos de refresco de la información.
Hay que tener en cuenta que si se produce una excepción durante el proceso también debemos descongelar nuestro formulario. Algo así podría valer:
Form oForm = null; try { oForm = kernel.Application.Forms.ActiveForm; oForm.Freeze(true); //Trabajar con oForm para (por ejemplo) //cargar información desde la base de datos } catch (Exception ex) { //Procesar la excepción y dejar log del error } finally { if (oForm != null) //Descongelamos el formulario haya habido o no excepción oForm.Freeze(false); }
Sobre el Autor
Miguel Fernandez Cejas
Director General.
Socio fundador de Itop, empresa de implantación de soluciones tecnológicas, factoría de software y formación online. Ingeniero Informático con cursos de postgrado en áreas tan diversas como la inteligencia artificial, la gestión de empresas o la calidad. Más de 25 años de experiencia en el mundo de las Tecnologías de la Información trabajando para distintas empresas nacionales e internacionales.
Su pasión por la tecnología unida a su variada experiencia, le impulsa a desarrollar distintos proyectos empresariales donde aplica las nuevas tecnologías al turismo, la sociología, el marketing o la formación.
Actualmente trabaja en temas relacionados con aplicaciones de gestión, Business Intelligence, Big Data, Mobile/Apps e Internet de las Cosas.