Skip to content

Trabajar con listas de selección en Apex y Lightning Web Components ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Las listas de selección son una excelente manera de personalizar los objetos de Salesforce, proporcionando una solución reutilizable y fácil de administrar con validación incorporada. Sin embargo, acceder a los valores de la lista de selección de manera programática no es sencillo y es importante comprender las diversas técnicas y trampas involucradas. En esta publicación, discutiremos diferentes métodos para acceder a los valores de la lista de selección en Apex y Lightning Web Components. Cubriremos sus limitaciones y lo dejaremos con las mejores prácticas para seleccionar el enfoque correcto (según su caso de uso).

Usar listas de selección en Apex

Una práctica común para acceder a los valores de la lista de selección desde un disparador o un controlador de servidor es utilizar Apex dinámico. Dynamic Apex no se limita a SOQL dinámico, de hecho, le permite analizar objetos y campos mediante programación con métodos del espacio de nombres Schema . Con esta técnica, puede responder preguntas como: ¿Cuáles son los campos de un objeto? ¿Cuál es el tipo de un campo en particular? O, ¿cuáles son los valores posibles de un campo de lista de selección?

El siguiente ejemplo de código muestra cómo puede recuperar valores de lista de selección para el campo "Industria" del objeto "Cuenta" como una lista de Schema.PicklistEntry utilizando getDescribe() y getPicklistValues():

 // Describe el campo Account.Industry
Schema.DescribeFieldResult fieldDescription = Account.Industry.getDescribe ();
// Obtener valores de lista de selección de la descripción del campo
Entradas de lista = fieldDescription.getPicklistValues (); // Haz algo con las entradas
para (Entrada Schema.PicklistEntry: entradas) {
/ *
entry.getValue ()
entry.getLabel ()
entry.isActive ()
entry.isDefaultValue ()
* /
}

Si bien este enfoque es funcional y simple, tiene tres limitaciones importantes:

  1. Se basa en nombres de campos y objetos codificados de forma rígida.
  2. Devuelve valores que incluyen valores de lista de selección inactivos.
  3. No maneja valores para tipos de registros específicos.

Puede abordar fácilmente los dos primeros problemas escribiendo un método auxiliar genérico que funcione con cualquier campo y que solo devuelva las entradas activas de la lista de selección:

 // Recupera valores de lista de selección activos para un objeto y campo determinados
// Ejemplo: getPicklistValues (Account.Industry)
lista estática pública <Schema.PicklistEntry> getPicklistValues ( Campo Schema.sObjectField) { // Obtener todos los valores de la lista de selección Lista <Schema.PicklistEntry> entradas = field.getDescribe (). GetPickListValues (); // Devuelve solo valores de lista de selección activos Lista <Schema.PicklistEntry> activeEntries = nueva Lista <Schema.PicklistEntry> (); para (Entrada Schema.PicklistEntry: entradas) { if (entrada.isActiva ()) { activeEntries.add (entrada); } } return activeEntries;
}

El fragmento anterior es una implementación ingenua sin almacenamiento en caché, pero puede ver que las cosas comienzan a ponerse un poco más detalladas.

Otra consideración importante (que a menudo se pasa por alto) al acceder a los valores de las listas de selección es el hecho de que los administradores pueden restringir los valores de las listas de selección para un tipo de registro determinado. El enfoque dinámico de Apex que acabamos de cubrir no es compatible con este escenario. Si necesita trabajar con valores de lista de selección para tipos de registros específicos, deberá realizar una llamada a este punto final de la API de la interfaz de usuario :

 / ui-api / object-info / {objectApiName} / picklist-values / {recordTypeId} / {fieldApiName}

En aras de la brevedad, no mostraremos el código Apex completo en esta publicación, pero puede consultar una implementación en el repositorio de PicklistUtils . Este proyecto proporciona una PicklistUtils reutilizable con una cobertura completa de código y almacenamiento en caché. PicklistUtils ayuda a manejar todos los casos de uso de listas de selección con llamadas simples:

 // 1. Recuperar valores de lista de selección activos para un objeto sin tipo de registro
// ... con referencias a objetos y campos
Valores de lista = PicklistUtils.getPicklistValues (
Account.sObjectType,
Cuenta.Industria
);
// ... o con objeto y campo especificados como cadenas
Valores de lista = PicklistUtils.getPicklistValues (
'Cuenta',
'Industria'
); // 2. Recuperar valores de lista de selección activos para un tipo de registro específico
PicklistUtils.PicklistEntries valores = PicklistUtils.getPicklistValues (
'CustomerRequest__c', // Nombre del objeto
'0124H000000cz6R', // ID del tipo de registro
'Priority__c' // Nombre del campo
);

Uso de listas de selección en componentes web Lightning

Si está creando un componente web Lightning que se basa en valores de lista de selección, puede llamar a un controlador Apex personalizado para recuperar esos valores con los métodos que acabamos de describir. Pero la buena noticia es que existe una solución más sencilla. Usted puede evitar por completo Apex llamando directamente a la API de interfaz de usuario con el getPicklistValues adaptador de cable desde el lightning/uiObjectInfoApi módulo.

El getPicklistValues recupera todos los valores de la lista de selección para un tipo de registro y un nombre de campo determinados. El uso del adaptador es interesante por razones de rendimiento porque se beneficia de la caché de Lightning Data Service. Además, esto también reduce la cantidad de código Apex que debe mantener y probar (sin necesidad de un controlador Apex personalizado).

A continuación, se muestra un ejemplo de cómo puede recuperar todos los valores de la lista de selección para el campo Industria del objeto Cuenta:

 importar {LightningElement, wire} desde 'lwc';
importar {getPicklistValues} de 'lightning / uiObjectInfoApi';
importar INDUSTRY_FIELD desde '@ salesforce / schema / Account.Industry'; exportar clase predeterminada El ejemplo extiende LightningElement { @wire (getPicklistValues, { recordTypeId: '012000000000000AAA', // ID de tipo de registro predeterminado fieldApiName: INDUSTRY_FIELD }) getIndustryPicklistValues ({error, data}) { si (datos) { / * Haga algo con data.defaultValue y data.values [] Los valores se representan como objetos como este: { atributos: nulo, etiqueta: "Agricultura", valido para: [], valor: "Agricultura" } * / } más si (error) { // Manejar error } }
}

Para obtener un ejemplo completo de cómo usar getPicklistValues en combinación con otros adaptadores de API de interfaz de usuario, consulte la publicación de blog Recuperación de valores de lista de selección sin usar Apex.

Palabras de cierre

Con esto concluye nuestro recorrido por las diferentes técnicas para acceder a los valores de la lista de selección en Apex y Lightning Web Components. Aquí hay un resumen de las mejores prácticas que cubrimos en esta publicación:

  • Utilice Apex dinámico cuando trabaje con registros sin tipo de registro.
  • Utilice las llamadas de la API de la interfaz de usuario cuando trabaje con tipos de registros en Apex.
  • Utilice el adaptador de cable getPicklistValues de la API de interfaz de usuario cuando trabaje con componentes web Lightning.
  • Utilice una clase de utilidad de Apex como PicklistUtils para evitar la duplicación de código.

Sobre el Autor

Philippe Ozil es un promotor principal de desarrolladores en Salesforce, donde se centra en la plataforma Salesforce. Escribe contenido técnico y habla con frecuencia en conferencias. Es un desarrollador de pila completa y disfruta trabajar en proyectos de DevOps, robótica y realidad virtual. Síguelo en Twitter @PhilippeOzil o revisa sus proyectos de GitHub @pozil .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/05/working-with-picklists-in-apex-and-lightning-web-components.html

Últimas novedades 
de EGA Futura
1954
Desde hace más de 25 años potenciamos a las Empresas de Iberoamérica

🎬 Video de EGA Futura » Qué es un Almacén?

🎬 Video de EGA Futura » Qué es el Stock de almacén?

🎬 Video de EGA Futura » Los 7 pecados capitales que llevarán al infierno a tus argumentos de MKT y ventas [Cómo evitarlo…

🎬 Video de EGA Futura » Por qué Jefes y Gerentes frecuentemente Fallan al motivar Empleados [y en particular a Vendedores]

🎬 Video de EGA Futura » Estrategia de Precios . Cómo funciona este misterioso proceso y cómo Maximizar las Ganancias de …

🎬 Video de EGA Futura » 👉Atrévete a Liderar (levántate fuerte y cambia el Destino de tu Trabajo)

🎬 Video de EGA Futura » 😑 ¿Odias a tu propia Empresa? Guía para dejar de ser un Perdedor (Y encontrar una Salida)

🎬 Video de EGA Futura » 🤑 7 Estrategias Clave para hacer Crecer tu Empresa [Michael Gerber]

🎬 Video de EGA Futura » Qué hacer si Mercado Libre SUSPENDE mi Cuenta? 🤬

🎬 Video de EGA Futura » Como USAR el Manual del Usuario de EGA Futura? [Sistema de Gestión Windows] 😍

🎬 Video de EGA Futura » Recursos Humanos Aprovecha las Fortalezas y construye el Equipo perfecto

🎬 Video de EGA Futura » 8 Reglas de Oro para crear una Empresa Nueva

🎬 Video de Juan Manuel Garrido » Que Clientes DEBO priorizar en mi Empresa?

🎬 Video de EGA Futura » Las relaciones son todo: Claves para la Influencia Estratégica [y el Éxito de Ventas]

🎬 Video de EGA Futura » La Quinta Disciplina de Peter Senge [Método de Transformación continua]

🎬 Video de Juan Manuel Garrido » Adicto al Trabajo y sin Tiempo para tu Familia?

🎬 Video de EGA Futura » Costo dentro de una empresa

🎬 Video de EGA Futura » Aspectos Legales de la Empresa

🎬 Video de EGA Futura » Areas funcionales de una empresa

🎬 Video de EGA Futura » Por qué Dropbox es un Éxito

🎬 Video de EGA Futura » El “Método Turbina” para Potenciar tu Empresa [Receta ganadora]

🎬 Video de Juan Manuel Garrido » Tu energía debe estar puesta en las cosas que puedas cambiar

🎬 Video de Juan Manuel Garrido » Software para #ordenar y #administrar tu #negocio

🎬 Video de EGA Futura » Los 10 Mandamientos del Éxito [Para construir una empresa o carrera exitosa]

🎬 Video de Juan Manuel Garrido » Tu empresa necesita tener métricas claras

Trabajar con listas de selección en Apex y Lightning Web Components ☁️
Trabajar con listas de selección en Apex y Lightning Web Components ☁️