lunes, 8 de julio de 2013

SageCRM - Novedades Versión 7.2 para Desarroladores

A continuación mostraré las novedades que incorpora  SageCRM 7.2 con lo que respecta a los desarrolladores de SageCRM.

  1. Eliminación de los frames en la distribución de la pantalla
  2. Uso de campos Identidad dentro de SQL Server (ya no se usará la tabla SQL_Identity)
  3. La nueva API Cliente de SageCRM
  4. Posibilidad de crear librerías JavaScript compartidas para su uso dentro de SageCRM

1.    Eliminación de los frames en la distribución de la pantalla


A partir de la versión 7.2, ya no veremos la distribución de SageCRM en Frames  como teníamos hasta ahora.

<FRAMESET COLS="105,*" BORDER="0" FRAMESPACING="0" TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" >
                              <FRAMESET  ROWS="70,0,24,*,0" TOPMARGIN="0" FRAMEBORDER="1" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" BORDER="0" ID="FIRSTSET" FRAMESPACING="0">
                                                           <FRAME NAME="EWARE_LOGO" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=101&Mode=1&CLk=T" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                                                           <FRAME NAME="EWARE_RECENT" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=105&Mode=1&CLk=T" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                                                           <FRAME NAME="EWARE_HISTORY" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=106&Mode=1&CLk=T" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                                                           <FRAME NAME="EWARE_MENU" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=102&Mode=1&CLk=T" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                                                           <FRAME NAME="EWARE_CTIBUTTONS" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=103&Mode=1&CLk=T" TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" FRAMEBORDER="0" BORDER="0" BORDERCOLOR="#7384C6" NORESIZE>
                              </FRAMESET>
                              <FRAMESET  ROWS="70,*,0,0,0" TOPMARGIN="0" FRAMEBORDER="1" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" BORDER="0" ID="SECONDSET" FRAMESPACING="0">
                                                           <FRAME NAME="EWARE_TOP" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=103&Mode=1&CLk=T" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                                                           <FRAME NAME="EWARE_MID" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=103&Mode=4&CLk=T" TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" FRAMEBORDER="0" BORDER="0">
                                                           <FRAME NAME="EWARE_HIDDEN" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=103&Mode=1&CLk=T" TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" FRAMESPACING="0" FRAMEBORDER="0" BORDER="0" BORDERCOLOR="#BDBDB8" NORESIZE >
                                                           <FRAME NAME="EWARE_CTIOBJECT" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=103&Mode=1&CLk=T" TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0" FRAMEBORDER="0" BORDER="0" BORDERCOLOR="#7384C6" NORESIZE>
                                                           <FRAME NAME="EWARE_UPDATE" SRC="/crm/eware.dll/Do?SID=36414435332549&Act=410&Mode=1&CLk=" FRAMEBORDER="0" MARGINHEIGHT="0" MARGINWIDTH="0" SCROLLING="NO" NORESIZE>
                              </FRAMESET>
</FRAMESET>

Por lo tanto, todo el contenido de las pantallas ya no estará insertado dentro de FRAME “EWARE_MID”, sino que en cada response del servidor se generará toda la página web (tanto el top content, como los botones del menú, como el contenido de la página…)

En la nueva versión se han substituido los frames por bloques <DIV>, que nos permiten mediante las capas, posicionar los bloques en el sitio correspondiente

Y en que nos beneficia a los desarrolladores de SageCRM la eliminación de los frames??? 

Principalmente en 2 cosas:
  • En la propia url que nos devuelve el navegador ya podremos ver los valores de las  Keys correspondientes al contexto actual 
  • Cuando tengamos que abrir una url dentro de SageCRM o queramos acceder al top content, ya no será necesario indicarle el frame al que queremos acceder.


El NO uso de los frames también nos aporta otra funcionalidad para los usuarios. El uso de la barra de navegación del propio navegador, es decir, ahora podremos volver hacia atrás o adelante directamente con los botones de atrás/delante de navegador, ya no necesitamos los propios botones de navegación del CRM.

A nivel de desarrolladores también hemos de tener en cuenta otra cosa. Cuando queramos insertar un <SCRIPT> dentro de nuestra CustomPage.asp, ya no podremos insertarlo directamente en la página, sino que lo tendremos que añadir al contenido del objeto de CRM, mediante un bloque tipo Content o directamente mediante el método AddContent. Esto es debido a que ahora cuando ejecutamos el método Response.Write(CRM.GetPage("")); se crea todo el HTML correspondiente, y por lo tanto todo lo que no esté dentro del content del objeto del CRM=eWare, quedará fuera de las etiquetas <HTML></HTML>, por lo tanto quedará fuera de la página web resultante.


2.    Uso de campos Identidad dentro de SQL Server (ya no se usará la tabla SQL_Identity)

En las versiones anteriores a la 7.2 no teníamos campos tipo identidad en las tablas SQL Server de SageCRM, y como consecuencia cada vez que se insertaba un registro dentro de una tabla de SQL se tenía que buscar el id correspondiente para insertar un valor único en la clave primaria de la tabla.

Para hacer esto, internamente SageCRM lo que hacía es ir a la tabla SQL_Identity y buscar el next_id correspondiente a la tabla sobre la cual íbamos a insertar el registro. Una vez se insertaba el registro, dentro de la tabla SQL_Identity se actualizaba el next_id con +1.

Por lo tanto, si en algún caso teníamos que insertar un valor directamente sobre SQL teníamos que ser conscientes de ir actualizando la tabla SQL_Identity y asegurarnos que mientras se hacía la inserción, nadie desde SageCRM estubiese insertando algún registro en esa misma tabla.

A partir de la versión 7.2 ya no tendremos este problema ya que todas las claves primarias de las tablas son campos identidad (comp_companyid, pers_personid, addr_addresssid…) y como consecuencia es el propio SQL Server el que gestiona este campo y lo incrementa en cada inserción.

Porque SageCRM no utilizaba campos identidad???

El causante era el “SageCRM SOLO”, ya que se sincronizaban empresas desde una Base de Datos local con la Base de Datos central del servidor, y con campos identidad no  se podía asegurar una robustez en los datos debido a que en las dos tablas se iban creando registros.

A partir de la versión 7.2, el CRM SOLO deja de existir, y por lo tanto ya se han podido crear los campos primarios como identidad.


3.    La nueva API Cliente de SageCRM

Esta es la novedad más impactante y la funcionalidad que los implantadores/desarrolladores de SageCRM más vamos a disfrutar.

Por fin SageCRM ha creado una API Cliente que nos permite modificar/ocultar/manipular datos de SageCRM directamente desde el navegador del cliente. En definitiva, esta API no es más que una librería que se basa en javascript y jQuery para poder manipular los objetos del DOM de la página web resultante.
Hasta la versión 7.0 la única forma de programar los scripts de modificación o de contenido personalizado era mediante javascript puro.

En la versión 7.1 ya se podía utilizar jQuery, con la ventaja de olvidarnos de tener que vigilar el navegador sobre el que se ejecutase SageCRM, y pudiendo utilizar muchas de las funcionalidades y simpleza que nos da jQuery (como podéis ver en posts anteriores)

Finalmente, a partir de la versión 7.2 ya tenemos el uso de la API Cliente de SageCRM, que además de darnos toda la funcionalidad y simpleza que nos proporciona jQuery, también nos permitirá directamente trabajar sobre los propios objetos de SageCRM de una manera más simple y sencilla.

Por ejemplo:
a.      Resaltar la fila/columna de una tabla según un valor de la tabla
b.      Añadir un Botón
c.      Quitar un Botón
d.      Ocultar una pestaña
e.      Obtener datos del CurrentUser
f.       Modificar Estilo de un campo (tamaño, color…)
g.      Modificar la etiqueta de un campo
h.      Ocultar Campos
i.      

Resaltar la fila/columna de una tabla según un valor de la tabla

Dentro del script de contenido personalizado de la lista “CompanyGrid” añadiremos el siguiente script, que lo único que hace es mediante la API Cliente de CRM, pintar de color rojo (#FF6666) la fila de la lista que contiene en el campo “comp_status” el valor Inactive (teniendo en cuenta la traducción correspondiente)


<script>
    crm.ready(function(){
        crm.grids().filterWhere('comp_status', 'eq', crm.getTrans('comp_status','Inactive')).highlightRow('#FF6666');
    });

</script>





Veremos más ejemplos de código y usos de la API Cliente en próximas entradas.


4.    Posibilidad de crear librerías JavaScript compartidas para su uso dentro de SageCRM

A partir de la versión SageCRM 7.2 podemos crear librerías JavaScript para reutilizar código entre diferentes pantallas de SageCRM.

Lo único que tenemos que hacer es crear un fichero .js, que contenga las funciones que queremos “compartir”.

Este fichero se tiene que poner dentro de la nueva carpeta que tenemos en WWWRoot, que se llama “js”. (Todas las librerías personalizadas que hagamos, para tenerlas identificadas las pondremos dentro de otra subcarpeta que se llama ”custom”)

El propio SageCRM, cada vez que genera una página HTML, incluye en ella todas las librerías que están dentro de la carpeta “js”. Como por ejemplo “jquery-1.8.2.min.js”, “crm.js”, “CoCalendar.js”…

Ejemplo de  creación de una librería js.

Crearemos una librería que contenga una función que modifique el Caption de un campo, poniéndolo de color azul, y con un tamaño de letra de 14px.

Esta función la podremos utilizar desde cualquier pantalla dónde podamos ejecutar un JavaScript.

MisFunciones.js

Creamos el fichero MisFunciones.js, dentro de la carpeta “js”.

La primera línea de código nos permite añadir la función dentro del NameSpace “MisFunciones”. (Para tener un poco más organizadas nuestras funciones)

La función ResaltarCaption, recibe como parámetro el nombre del campo, y sobre este campo lo que hace es cambiar el color y el tamaño de la letra del Caption


var MisFunciones = MisFunciones || {};

MisFunciones.ResaltarCaption = function (campo) {
    var fcomp_name = crm.fields(campo);
    fcomp_name.caption().color("blue");
    fcomp_name.caption().fontSize(14);
}


Para ejecutar este script, lo único que tenemos que hacer es llamarlo desde el script de contenido personalizado de la página, o desde el script de modificación (si fuese necesario). También se podría llamar desde una página asp (siempre y cuando se incluya dentro de la sección de <SCRIPT>)


<script>

    crm.ready(function(){
        MisFunciones.ResaltarCaption("comp_name");
        MisFunciones.ResaltarCaption("comp_type");
        MisFunciones.ResaltarCaption("addr_country");
    })

</script>




No hay comentarios:

Publicar un comentario