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 » Conceptos de Seguridad (EGA Futura ERP / Salesforce)

🎬 Video de EGA Futura » Conceptos de Seguridad (EGA Futura ERP / Salesforce)

🎬 Video de Juan Manuel Garrido » Claves para tu Productividad diaria 🙌✅

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Conceptos básicos con EGA Futura Windows

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Configuración de EGA Futura Windows

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Funcionamiento con EGA Futura Windows

🎬 Video de EGA Futura » Configuración de la Plataforma EGA Futura

🎬 Video de EGA Futura » Configuración de usuario en EGA Futura

🎬 Video de EGA Futura » Como automatizar la publicación en Redes Sociales?

🎬 Video de Juan Manuel Garrido » Cómo restaurar la configuración de fábrica de EGA Futura Windows sin perder la información

🎬 Video de Juan Manuel Garrido » Factura electrónica: Prueba de Factura Electronica previa a la activacion

🎬 Video de EGA Futura » Como se registran los Beneficios de cada Empleado en la base de datos de EGA Futura

🎬 Video de EGA Futura » EGA Futura Time Clock » Reloj de Control horario y asistencia

🎬 Video de EGA Futura » Como registrar Observaciones en un Empleado dentro de EGA Futura People?

🎬 Video de EGA Futura » Cómo registrar la Educación de cada Empleado en EGA Futura People?

🎬 Video de EGA Futura » Como hacer la Desvinculación de un Empleado? (Offboarding)

🎬 Video de EGA Futura » Como registrar Habilidades o Skills de empleados dentro de EGA Futura

🎬 Video de EGA Futura » Como hacer el Onboarding o Proceso de Incorporación de un Empleado?

🎬 Video de EGA Futura » Cómo administrar Turno de trabajo dentro de EGA Futura

🎬 Video de EGA Futura » Que es un Ticket interno dentro de la Plataforma EGA Futura

🎬 Video de EGA Futura » Que son los Entrenamientos de Empleado en EGA Futura people?

🎬 Video de EGA Futura » Qué son los Epics dentro de EGA Futura

🎬 Video de EGA Futura » Qué es EGA Futura People?

🎬 Video de EGA Futura » EGA Futura People » Asistencias

🎬 Video de EGA Futura » Soporte EGA Futura » Software de Gestión Windows vs Software de Gestión Nube 🤩

🎬 Video de EGA Futura » ツ Comparando un Objeto con un Fichero

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