26 de septiembre de 2022

Obtener campos de un Fieldset dinámicamente con Apex

En este post vamos a explicar como podemos obtener los campos y su información ubicados en un fieldset por medio de un código Apex bastante simple. Además conseguiremos un resultado dinámico y reutilizable.

Los fieldsets son un elemento muy útil en Salesforce, además están disponibles tanto para objetos standard como custom. Como su nombre indica nos permiten establecer agrupaciones de campos de manera declarativa. ¿Parece sencillo? Pues en la simplicidad, una vez más, esta su belleza. Estos fieldsets pueden ser utilizados por Aura o Lightning Web components para dibujar secciones, implementar validaciones de campos, etc. todo ello de una manera dinámica ahorrando futuras modificaciones de código.

Para conseguir nuestro objetivo, el primer punto a tener en cuenta es la siguiente sentencia:

SObjectType.Account.FieldSets.exampleFieldSet.getFields();

En este caso estaríamos obteniendo los campos pertenecientes al objeto: Account dentro del fieldset: exampleFieldSet.

Esto es útil, pero podemos conseguir algo mejor. A continuación vamos a explicar el funcionamiento de un método que recibe el nombre de un objeto y de un fieldset y nos devuelve sus campos. De esta manera obtenemos una solución reutilizable y mucho más escalable.

public class UtilFieldSet {
 public static List<Schema.FieldSetMember> readFieldSet(String fieldSetName, String ObjectName)
    Schema.SObjectType sObjectObj = Schema.getGlobalDescribe().get(ObjectName);
    Schema.DescribeSObjectResult describeSObj = sObjectObj.getDescribe();
    Schema.FieldSet fieldSetObj = describeSObj.FieldSets.getMap().get(fieldSetName);
    return fieldSetObj.getFields();
 } 
}

En primer lugar, haciendo uso de la Schema class obtenemos el sObject token para el objeto seleccionado. Después obtenemos toda la información de ese objeto para finalmente poder acceder a sus fieldsets. Si queda algún tipo de duda, os ayudo encantado por medio de la sección comentarios.

A continuación, el ejemplo de llamada a este método:

List<Schema.FieldSetMember> fieldSetMemberList =  UtilFieldSet.readFieldSet('exampleFieldSet','Account');

Por último, podemos obtener diferente información sobre los campos incluidos en el fieldset, por ejemplo: API Name, label, si es obligatorio, entre otras. En este caso, usando como ejemplo la llamada anterior, donde almacenamos el resultado en la variable: fieldSetMemberList, la sintaxis para cada uno de los parámetros deseados sería la siguiente:

Label: fieldSetMemberObj.getLabel()
API Name:  fieldSetMemberObj.getFieldPath()
Type: fieldSetMemberObj.getType()
Required: fieldSetMemberObj.getRequired()

¡Espero que os haya sido útil! Os leo en comentarios.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.