• Skip to primary navigation
  • Skip to main content

Jorge Arrambide

Especialista en programación web en java

  • ¿Quién soy?
  • Contactar
  • Servicios
    • Programación para empresas
    • Asesorías de programación universidad
  • Articulos
    • Java
    • Salesforce
    • WordPress

Blog

¿Cómo o en que lenguaje esta hecho Salesforce?

Como se puede observar en la siguiente imagen, que es un error en tiempo de ejecución, en un ambiente sandbox de Salesforce, el lenguaje de programación base de este CRM es Java.

Además, desde hace unos pocos años, su interfaz visual ahora es generada con el framework aura (que ya paso a ser propiedad de Salesforce y ya no es código abierto).

Salesforce tiene sus cimientos en Java

¿Dónde descargar el OpenJDK?

A continuación listo algunas “versiones” del OpenJDK, en donde puedes descargarlo, dependiendo de tus necesidades, puedes usar cualquiera de ellas, al final te comento qué versión estoy usando y porqué.

AdoptOpenJDK

AdoptOpenJDK es una comunidad y un código que crea binarios gratuitos de OpenJDK. Se publican en adoptopenjdk.net . Los binarios se publican durante cinco años después del lanzamiento inicial de la versión. Las compilaciones están disponibles para OpenJ9 (JVM de IBM) y HotSpot.

¿Qué es OpenJ9? Según el sitio web AdoptOpenJDK, OpenJ9 es un JVM que está diseñado para un bajo uso de memoria y un tiempo de inicio rápido. Un JVM ejecuta el código de bytes Java compilado, mientras que el lenguaje Java proporciona una sintaxis de cómo producir ese código de bytes.

Las compilaciones de AdoptOpenJDK no se prueban con el TCK (Technology Compatibility Kit) debido a un desacuerdo con Oracle. Realizan pruebas con un conjunto de pruebas funcionales, de integración y de rendimiento. También prueban bibliotecas populares de frameworks, lenguajes y aplicaciones .

Amazon Corretto

Amazon es el nuevo proveedor que ofrece versiones de OpenJDK en aws.amazon.com/corretto . Amazon Corretto 8 (basado en Java 8) esta disponible para su descargar y también ya cuenta con una versión 11. Corretto es único que tiene soporte gratuito a largo plazo de Amazon y además lo puedes usar en ambientes productivos de forma gratuita. Sus compilaciones han pasado el TCK. El soporte para Java 8 está programado para ejecutarse hasta junio de 2023.

Todas las instancias de AWS que ejecutan Java usan Corretto de forma predeterminada.

Azul Zulu

Azul construye y publica Zulu en azul.com/downloads/zulu . Es una compilación de OpenJDK que pasó el TCK y es totalmente compatible con el estándar Java SE. Zulu Enterprise es la oferta comercial de Azul con soporte pagado. Proporciona soporte a largo plazo durante ocho años después del lanzamiento inicial de la versión.

La plataforma Azure de Microsoft usa Zulu para su soporte Java.

Oracle OpenJDK

Oracle compila y publica compilaciones OpenJDK en jdk.java.net . Los binarios solo se publican durante los primeros seis meses después de un lanzamiento importante. La versión comercial de marca (que no se puede usar en producción sin pagar Oracle) está disponible en oracle.com/technetwork/java/javase/downloads .

Nota: jdk.java.net es donde se publican las compilaciones OpenJDK de Oracle para descargar, openjdk.java.net es el proyecto OpenJDK en sí.

Red Hat

Red Hat distribuye compilaciones OpenJDK a través de Red Hat Enterprise Linux, un producto comercial.

¿Qué OpenJDK deberías de usar?

Respuesta corta depende, ¿de qué?, de diversos factores, alguno de ellos:

1.- Que tan lento o rápido sea el área de TI, para actualizar la versión de Java que estén usando en sus actuales sistemas.

2.- Actualización de librerías del proyecto (JSF, Spring o cualquier otro framework), al cambiar a una versión más reciente, debes asegurar que funcione de manera transparente (que debería ser así ya que el core es el mismo)

3.- El servidor de aplicaciones (Wildfly, TomEE,Websphere, etc.) que uses, también es un factor, ya que dependiendo de la versión del servidor de aplicaciones, puede o no tener soporte para una versión reciente de OpenJDK.

Si tienes la fortuna de estar en un proyecto nuevo desde cero o bien tienes el control de una aplicación web creada recientemente, puedes hacer pruebas e implementar algunas de las versiones anteriormente mencionadas.

Al momento de escribir este articulo recomendaría Amazon Correto (que actualmente estoy usando en un nuevo proyecto), ya que como se puede leer en su sitio web, tendrá soporte y lo podrás usar en ambientes productivos sin costo.

Amazon Corretto
Amazon Corretto se perfila a ser uno de los más populares.

Cómo ocultar o mostrar el botón nuevo de una lista relacionada en Salesforce

Mostrar/ocultar botón nuevo

Lo primero que tienes que hacer, es ir a Configuración, luego a Gestor de objetos.

Selecciona el objeto que tiene la lista relacionada en la que deseas hacer el cambio.

Luego en “Formatos de página“, selecciona el o los formatos en donde quieres mostrar o ocultar el botón.

Luego te desplazas hasta la parte de Listas relacionadas, dando clic en la figura de herramienta.

Se mostrará un modal con la sección de Botones, en esa sección puedes mostrar o ocultar el botón Nuevo.

Mostrar o ocultar botón Nuevo en una lista relacionada

Cómo consumir WSDL de servicios web personalizados de salesforce

En este breve tutorial, mostraré los pasos necesarios para consumir un web service de una clase personalizada en Salesforce, con la herramiente SOAP UI.

Descargar el WSDL de compañía (enterprise)

Primero descargaremos el wsdl enterprise (recuerda descargar el WSDL del sandbox requerido), buscando en el menú de configuración lo siguiente:

Código personalizado / API, luego ir a la sección WSDL de compañia y guardarlos como entreprise.wsdl (puede ser otro nombre)

A continuación los pasos para importar el archivo enterprise.wsdl en SOAP UI:

1.- Crear un proyecto (New project SOAP) en SOAP UI

Crear proyecto en SOAP UI

2.- Dar clic en Browse

Seleccionamos el WSDL que descargamos de Salesforce

3.- Seleccionar el archivo enterprise.wsdl

Archivo enterprise.wsdl de Salesforce

4.- Nombrar el proyecto en SOAP UI, aquí muestro el prefijo que uso:

Nombramos el proyecto

5.- Así queda la estructura del proyecto del archivo enterprise.wsdl

Estructura del proyecto ENTERPRISE.wsdl creado

6.- El método que nos interesa, es login, lo expandimos (símbolo +) damos doble clic sobre Request1, y proporcionamos el usuario de salesforce que se usará para llamar a los métodos que serán expuestos mediante SOAP.

Es importante colocar en la etiqueta urn:password, la contraseña + token del usuario, todo junto sin espacios.

Importante colocar el password y token

7.- Una vez proporcionado el usuario y la contraseña + token, damos clic en el icono RUN (triangulo verde), y tendremos que ver una respuesta como la siguiente:

Obtenemos el sessionId de Salesforce

La siguiente fase, es descargar el WSDL de nuestra clase que creamos, que contiene los métodos que se van a exponer al cliente, para crear OTRO proyecto SOAP.

1.- Ir a configuración en Salesforce, buscar clases, y descargar el WSDL de la clase que deseamos consumir mediante SOAP, en este caso la clase que creé se llama STA_WS_ExternoToSF

Buscamos nuestra clase que esta declarada para ser consumida con SOAP

2.- Una vez descargado, repetimos el mismo paso, para crear otro proyecto SOAP, cargando el nuevo archivo WSDL y nombramos al proyecto con el nombre que desees. (De preferencia que tenga un sufijo que indique de que SANDBOX fue descargado dicho archivo)

3.- En el nuevo proyecto SOAP, buscamos el método que queremos consumir, en este caso, el método que cree fue upsertCliente (así nombré el método el cual inserta o actualiza) y con el sessionId obtenido en la respuesta del método login, lo colocamos como en la siguiente imagen.

En la etiqueta <sta:xml> colocamos el xml que recibirá el método, importante que este envuelto en <![CDATA[ xxxxx ] ]>

Ejemplo de como consumir un método mediante SOAP de Salesforce

¿Cómo cambiar el nombre de las imágenes al subirlas a la biblioteca de medios?

El nombre de las imágenes que subes a wordpress, puede ayudar a ganar relevancia para el SEO tu sitio web e incluso para que se muestre en la búsqueda de imágenes de Google y si quieres cambiarlo al momento de cargar las imágenes, lo puedes hacer mediante el plug-in File Renamig on Upload.

A continuación algunas capturas de pantalla de como funciona el plug-in.

Ejemplo de como limpia el nombre de caracteres especiales
Patrón para renombrar el archivo
Reglas que puedes configurar al subir una imagen.

Cómo usar el loading spinner en componentes lightning

Esta es la forma más “elegante” que he encontrado, para mostrar/ocultar el gif del spinner.

Necesitaremos lo siguiente:

  • Handler mediante el evento aura:waiting y aura:doneWaiting
  • Una función en el controller que sea invocada por aura:waiting y otra que sea invocada por aura:doneWaiting
  • Condicional aura:if, para mostrar o ocular el spinner
  • Los tags (div y span) con sus respectivas clases (slds-spinner…) para desplegar el spinner
  • El else (aura:set attribute=”else”), de la condicional de aura:if

En el siguiente ejemplo, al cargar el componente se muestra un botón Guardar, al dar clic en el botón, entra en acción el evento aura:waiting, que manda llamar la función waiting en el controller, con lo cual se muestra el gif del spinner.

Cuando se termina de ejecutar la función funcionGuardar , del evento clic del botón Guardar, entra en acción el evento aura:doneWaiting, para llamar a la función doneWaiting del controller, y cambiar el estatus de la variable HideSpinner.

Una desventaja, es que si tienes una página usas más de 2 componentes y cada componente tiene su propio spinner y sus propios eventos de aura; al activar el evento aura:waiting, el spinner se mostrará en todos los componentes.

Código en el componente:


&lt;aura:handler event="aura:waiting" action="{!c.waiting}"/&gt;
&lt;aura:handler event="aura:doneWaiting" action="{!c.doneWaiting}"/&gt;
&lt;aura:attribute name="HideSpinner" type="Boolean" default="true"/&gt;

&lt;aura:if isTrue="{!v.HideSpinner}"&gt;
	
	&lt;div class="slds-spinner_container" &gt;
		&lt;div class="slds-spinner--brand slds-spinner slds-spinner--large" role="alert"&gt;
			&lt;span class="slds-assistive-text"&gt;Loading, Please Wait...&lt;/span&gt;
			&lt;div class="slds-spinner__dot-a"&gt;&lt;/div&gt;
			&lt;div class="slds-spinner__dot-b"&gt;&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	
	&lt;aura:set attribute="else"&gt;
	  &lt;lightning:button variant="brand" label="Guardar" title="Guardar" onclick="{! c.funcionGuardar }"/&gt;
	&lt;/aura:set&gt;

&lt;/aura:if&gt;

El siguiente código estaría en el controller.js

waiting: function(component, event, helper) {
  component.set("v.HideSpinner", true);
 },
 doneWaiting: function(component, event, helper) {
  component.set("v.HideSpinner", false);
 }

Actualización

Los eventos aura:waiting y aura:doneWaiting, están en desuso según la documentación oficinal de Salesforce, por lo que se recomienda usar otro método.

  • « Go to Previous Page
  • Page 1
  • Page 2
  • Page 3
  • Page 4
  • Page 5
  • Interim pages omitted …
  • Page 7
  • Go to Next Page »

Derechos de autor © 2025

  • Política de privacidad
  • Política de cookies
Este sitio web utiliza cookies propias para poder optimizar su visita a la página y cookies de terceros para recoger información sobre sus visitas y el uso de nuestra web. Vd. puede permitir su uso, rechazarlo o cambiar la configuración cuando lo desee. En caso de seguir navegando, se considerará que se acepta el uso. Más información: Política de Cookies