Em Salesforce, um "Wrapper" é um padrão de design de programação usado para agrupar um conjunto de dados ou objetos diferentes em uma única unidade lógica. Este padrão é especialmente útil quando você deseja manipular e exibir um conjunto de informações em uma interface de usuário de maneira coesa. Vamos detalhar mais sobre o conceito de Wrapper e seus usos:
Definição
Um Wrapper é uma classe personalizada em Apex que contém outras variáveis e objetos, geralmente encapsulando várias propriedades e métodos relacionados. Ele permite que você trate um conjunto de informações relacionadas como uma única unidade, facilitando a manipulação de dados complexos em componentes visuais, como Visualforce pages ou Lightning components.
Usos Comuns de Wrappers
-
Agrupamento de Dados:
- Wrappers são frequentemente usados para agrupar dados de diferentes origens. Por exemplo, você pode ter uma classe Wrapper que agrupa informações de contas e contatos para serem exibidas juntas.
-
Manipulação de Interfaces Complexas:
- Em Visualforce pages ou Lightning components, Wrappers são úteis para gerenciar listas de registros com funcionalidades adicionais, como seleção múltipla, ações específicas por linha, ou agrupamento de informações.
-
Passagem de Dados em Métodos:
- Wrappers facilitam a passagem de dados complexos entre métodos, encapsulando múltiplos parâmetros em uma única estrutura de dados.
Exemplo de Uso de Wrapper
Aqui está um exemplo básico de como você pode definir e usar um Wrapper em Apex:
public class AccountContactWrapper {
public Account account { get; set; }
public List<Contact> contacts { get; set; }
public Boolean isSelected { get; set; }
public AccountContactWrapper(Account account, List<Contact> contacts) {
this.account = account;
this.contacts = contacts;
this.isSelected = false; // Padrão para não selecionado
}
}
Exemplo de Uso em Visualforce Page
Vamos supor que você queira exibir uma lista de contas com seus contatos em uma Visualforce page, permitindo que o usuário selecione várias contas:
public with sharing class AccountController {
public List<AccountContactWrapper> accountWrapperList { get; set; }
public AccountController() {
accountWrapperList = new List<AccountContactWrapper>();
List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 10];
for(Account acc : accounts) {
List<Contact> contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :acc.Id];
accountWrapperList.add(new AccountContactWrapper(acc, contacts));
}
}
public void processSelectedAccounts() {
for(AccountContactWrapper wrapper : accountWrapperList) {
if(wrapper.isSelected) {
// Processar a conta selecionada
}
}
}
}
E a correspondente Visualforce page pode ser:
<apex:page controller="AccountController">
<apex:form>
<apex:pageBlock title="Accounts and Contacts">
<apex:pageBlockTable value="{!accountWrapperList}" var="wrapper">
<apex:column>
<apex:inputCheckbox value="{!wrapper.isSelected}"/>
</apex:column>
<apex:column value="{!wrapper.account.Name}" headerValue="Account Name"/>
<apex:column>
<apex:repeat value="{!wrapper.contacts}" var="contact">
{!contact.Name}<br/>
</apex:repeat>
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value="Process Selected" action="{!processSelectedAccounts}"/>
</apex:pageBlock>
</apex:form>
</apex:page>
Benefícios de Usar Wrappers
- Organização: Facilita a organização e manipulação de dados complexos em estruturas claras e lógicas.
- Reutilização: Encapsula lógica comum em uma única classe, facilitando a reutilização e manutenção do código.
- Flexibilidade: Permite manipular e exibir dados de diferentes maneiras sem alterar a estrutura subjacente dos objetos Salesforce.
Em resumo, Wrappers são uma ferramenta poderosa no arsenal de um desenvolvedor Salesforce, permitindo a criação de interfaces de usuário ricas e interativas, bem como a manipulação eficiente de dados complexos.
Top comments (0)