Você está aqui:
Arquivar consultas de dados do Apex
As Consultas de dados do Apex do Arquivo permitem o acesso programático aos dados arquivados no aplicativo Arquivo. Essas consultas de dados automatizam processos de negócios, dão suporte a integrações de sistemas de terceiros, criam exibições e relatórios personalizados e fazem referência cruzada de dados arquivados com registros ativos.
O componente Arquivar e Pesquisa de Arquivo fornecem opções para recuperação de dados manual. O Apex oferece recursos avançados, como parâmetros de consulta, filtros e paginação, para acesso direto a dados por meio de código.
Os recursos de Consulta de dados do Apex incluem:
- Pesquise registros arquivados usando critérios especificados.
- Use correspondência parcial com um asterisco (*).
- Retorne conjuntos de dados grandes em lotes de até 1.000 registros por página.
- Aplique até seis filtros para refinar seus resultados.
Esses objetos do Salesforce relacionados ao sistema são filtrados e não podem ser pesquisados pelo Apex.
FeedHistoryRelationShare
Para manter o desempenho ideal e garantir que apenas dados arquivados relevantes sejam retornados, o Arquivo exclui esses objetos das pesquisas.
Para acessar arquivos arquivados, use o componente Arquivo ou Pesquisa de arquivo.
Arquivar métodos de consulta de dados do Apex
Para definir como consultar dados arquivados, defina o método fornecido pelo Arquivar Apex.
- Acessar dados de arquivo — Os métodos em
ArchiverAccessorsão projetados para interagir com registros arquivados. Em seguida, você pode criar consultas e recuperar dados armazenados no produto Arquivo. - Definição de operações de consulta – Essas assinaturas informam quais tipos de consultas você pode realizar usando o Apex, como pesquisas globais e consultas filtradas.
- Uso guiado – Ao examinar assinaturas de método, os desenvolvedores podem entender as entradas e saídas necessárias para suas implementações.
performArchiverGlobalSearch Método
Esse método indica a funcionalidade para realizar uma pesquisa global em dados arquivados.
Parâmetros de Query
As Consultas de dados do Apex usam vários parâmetros para refinar sua pesquisa. Alguns parâmetros são obrigatórios, enquanto outros são opcionais. Entender como configurar cada parâmetro ajuda você a obter os resultados mais precisos e relevantes.
- Nome do objeto – Especifica o tipo de objeto do Salesforce a ser consultado.
Por exemplo,
string sObjectName = 'Account'especifica que a consulta tem como alvo registros de Conta.Esse parâmetro é obrigatório.
Nota Cada consulta tem como alvo um único objeto. Use consultas separadas para recuperar dados de vários objetos. - Filtros de pesquisa – Filtros que limitam os resultados da pesquisa com base nas condições de campo.
- Nome do campo — O campo pelo qual você deseja filtrar, como
NameouCreatedDate - Valor ou lista de valores – O valor ou os valores específicos que você deseja que correspondam
Exemplo: Filtro de valor único
SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test');Essa consulta retorna registros em que o campo Nome corresponde à string "test".
Exemplo: Filtro de múltiplos valoresSF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'});Essa consulta retorna registros em que o campo Status corresponde às strings "Aberto" ou "Fechado".
Tratamento de valores vazios ou nulos – para pesquisar registros em que um campo está vazio ou nulo, você pode adicionar uma string vazia ("") à Lista de valores.Exemplo:
Essa consulta retorna registros de Caso em que o campo Assunto está vazio ou nulo.List<SearchFilter> filters = new List<SearchFilter>(); filters.add(new SearchFilter('Subject', ''));Limites do filtro de pesquisa:
- As consultas devem ter pelo menos um filtro por consulta.
- As consultas podem ter até seis filtros, combinados com lógica de
AND, por consulta. - Os filtros são combinados usando a lógica
ANDpor padrão. Lógica deORnão é suportada no momento. - A lista de valores de um filtro não pode exceder 1.000 itens.
Esse parâmetro é obrigatório.
- Nome do campo — O campo pelo qual você deseja filtrar, como
- Filtros de data – Se você quiser pesquisar com base em datas, use o parâmetro
DateRangee os filtros obrigatórios. ODateRangefiltra registros por campos comoArchiveDate,CreatedDateouModifiedDate.Exemplo: Filtro de data para consulta de data específica
Date todayDate = Date.today(); Date jan1st2024 = Date.newInstance(2024, 1, 1); DateRange dateRange = new DateRange('archive_date', jan1st2024, todayDate);Essa consulta retorna registros arquivados entre 1o de janeiro de 2024 e hoje.
Exemplo: Filtro de data para vários intervalos de datas
List<SF_Archive.SearchFilter> filters = new List<SF_Archive.SearchFilter>(); SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test'); filters.add(filter); string sObjectName = 'Account'; Date myDate = Date.newInstance(2024, 1, 11); // January 11, 2024 Date myDate2 = Date.newInstance(2023, 12, 25); // December 12, 2023 SF_Archive.dateRange range = new SF_Archive.dateRange('CreatedDate', myDate, myDate); SF_Archive.dateRange range2 = new SF_Archive.dateRange('CreatedDate', myDate2, myDate2); list<SF_Archive.dateRange> ranges = new list<SF_Archive.dateRange> {range, range2}; SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, filters, ranges);Essa consulta retorna registros arquivados entre 12 de dezembro de 2023 e 11 de janeiro de 2024.
Recomendações de filtro de data:
- Para pesquisar com base na Data de arquivamento, adicione o campo de data de
archive_date. - Use o formato de data do Apex: MM/DD/AAAA.
Esse parâmetro é opcional.
- Para pesquisar com base na Data de arquivamento, adicione o campo de data de
- Campos retornados – Especifique campos para incluir nos resultados. Se não for especificado, todos os campos serão retornados.
Exemplo: Retornar campos específicos
List<string> fields = new List<string>{'Name', 'CreatedDate'};Essa consulta retorna apenas os campos
NameeCreatedDatepara cada registro.Esse parâmetro é opcional.
- Tamanho da página – define o número de registros por consulta. O número padrão de registros por consulta é de 25 e o máximo é de 1.000.
Exemplo: Tamanho de página personalizado
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters, 100, fields);Essa consulta retorna 100 registros por página.
Esse parâmetro é opcional.Nota Exceder 1.000 registros em sua consulta aciona um erro de tempo de execução. - Direção de classificação – classifica os resultados por um campo, como
CreatedDate.- Crescente (
asc): Mais antigo para mais novo. - Decrescente (
desc): Mais novo para mais antigo.Exemplo: Consulta de classificação
SortingDirection sortingDirection = new SortingDirection('desc');Essa consulta retorna registros classificados em ordem decrescente com base na sua
CreatedDate.Esse parâmetro é opcional.
- Crescente (
getNextPage Método
Se os resultados não caberem na mesma página, esse método chamará a próxima página.
Parâmetro de ScrollId
Use a paginação para retornar conjuntos de dados grandes buscando resultados em páginas de até 1.000 registros.
Para configurar o fluxo de trabalho de paginação, execute a consulta inicial, use a scrollId da resposta para buscar páginas subsequentes e continue até scrollId = '-1'..
Exemplo: Buscar resultados com paginação
// Perform initial search query
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account',
filters, 100, fields);
// Get the search response
SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap();
// Process first page of results
system.debug('Total result count: ' + searchResponse.totalResultCount);
system.debug('Records: ' + searchResponse.records);
// Fetch next page using the scrollId
if (searchResponse.scrollId != '-1') {
SF_Archive.ArchiverAccessorResponse nextPageRes = SF_Archive.ArchiverAccessor.getNextPage(searchResponse.scrollId);
SF_Archive.ArchiverAccessorSearchResponse nextPageResponse = nextPageRes.getSearchResponseMap();
system.debug('Next Page Records: ' + nextPageResponse.records);
}Acessar os métodos
Para localizar as assinaturas do método, acesse Classes do Apex em Configuração. Abra a aula de ArchiverAccessor. Localize todos os métodos listados sob o namespace performArchiverGlobalSearch.
Exemplo de consulta de dados
Este exemplo recupera registros de Account usando estas condições.
- Campos:
Name,CreatedDate - Limitar: 100 registros por página
- Nome: Contém string "test"
- Classificação: Decrescente por
CreatedDate
List<SF_Archive.SearchFilter> filters = new List<SF_Archive.SearchFilter>();
SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test');
filters.add(filter);
List<string> fields = new List<string>{'Name', 'CreatedDate'};
SortingDirection sortingDirection = new SortingDirection('desc');
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account',
filters, 100, fields, sortingDirection);
Solução de problemas de erros comuns
| Código de erro | Descrição | Resolução |
|---|---|---|
INTERNAL_ERROR |
Ocorreu uma falha inesperada. | Entre em contato com o suporte com detalhes do erro. |
RESOURCE_LIMIT_ERROR |
Limites de paginação ou tamanho de consulta excedidos. | Reduza o tamanho da página ou refine os filtros de pesquisa. |
VALIDATION_ERROR |
Critérios de pesquisa ausentes ou inválidos. | Garanta que todos os campos e filtros sejam válidos. |
Recomendações adicionais
- Monitore o uso da API para evitar atingir limites.
- Para gerar a resposta a um objeto, serialize-a em JSON e, em seguida, desserialize-a de volta em um objeto.
- Verifique se os campos estão habilitados e acessíveis.
- Verifique novamente todos os parâmetros de consulta.
- Para problemas não resolvidos, entre em contato com o suporte da Salesforce com registros detalhados.
Para procedimentos de teste passo a passo, consulte Arquivar teste do Apex.
- Arquivar consultas de dados do Apex – Exemplo de código
Neste exemplo de código, um filtro, um intervalo de datas e uma solicitação de pesquisa de arquivo são validados por meio do código de status no aplicativo Arquivo. - Arquivar consultas de dados do Apex – exemplo de caso de uso 1
Este exemplo de caso de uso mostra como criar e personalizar um componente que exibe Contas de alta prioridade no aplicativo Arquivo. - Arquivar consultas de dados do Apex – exemplo de caso de uso 2
Este exemplo de caso de uso mostra como o Apex Arquivar lida com tarefas sem exceder limites do regulador, como limites de CPU ou chamadas de tempo limite, no aplicativo Arquivar.
Arquivar consultas de dados do Apex – Exemplo de código
Neste exemplo de código, um filtro, um intervalo de datas e uma solicitação de pesquisa de arquivo são validados por meio do código de status no aplicativo Arquivo.
Uma chamada de getNextPage após (scrollId != -1) é incluída porque o tamanho dos resultados é limitado na chamada de performArchiverGlobalSearch.
string sObjectName = 'Account';
list<SF_Archive.SearchFilter>request = new list<SF_Archive.SearchFilter>();
SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('Name', 'test');
request.add(filter1);
SF_Archive.dateRange range = new SF_Archive.dateRange('CreatedDate', system.today()-150, system.today());
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, range);
if(res.getStatusCode() == 200){
system.debug('code: ' + res.getStatuscode());
SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap();
system.debug('count: '+ searchResponse.totalResultCount);
system.debug('scrollid: '+ searchResponse.scrollId);
system.debug('list size: '+ searchResponse.records.size());
string scrollId = searchResponse.scrollId;
integer page = 1;
while(scrollId != '-1'){
page++;
SF_Archive.ArchiverAccessorResponse secondPage =
SF_Archive.ArchiverAccessor.getNextPage(searchResponse.scrollId);
if(secondPage.getStatusCode() == 200){
SF_Archive.ArchiverAccessorSearchResponse searchResponse2 = secondPage.getSearchResponseMap();
scrollId = searchResponse2.scrollId;
system.debug('count: '+ searchResponse2.totalResultCount);
system.debug('scrollid: '+ searchResponse2.scrollId);
system.debug('list size: '+ searchResponse2.records.size());
system.debug('page number: '+ page);
} else{
system.debug('response is != 200: '+ secondPage.getStatusCode());
system.debug('body: '+ secondPage.getBody());
break;
}
}
} else {
system.debug('status code erorr|: '+ res.getStatusCode());
system.debug('status code message|: '+ res.getErrorMessage());
}Arquivar consultas de dados do Apex – exemplo de caso de uso 1
Este exemplo de caso de uso mostra como criar e personalizar um componente que exibe Contas de alta prioridade no aplicativo Arquivo.
Caso de uso
Seu negócio exige que a Equipe de suporte de nível 3 tenha acesso para visualizar Casos arquivados com um status de alta prioridade.
Este exemplo mostra como:
- Crie um Componente da Web Lightning (LWC) personalizado.
- Obtenha dados arquivados usando consultas de dados do Apex.
- Aplique o filtro (alta prioridade). Nota Outros filtros podem ser personalizados consultando o código em Arquivar consultas de dados do Apex – Exemplo de código.
Este exemplo está limitado a 25 registros. O Apex permite que você defina os resultados como 1.000 por página. O padrão é 25, com a opção de paginação pelos resultados.
Componente exibindo casos de alta prioridade
SdkUseCaseWidget.js de amostra
Neste exemplo de código, o parâmetro é AccountRecordId.
import { LightningElement, api, track } from 'lwc';
import getCases from '@salesforce/apex/ArchiveSdk.getCases';
export default class SampleSdkUseCaseWidget extends LightningElement {
@api recordId;
columns = [
{ label: 'Case Number', fieldName: 'caseNumber', type: 'text', cellAttributes: {alignment: 'center'}},
{ label: 'Subject', fieldName: 'subject', type: 'text' , cellAttributes: {alignment: 'center'}, },
{ label: 'Priority', fieldName: 'priority', type: 'text', cellAttributes: {alignment: 'center'}, },
{ label: 'Status', fieldName: 'status', type: 'text', cellAttributes: {alignment: 'center'}, }
];
@track records;
@track data
@track _loading;
async connectedCallback() {
this._loading = true;
try {
const result = await getCases({parentId: this.recordId})
this.records = result;
this._loading = false;
} catch (error) {
this._loading = false;
}}
} SdkUseCaseWidget.html de amostra
O controlador do Apex que o LWC usa chama Consultas de dados do Apex.
SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields, range);Esta é a chamada para Arquivar Apex. Ela inclui estes parâmetros.
- sObjectName – Descreve a pesquisa
- Filtros – Usados para recuperar os dados
- Campos – Os campos projetados a serem retornados dos dados.
- Intervalo – o intervalo de datas usado para consultar os dados.
<template>
<template if:true={_loading}>
<lightning-spinner></lightning-spinner>
</template>
<lightning-datatable
key-field="caseNumber"
data={records}
columns={columns}
hide-checkbox-column>
</lightning-datatable>
</template>ArchiveSdk.cls
Esse bloco de código é o controlador do Apex.
public with sharing class ArchiveSDK {
@AuraEnabled
public static List<CaseTableWrapperExample.CaseRecord> getCases(String parentId) {
// Create an empty list to hold maps with String keys and Object values
List<Map<String, Object>> totalRecords = new List<Map<String, Object>>();
// Create a list to store search filter objects
List<SF_Archive.SearchFilter> request = new List<SF_Archive.SearchFilter>();
// Create a search filter for the 'AccountId' field with a given 'parentId' value
SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('AccountId', parentId);
// Create a search filter for the 'Priority' field with a given 'High' value
SF_Archive.SearchFilter filter2 = new SF_Archive.SearchFilter('Priority', 'High');
// Add the filters to the request list
request.add(filter1);
request.add(filter2);
// Define the object name as 'Case'
String sObjectName = 'Case';
// Create a list of Strings representing field names to be retrieved from Archive DB
List<String> fields = new List<String>{'CaseNumber', 'Subject', 'Priority', 'Status'};
// Create the DateRange based on the created date
SF_Archive.DateRange range = new SF_Archive.DateRange('CreatedDate', system.today() - 150, system.today());
// Perform an initial global search and store the response
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, range);
// Check if the HTTP response status code is 200 (success)
if (res.getStatusCode() == 200) {
system.debug('code: ' + res.getStatuscode());
// Retrieve the initial search response map
SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap();
system.debug('count: ' + searchResponse.totalResultCount);
system.debug('scrollid: ' + searchResponse.scrollId);
system.debug('list size: ' + searchResponse.records.size());
// Store the scroll ID for pagination
String scrollId = searchResponse.scrollId;
// Initialize the page number
Integer page = 1;
// Add the records from the initial search to the totalRecords list
totalRecords.addAll(searchResponse.records);
// Continue to fetch additional pages while the scroll ID is not '-1'
while (scrollId != '-1') {
page++;
// Get the next page of search results using the UPDATED scrollId
SF_Archive.ArchiverAccessorResponse nextPageResponse = SF_Archive.ArchiverAccessor.getNextPage(scrollId);
// Check if the HTTP response status code is 200 (success)
if (nextPageResponse.getStatusCode() == 200) {
// Retrieve the search response for the current page
SF_Archive.ArchiverAccessorSearchResponse searchResponse2 = nextPageResponse.getSearchResponseMap();
// CRITICAL FIX: Update the scrollId with the value from the new response
scrollId = searchResponse2.scrollId;
system.debug('count: ' + searchResponse2.totalResultCount);
system.debug('scrollid: ' + searchResponse2.scrollId);
system.debug('list size: ' + searchResponse2.records.size());
system.debug('page number: ' + page);
// Add the records from the current page to the totalRecords list
totalRecords.addAll(searchResponse2.records);
} else {
// Output an error message if the HTTP response status code is not 200
system.debug('response is != 200: ' + nextPageResponse.getStatusCode());
system.debug('body: ' + nextPageResponse.getBody());
// Break out of the loop if there is an error
break;
}
} // End of while loop
} else {
// Handle error from initial search
system.debug('status code error: ' + res.getStatusCode());
system.debug('status code message: ' + res.getErrorMessage());
}
// Return the list of total records
List<CaseTableWrapperExample.CaseRecord> result = new List<CaseTableWrapperExample.CaseRecord>();
return CaseTableWrapperExample.getCasesTable(totalRecords);
}
}CaseTableWrapperExample.cls
Classe auxiliar para formular a classe do Apex para o LWC
public class CaseTableWrapperExample{
public static List<caseRecord> getCasesTable(list<map<string,object>> cases){
List<caseRecord> caseReturnList = new List<caseRecord>();
for(Map<string,object> caseRecord: cases){
caseRecord tempCase = new caseRecord();
tempCase.caseNumber = String.valueOf(caseRecord.get('CaseNumber'));
tempCase.id = String.valueOf(caseRecord.get('Id'));
tempCase.origin = String.valueOf(caseRecord.get('Origin'));
tempCase.status = String.valueOf(caseRecord.get('Status'));
tempCase.subject = String.valueOf(caseRecord.get('Subject'));
tempCase.priority = String.valueOf(caseRecord.get('Priority'));
caseReturnList.add(tempCase);
}
return caseReturnList;
}
public class caseRecord {
@AuraEnabled public string caseNumber;
@AuraEnabled public string id;
@AuraEnabled public string origin;
@AuraEnabled public string status;
@AuraEnabled public string priority;
@AuraEnabled public string subject;
}}O código acima descreve um exemplo de cenário pelo qual você pode adicionar o LWC como um componente à página do Lightning.
Para visualizar a tabela de dados real do Lightning, adicione esse código ao arquivo sampleSdkUseCaseWidget.js-meta.xml. Em seguida, adicione o componente Arquivo à página do Lightning.
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="<a href='http://soap.sforce.com/2006/04/metadata">;
<apiVersion>55.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__RecordPage</target>
<target>lightning__AppPage</target>
</targets>
<targetConfigs>
<targetConfig targets="lightning__RecordPage">
<supportedFormFactors>
<supportedFormFactor type="Small" />
<supportedFormFactor type="Large" />
</supportedFormFactors>
</targetConfig>
<targetConfig targets="lightning__AppPage">
<supportedFormFactors>
<supportedFormFactor type="Small" />
<supportedFormFactor type="Large" />
</supportedFormFactors>
</targetConfig>
</targetConfigs>
</LightningComponentBundle>Arquivar consultas de dados do Apex – exemplo de caso de uso 2
Este exemplo de caso de uso mostra como o Apex Arquivar lida com tarefas sem exceder limites do regulador, como limites de CPU ou chamadas de tempo limite, no aplicativo Arquivar.
Para obter mais informações, consulte Limites do controlador do Apex.
Caso de uso
Seu negócio exige que a Equipe de suporte de nível 3 tenha acesso para visualizar Casos arquivados com um status de alta prioridade.
Este exemplo mostra como contornar um erro quando o número de registros arquivados recuperados por meio do Apex é muito grande. O erro diz: SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time
allotted for callout, please contact support.
O código dessas classes do Apex cria esse caso de uso.
A classe ArchiveSecondPageJob processa dados paginados do Arquivo usando um ID de rolagem, fazendo chamadas conforme necessário. Ele é executado de modo assíncrono por meio da interface enfileirável, rastreando o tempo de execução total para evitar exceder os limites e enfileirando-se para processamento contínuo, se necessário. A classe lida com respostas, atualiza o ID de rolagem e registra detalhes sobre cada página de dados recuperada.
public class ArchiveSecondPageJob implements Queueable,Database.AllowsCallouts {
private String scrollId;
private long totalTime;
private integer pageNumber;
public archiveSecondPageJob(String prevScrollId, integer pageNumber) {
scrollId = prevScrollId;
this.pageNumber = pageNumber;
}
public void execute(QueueableContext context) {
system.debug('executing');
doExecute();
}
private void doExecute() {
SF_Archive.ArchiverAccessorSearchResponse searchResponse = null;
integer page = 1;
long totalTime = 0;
while(scrollId != '-1')
{
//avoid 12000 ms limit
if(totalTime > 90000){
system.debug('Creating new task');
archiveSecondPageJob q = new archiveSecondPageJob(scrollId,this.pageNumber);
System.enqueueJob(q);
return;
}
//Get the next page using the scrollId
Long startTime = DateTime.now().getTime();
SF_Archive.ArchiverAccessorResponse nextPage = SF_Archive.ArchiverAccessor.getNextPage(scrollId);
Long stopTime = DateTime.now().getTime();
totalTime += stopTime - startTime;
if(nextPage.getStatusCode() == 200){
this.pageNumber++;
SF_Archive.ArchiverAccessorSearchResponse searchResponse2 =nextPage.getSearchResponseMap();
scrollId = searchResponse2.scrollId;
system.debug('count: '+ searchResponse2.totalResultCount);
system.debug('scrollid: '+ searchResponse2.scrollId);
system.debug('list size: '+ searchResponse2.records.size());
system.debug('body: '+ searchResponse2.records);
system.debug('page: '+ pageNumber);
system.debug('time: '+ totalTime);
}
else{
system.debug('response is != 200: '+ nextPage.getStatusCode());
system.debug('body: '+ nextPage.getBody());
return;
}
}
}
}
A classe ArchiveSearch realiza uma pesquisa no objeto Caso usando filtros específicos, recupera os resultados e registra detalhes como a contagem total e o ID de rolagem. Se a pesquisa retornar um ID de rolagem válido, indicando mais páginas de resultados, ela coloca o archiveSecondPageJob na fila para processar a próxima página de modo assíncrono. Essa classe inicia essencialmente a pesquisa e encaminha o processamento adicional para o archiveSecondPageJob previamente definido.
Este é o formato da chamada de pesquisa inicial.
public class ArchiveSearch {
public void doSearch(){
string sObjectName = 'Case';
list<SF_Archive.SearchFilter> request = new list<SF_Archive.SearchFilter>();
SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('Priority', 'High');
request.add(filter1);
list<string> fields = new list<string>{'CaseNumber', 'Id'};
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields);
if(res.getStatusCode() == 200){
system.debug('code: ' + res.getStatuscode());
SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap();
system.debug('count: '+ searchResponse.totalResultCount);
system.debug('scrollid: '+ searchResponse.scrollId);
system.debug('list size: '+ searchResponse.records.size());
string scrollId = searchResponse.scrollId;
integer page = 1;
if(scrollId != '-1'){
system.debug('calling next page');
integer pageNumber = 2;
archiveSecondPageJob q = new archiveSecondPageJob(scrollId, pageNumber);
System.enqueueJob(q);
}}}}Para obter mais informações, consulte Guia do desenvolvedor do Salesforce Apex.

