Qué es Salesforce?

Salesfoce es un software CRM (Customer Relationship Management) utilizado ampliamente en la actualidad. Funciona en la nube, y apunta a abastecer un amplio número de funcionalidades como ser:

  • Mantener información actualizada de los clientes.
  • Generar nuevos contactos.
  • Ofrecer productos de manera más sencilla.
  • Obtener reportes sobre los clientes.
  • Etc.

La idea es brindar un servicio amplio y firme, brindando esas características out-of-the-box.

Qué es Apex?

Apex es un lenguaje de programación tipado, orientado a objetos, que se encuentra disponible en las plataformas Salesforce. Tiene una sintaxis muy parecida a Java pero la forma en la cual es utilizado, y sus estructuras, difiere bastante de los lenguajes tradicionales.

Básicamente, si queremos modificar la instancia de Salesforce, necesitamos utilizar Apex. El lenguaje presenta las siguientes características:

  • Data Manipulation Language (DML): permite la creación/modificación/borrado de objetos.
  • Inline Salesforce Object Query Language (SOQL) y Salesforce Object Search Language (SOSL): nos permite escribir consultas embebidas en el código para retornar objetos.
  • Bulk processing: cuenta con estructuras que nos brindan la posibilidad de procesar un conjunto de objetos en forma de batch. Esto ayuda a que no se bloquee nuestra instancia (recordar que está en la nube, por ende comparte recursos con otras).

Para qué usar Apex?

Salesforce intenta cubrir muchas funcionalidades de manera genérica. Nos brinda un conjunto de objetos que podemos utilizar, y un comportamiento predeterminado que se encuentra por defecto en la plataforma. En muchos casos, sin embargo, nos vemos en la necesidad de agregar o modificar esos objetos y/o comportamientos. Es aquí donde entra en acción Apex.

Apex nos va a permitir agregar el comportamiento que necesitamos en nuestra instancia de Salesforce, con muy poco esfuerzo. La idea es modularizar el desarrollo, acoplando a lo existente las nuevas funcionalidades.

El proceso de desarrollo

Al utilizar Apex/Salesforce, nos vamos a enfrentar a varios cambios de paradigma en el proceso de desarrollo. Venimos acostumbrados a tener una “copia” local del ambiente de desarrollo, modificar el código del sistema, y probarlo en nuestro servidor.

Debido a la naturaleza de la plataforma, al funcionar en la nube, el proceso es distinto. Para poder desarrollar, necesitamos primero obtener una cuenta de desarrollador en Salesforce. Una vez que tenemos la cuenta creada, dispondremos de una instancia en la nube, la cual replica (con algunas restricciones en cuanto a recursos) una instancia real de producción. A continuación se muestra una imágen donde se ve la nueva instancia:

Organización de desarrollo funcionando

El Token de seguridad

Para poder utilizar el IDE con nuestra instancia, vamos a necesitar, además del nombre de usuario (que es la forma en que Salesforce identifica qué instancia queremos usar) y la contraseña, un token de seguridad. Para esto, tenemos que ir a nuestra instancia e iniciar sesión. Una vez dentro, hacer click en nuestro nombre (que aparece en la parte de arriba a la derecha),  Mi Configuración > Personal > Restablecer mi token de seguridad:

Restablecer token de seguridad

Luego de restablecer el token, recibiremos un correo con el mismo, y ya lo podremos usar.

El IDE

En esta página encontramos los pasos para instalar el IDE de Salesforce. Este no es un IDE distinto, sino que funciona sobre eclipse, como un plugin. En otras palabras, primero hay que instalar eclipse, y luego el plugin Force.com IDE.

Luego de instalar el plugin, lo que tenemos que hacer es vincular nuestro IDE con nuestra instancia de desarrollo de Salesforce, para lo cual creamos nuestra cuenta de Desarrollador en la sección anterior.

Luego, con el IDE listo y nuestra cuenta de desarrollador, vamos a crear un nuevo projecto, de tipo Force.com Project, lo que nos va a forzar a vincular nuestro IDE con nuestra organización (que es el sinónimo de Salesforce para nuestra cuenta/instancia de desarrollador). El entorno nos solicita que ingresemos los datos pertenecientes a nuestra instancia:

Vincular el IDE con nuestra instancia

Luego de completar los datos correspondientes, se nos pide que seleccionemos los contenidos que queremos tener en nuestro proyecto, para lo cual seleccionamos Selected Metadata Components, y luego procedemos a elegir los componentes que queremos. Para este ejemplo, simplemente vamos a elegir todos, por lo que el IDE va a descargar bastante código:

Seleccionar todos los componentes

Ahora sí, tenemos todo lo necesario para comenzar el desarrollo. Dentro de la carpeta src de nuestro nuevo proyecto vamos a encontrar subcarpetas que contienen todos los componentes que elegimos descargar.

El IDE funciona de la siguiente manera:

  • Mediante el browser, podemos utilizar nuestra instancia de Salesforce. Siempre se encuentra “corriendo”, ya que está en la nube.
  • El código que tenemos localmente es lo que nuestra instancia en la nube está utilizando actualmente (ya que están vinculados).
  • Cualquier modificación que hagamos, al guardar, será enviada a nuestra instancia, y luego podremos ver el cambio reflejado inmediatamente en el browser.

Este último punto es una pequeña desventaja que presenta el IDE (y el proceso en general), ya que cualquier modificación causa que todo el código sea enviado al servidor remoto. Podemos evitar esto al trabajar sin conexión (configurando el IDE) y luego conectarlo para que se envíe todo, y así poder probar.

Ejemplo: modificar un campo de un objeto

Con el objetivo de mostrar el proceso de desarrollo, vamos a modificar un objeto existente en la plataforma. Veremos cómo modificarlo localmente, y luego el cambio reflejado en nuestra instancia.

Tomemos entonces, el objeto Account. En Salesforce, vamos a la pestaña Cuentas, y apretamos el botón Nueva. Se desplegará un formulario con los campos disponibles para este objeto:

Formulario para la creación de una Cuenta

En nuestro workspace, vamos a abrir el archivo que contiene los campos que forman el objeto Account, el cual es src/objects/Account.object, y vamos a agregar una nueva opción dentro del campo Industry:

Agregamos el siguiente fragmento:

<picklistValues>
    <fullName>Computers</fullName>
    <default>false</default>
</picklistValues>

Dentro del campo Industry:

<fields>
    <fullName>Industry</fullName>
    <picklist>
        <!-- ... -->
        <picklistValues>
            <fullName>Computers</fullName>
            <default>false</default>
        </picklistValues>
        <!-- ... -->
        <sorted>false</sorted>
    </picklist>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
</fields>

Luego de esto, vamos a nuestra instancia en el browser, refrescamos y ya vemos la nueva opción en el campo que modificamos (tengamos en cuenta que el campo Industry se traduce al campo Sector):

El objeto account modificado

Conclusiones

Intentamos mostrar con este post introductorio una idea general de cómo es el proceso de desarrollo utilizando Apex en las plataformas de Salesforce.

Para una próxima entrada, queda por ver los distintos tipos de componentes que podemos modificar, cómo agregar nuevos objetos, y principalmente como mejorar y adaptar el comportamiento estándar, utilizando triggers.