
Controladores de una Visualforce Page
Los Controladores de una Visualforce Page son la parte lógica que debemos conocer para crear y manejar aplicaciones de calidad.
Tipos de Controladores
Controladores Estándar
- Los controladores estándar son utilizados para gestionar objetos personalizados y por defecto.
- Contiene la funcionalidad y la lógica utilizada por las páginas estándar de Salesforce (standard Salesforce pages).
- Se incluyen en la etiqueta apex:page de la siguiente manera: <apex:page standardController=”Account”>
- Se pueden acceder a sus valores mediante force.com API como {! Account.Name }
<!-- Visualforce Page Example --> <apex:page standardController="Account"> Name: {! Account.Name } </apex:page>
Controladores Personalizados
- Pueden ser utilizados para sobrescribir funcionalidad, navegación y llamadas a web services.
- Utiliza su constructor por defecto, sin argumentos, es decir, sin parámetros.
- Los métodos de un controlador estándar pueden ser getters, setters y acciones.
//MyCustom Controller public class MyCustomController { Account acc; public MyCustomController () { acc = [SELECT Id, Name FROM Account WHERE Id =: ApexPages.currentPage().getParameters().get('id')]; } public Account getAccount () { return acc; } }
<!-- Visualforce page --> <apex:page controller="MyCustomController"> <apex:pageBlock> <apex:pageBlockSection> <apex:pageBlockTable value="{! account }" var="acc"> <apex:column value="{! acc.Id }" /> <apex:column value="{! acc.Name }"/> </apex:pageBlockTable> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
Métodos Getter
- Cada valor calculado y por mostrar en una visualforce page debe tener un método getter en el controlador.
- Los nombre de los métodos getter deben tener siempre el prefijo get en el inicio. Por ejemplo: getAccounts.
- Con el markup {! nombre_de_expresion } se puede conectar automáticamente una visualforce page con el método getter. Por Ejemplo: {! accounts } se conecta con el método getter getAccounts.
- Los métodos getter no tienen parámetros pero si deben retornar un objeto.
- Deben tener por lo menos un nivel de acceso público (Public access level).
- Un método getter es requerido para acceder a los datos de un objeto desde un controlador a una visualforce page.
- Un método getter puede obtener datos utilizando consultas SOQL.
//Getter example code public class MyCustomController { Account acc; public Account getAccount () { return acc; } }
Métodos Setter
- Son utilizados para enviar datos desde una visualforce page hacia el controlador.
- Los métodos setter no son requeridos.
- Estos métodos son ejecutados automáticamente antes de los métodos acciones.
- Su nombre deben empezar con el prefijo set. Por ejemplo: setVariable, el valor de variable debe ser obtenido desde una visualforce page.
- Deben tener por lo menos un nivel de acceso público.
- El método setter tiene un parámetro y no retorna ningún valor.
//Setter example code public class MyCustomController { Account acc; String accountName; public Account getAccount () { acc = [SELECT Id, Name FROM Account WHERE Id =: ApexPages.currentPage().getParameters().get('id')]; return acc; } public String getAccountName () { return accountName; } //Setter Method public void setAccountName(String value) { accountName = value; } public PageReference save () { acc.Name = accountName; update acc; return null; } }
<!-- Setter visualforce page example --> <apex:page controller="MyCustomController"> <apex:form> <apex:outputLabel value="Enter account: " /> <apex:inputText value="{!accountName}" /> <apex:commandButton value="Save" action="{!Save}" /> <p/> <apex:outputText value="Account Name entered: {!accountName}" /> </apex:form> </apex:page>
Propiedades para utilizar métodos Getter y Setter
- Podemos representar un método get y set con los sentencias get y set. Por ejemplo: public dataType propertyName {get; set;}
- Si una propiedad tiene una única sentencia get, es de sólo lectura.
- Si una propiedad tiene una única sentencia set, es de sólo escritura.
- Las propiedades con sentencias get y set son consideradas de lectura y escritura.
public class MyCustomController { public Account acc {get; set;} public String accountName {get; set;} public String accountPhoneNumber {get;} public String accountFile {set;} }
Extensiones de Controladores
Las extensiones de controladores son clases en Apex que pueden extender la funcionalidad de controladores estándares o personalizados.
- Podemos llamar a una extensión de controladores utilizando la palabra clave extension en la etiqueta <apex:page> de nuestra visualforce page.
- Se pueden utilizar múltiples extensiones de controladores en una visualforce page separándolos por comas.
- Deben tener un constructor con un sólo argumento del tipo ApexPages.StandardController para inicializar sus valores.
public class MyControllerExtension { private final Account acc; public MyControllerExtension(ApexPages.StandardController stdController) { this.acc = (Account)stdController.getRecord(); } public String getGreeting () { return 'This is a greeting message for: ' + this.acc.Name; } }
<apex:page standardController="Account" extensions="MyControllerExtension"> <h2>{!greeting}</h2> <p> <apex:form> <p><apex:inputField value="{!account.name}"/></p> <apex:commandButton value="Save" action="{!save}"/> </apex:form> </p> </apex:page>

Para saber más sobre Controladores, Getters y Setters puedes ir a:
Para saber más sobre Salesforce:

Todo lo que deberías saber sobre Excepciones de Apex en Salesforce
¿Por qué usar excepciones?
Las excepciones son causadas por errores encontrados cuando ejecutamos código que interrumpe su flujo normal de ejecución.
Se utilizan para recuperarse de los errores, gestionarlos y asegurarnos de una apropiada ejecución del código.
Tipos de Excepciones
Excepciones Nativas:
- Apex ofrece un framework nativo para gestionar excepciones por default.
- Suceden cuando se interrumpe el flujo del programa automáticamente por el sistema.
- Pueden haber múltiples bloques “Catch”. Sin embargo, la excepción genérica debe ser la última.
- El bloque Finally es ejecutado cuando la excepción sucede o no. Además, se utiliza regularmente para hacer limpieza de variables o código.

Excepciones Personalizadas:
- Para interrumpir el flujo del programa y gestionar los errores en cualquier parte del código.
- Para manejar excepciones de manera más detallada.
- Para crear una excepción personalizada se debe extender a la clase “Exception”.
- El nombre de nuestra clase personalizada debe terminar con la palabra “Exception”. Por ejemplo: “PurchaseException” o “CustomException”.

Métodos de Excepciones:
Métodos Comunes
- getTypeName(): Devuelve el tipo de excepción.
- getMessage(): Para obtener el mensaje del error.
- getCause(): Devuelve la causa de la excepción.
- getLineNumber(): Para devolver la línea en donde ocurre la excepción.
Otros Métodos
- getDmlFieldNames: Nombre de los campos que causan el error.
- getDmlId: Id de los registros fallidos que causan el error.
- getDmlMessage: El error del mensaje por un registro fallido específico.
- getNumDml: Devuelve el número de registros fallidos.
Consideraciones sobre Excepciones
Excepciones Gestionables:
- addError(): Para revertir DML operaciones y retornar el error en un trigger.
- ApexPages.message(msg): Para mostrar los errores en un visualforce page.
- Clase “Messaging”: Para devolver errores vía e-mail.
Excepciones no Gestionables:
- LimitExceptions no pueden ser manejables.
- Los errores de Assertion no pueden ser gestionables.

¿Alguna vez te has preguntado si realmente estás innovando?
¿Los proyectos en los que participamos son realmente innovadores? Comencemos por responder la siguiente pregunta: ¿Qué es la innovación?
Según el libro “Como trabaja Google” de Schmidt y Rosenberg: “La innovación abarca tanto la producción como la implementación de ideas novedosas y útiles”.
Con novedoso se refiere a crear una nueva funcionalidad que sea sorprendente, por lo tanto, no solamente en responder a la necesidad de un cliente o usuario.
Por otro lado, esta idea debe ser radicalmente útil, es decir, no basta con resolver pequeñas necesidades.
En otras palabras, para que algo sea innovador, según los autores mencionados, nuestra idea debe ser “Nueva, sorprendente y radicalmente útil“.
Entonces, ¿Tu proyecto es realmente innovador?¿Qué necesitas para que sea nuevo, sorprendente y muy útil? Compártelo en los comentarios.
Fuente: Cómo trabaja google – Eric Schmidt & Jonathan Rosenberg.

¿Qué es la arquitectura MVC en Salesforce?
¿Sabías que conociendo los elementos que componen la arquitectura MVC en Salesforce puedes programar mejor en esta plataforma?
MVC es un patrón de arquitectura de software que divide los datos de una aplicación en capas según su estructura (Modelo), lógica (Controlador) y forma de presentación de datos (Vista).
Los elementos de Salesforce se pueden clasificar en las diferentes capas de la arquitectura MVC de la siguiente manera:
Modelo:
- Objetos estándares y personalizados.
- Campos de objetos.
- Relaciones de objetos o Lookups.
- Clases en Apex para representar datos.
Vista:
- Páginas estándar.
- Visualforce Pages.
- Componentes.
- Layouts y Tabs.
Controlador:
- Controladores estándar y personalizados con Apex.
- Herencia (Extends)
- Reglas y Herramientas declarativas: Validation Rules, Flows, Triggers, Process, etc.
Teniendo en cuenta los elementos que componen cada capa de la arquitectura MVC en Salesforce, podemos incrementar nuestro conocimiento para desarrollar en esta plataforma, sobre todo al empezar. ¿Cuál es tu opinión sobre este tema?

Aplicación para saber cuántos casos de COVID-19 hay en tu país – Salesforce lwc con Javascript
Aprende a crear una aplicación en Salesforce con javascript para ver cuántos casos de Covid-19 hay en Perú diariamente. ¿Te animas a programarla?

Consejos para ser un MEJOR DESARROLLADOR de SOFTWARE
Si sienten que no están creciendo como Desarrolladores de Software o recién están empezando en este ámbito. Aquí les comparto algunos consejos para mejorar como programadores:
- Practicar diariamente.
- Hacer Programación Competitiva.
- Escribir código legible.
- Adaptarse a los cambios.
- Trabajar en habilidades blandas y sociales.
Para profundizar en estos puntos mira el siguiente video:

¿Cómo ganar dinero como desarrollador de software?
Si estas iniciando en el mundo del desarrollo de software y quieres empezar a generar dinero debes ver este video.

5 cosas que desearía haber aprendido como estudiante de informática
Aquí les comparto cinco cosas que desearía haber aprendido cuando era estudiante de Informática. ¿Qué te parecieron estos puntos?¿Que te gustaría haber aprendido cuando eras estudiante?

Maneja los errores de tu aplicación fácilmente en Salesforce con DMLException (Video)
Aprende a manejar los errores de tu Lightning Web Component de manera legible para tus usuarios en Salesforce con DML Exception class.

Crea un Lightning Web Component en 5 minutos – Salesforce
Si estas empezando en el mundo de los Lightning Web Components, aquí te enseño cómo hacer un componente de Salesforce en 5 minutos.