Usted está aquí:
Consulta de datos de SDK de archivo
La Consulta de datos de Archive SDK activa el acceso programático a datos archivados en la aplicación Archive. Estas consultas de datos automatizan procesos comerciales, admiten integraciones de sistemas externos, crean vistas e informes personalizados y hacen referencia cruzada a datos archivados con registros activos.
Archivar widget y Archivar búsqueda proporcionan opciones de uso para la recuperación manual de datos. El SDK ofrece funciones avanzadas, como parámetros de consulta, filtros y paginación, para acceso directo a datos a través de código.
Las funciones de Consulta de datos de SDK incluyen:
- Busque registros archivados utilizando criterios especificados.
- Utilice la coincidencia parcial con un asterisco (*).
- Devuelva grandes conjuntos de datos en lotes de hasta 1.000 registros por página.
- Aplique hasta seis filtros para restringir sus resultados.
Estos objetos se filtran y no se pueden buscar a través del SDK.
FeedHistoryShareFeedRelationShare
Para mantener un rendimiento óptimo y verificar que solo se devuelven datos archivados relevantes, estos objetos se excluyen de las búsquedas.
Para acceder a archivos archivados, utilice el widget de archivado o la búsqueda de archivado.
Archivar métodos de consulta de datos de SDK
Para definir cómo consultar datos archivados, establezca el método proporcionado por el SDK de archivado.
- Acceder a datos de archivo: Los métodos de
ArchiverAccessorestán diseñados para interactuar con registros archivados. A continuación puede crear consultas y recuperar datos almacenados en el producto Archivar. - Definición de operaciones de consulta: Estas firmas le indican qué tipos de consultas puede realizar utilizando el SDK, como búsquedas globales y consultas filtradas.
- Uso orientador: Examinando firmas de métodos, los desarrolladores pueden comprender las entradas y salidas requeridas para sus implementaciones.
performArchiverGlobalSearch Método
Este método indica la función para realizar una búsqueda global en datos archivados.
Parámetros de Query
El SDK de consulta de datos utiliza varios parámetros para restringir su búsqueda. Algunos parámetros son obligatorios, mientras que otros son opcionales. Comprender cómo configurar cada parámetro le ayuda a obtener los resultados más precisos y relevantes.
- Nombre de objeto: Especifica el tipo de objeto de Salesforce que consultar.
Por ejemplo,
string sObjectName = 'Account'especifica que la consulta se dirige a registros Cuenta.Este parámetro es obligatorio.
Nota Cada consulta se dirige a un único objeto. Utilice consultas separadas para recuperar datos de múltiples objetos. - Filtros de búsqueda: Filtros que restringen los resultados de búsqueda basándose en condiciones de campo.
- Nombre de campo: El campo por el que desea filtrar, como
NameoCreatedDate - Valor o lista de valores: El valor o valores específicos que desea que coincidan
Ejemplo: Filtro de valor único
SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test');Esta consulta devuelve registros donde el campo Nombre coincide con la cadena "prueba".
Ejemplo: Filtro de valores múltiplesSF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'});Esta consulta devuelve registros donde el campo Estado coincide con las cadenas "Abierto" o "Cerrado".
Gestión de valores vacíos o nulos: Para buscar registros donde un campo está vacío o nulo, puede agregar una cadena vacía ("") a la Lista de valores.Ejemplo:
Esta consulta devuelve registros de casos donde el campo Asunto está vacío o nulo.List<SearchFilter> filters = new List<SearchFilter>(); filters.add(new SearchFilter('Subject', ''));Límites de filtro de búsqueda:
- Las consultas deben tener al menos 1 filtro por consulta.
- Las consultas pueden tener hasta 6 filtros, combinados con lógica de
AND, por consulta. - Los filtros se combinan utilizando lógica de
ANDde forma predeterminada. La lógica deORno es compatible actualmente. - La lista de valores de un filtro no puede superar 1.000 elementos.
Este parámetro es obligatorio.
- Nombre de campo: El campo por el que desea filtrar, como
- Filtros de fecha: Si desea buscar basándose en fechas, utilice el parámetro
DateRangey los filtros obligatorios.DateRangefiltra registros por campos comoArchiveDate,CreatedDateoModifiedDate.Ejemplo: Filtro de fecha para consulta de fecha específica
Date todayDate = Date.today(); Date jan1st2024 = Date.newInstance(2024, 1, 1); DateRange dateRange = new DateRange('archive_date', jan1st2024, todayDate);Esta consulta devuelve registros archivados entre el 1 de enero de 2024 y hoy.
Ejemplo: Filtro de fechas para múltiples intervalos de fechas
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, request, ranges);Esta consulta devuelve registros archivados entre el 12 de diciembre de 2023 y el 11 de enero de 2024.
Recomendaciones de filtro de fecha:
- Para buscar en base a la Fecha de archivado, agregue el campo de fecha de
archive_date. - Utilice el formato de fecha Apex: MM/DD/AAAA.
Este parámetro es opcional.
- Para buscar en base a la Fecha de archivado, agregue el campo de fecha de
- Campos devueltos: Especifique campos para incluir en los resultados. Si no se especifica, se devuelven todos los campos.
Ejemplo: Devolver campos específicos
List<string> fields = new List<string>{'Name', 'CreatedDate'};Esta consulta solo devuelve los campos
NameyCreatedDatede cada registro.Este parámetro es opcional.
- Tamaño de página: Establece el número de registros por consulta. El número predeterminado de registros por consulta es 25, y el máximo es 1.000.
Ejemplo: Tamaño de página personalizado
SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters, 100, fields);Esta consulta devuelve 100 registros por página.
Este parámetro es opcional.Nota Superar 1.000 registros en su consulta desencadena un error en tiempo de ejecución. - Dirección de clasificación: Ordena los resultados por un campo, como
CreatedDate.- Ascendente (
asc): De más antigua a más reciente. - Descendente (
desc): Del más reciente al más antiguo.Ejemplo: Consulta de clasificación
SortingDirection sortingDirection = new SortingDirection('desc');Esta consulta devuelve registros ordenados en orden descendente basándose en sus
CreatedDate.Este parámetro es opcional.
- Ascendente (
getNextPage Método
Si los resultados no caben todos en la misma página, este método llama a la siguiente página.
Parámetro de ScrollId
Utilice paginación para devolver conjuntos de datos de gran tamaño obteniendo resultados en páginas de hasta 1.000 registros.
Para configurar el flujo de trabajo de paginación, realice la consulta inicial, utilice el scrollId de la respuesta para obtener páginas posteriores y continúe hasta scrollId = '-1'..
Ejemplo: Obtener resultados con paginación
// 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.scroll != '-1') {
SF_Archive.ArchiverAccessorResponse nextPageRes = SF_Archive.ArchiverAccessor.getNextPage(searchResponse.scroll);
SF_Archive.ArchiverAccessorSearchResponse nextPageResponse = nextPageRes.getSearchResponseMap();
system.debug('Next Page Records: ' + nextPageResponse.records);
}Acceder a los métodos
Para buscar las firmas de métodos, vaya a Clases Apex bajo Configuración. Abra la clase de ArchiverAccessor. Localice todos los métodos enumerados bajo el espacio de nombres performArchiverGlobalSearch.
Consulta de datos de muestra
Este ejemplo recupera registros de Account utilizando estas condiciones.
- Campos:
NameCreatedDate - Límite: 100 registros por página
- Nombre: Contiene la cadena "test"
- Sorting: Descendiendo 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);
Solucionar errores comunes
| Código de error | Descripción | Resolución |
|---|---|---|
INTERNAL_ERROR |
Se produjo un fallo inesperado. | Póngase en contacto con el servicio de asistencia con detalles de error. |
RESOURCE_LIMIT_ERROR |
Se superaron los límites de tamaño de consulta o paginación. | Reduzca el tamaño de página o refine los filtros de búsqueda. |
VALIDATION_ERROR |
Criterios de búsqueda que faltan o no son válidos. | Asegúrese de que todos los campos y campos son válidos. |
Recomendaciones adicionales
- Supervise su uso de API para evitar alcanzar límites.
- Para emitir la respuesta a un objeto, serialícelo en JSON y luego vuelva a serializarlo en un objeto.
- Verifique que los campos están activados y accesibles.
- Compruebe dos veces todos los parámetros de la consulta.
- Para problemas no resueltos, póngase en contacto con el Servicio de asistencia de Archive SDK con registros detallados.
Para obtener más información, consulte Pruebas de SDK de archivo.
- Consulta de datos del SDK de archivado: Ejemplo de código
En este ejemplo de código, un filtro, un intervalo de fechas y una solicitud de búsqueda de archivo se validan a través del código de estado en la aplicación Archivar. - Consulta de datos de SDK de archivo: Caso de uso de ejemplo 1
Este caso de uso de ejemplo muestra cómo crear y personalizar un widget que muestra Cuentas de alta prioridad en la aplicación Archivar. - Consulta de datos de SDK de archivo: Caso de uso de ejemplo 2
Este caso de uso de ejemplo muestra cómo gestiona Archive SDK tareas sin superar los límites reguladores, como límites de CPU o llamadas de tiempo de espera, en la aplicación Archive.
Consulta de datos del SDK de archivado: Ejemplo de código
En este ejemplo de código, un filtro, un intervalo de fechas y una solicitud de búsqueda de archivo se validan a través del código de estado en la aplicación Archivar.
Se incluye una llamada de getNextPage después de la (scrollId != -1) porque el tamaño de los resultados está limitado en la llamada 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());
}Consulta de datos de SDK de archivo: Caso de uso de ejemplo 1
Este caso de uso de ejemplo muestra cómo crear y personalizar un widget que muestra Cuentas de alta prioridad en la aplicación Archivar.
Caso de uso
Su negocio requiere que el Equipo de asistencia de nivel 3 tenga acceso para ver casos archivados con un estado de alta prioridad.
Este ejemplo muestra cómo:
- Cree un componente web Lightning personalizado (LWC).
- Extraiga datos archivados utilizando el SDK de consulta de datos.
- Aplique el filtro (Prioridad alta). Nota Otros filtros se pueden personalizar haciendo referencia al código en Consulta de datos de Archive SDK: Ejemplo de código.
Este ejemplo está limitado a 25 registros. El SDK le permite establecer los resultados en 1.000 por página. El valor predeterminado es 25, con la opción de paginación a través de los resultados.
Widget mostrando casos de alta prioridad
Sample SdkUseCaseWidget.js
En este ejemplo de código, el parámetro es 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;
}}
} Sample SdkUseCaseWidget.html
El controlador Apex que utiliza el LWC llama al SDK de consulta de datos.
SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields, range);Esta es la llamada para el Archive SDK. Incluye estos parámetros.
- sObjectName: Representa la búsqueda
- Filtros: Se utilizan para recuperar los datos
- Campos: Los campos proyectados para devolver desde datos.
- Intervalo: El intervalo de fechas utilizado para consultar los datos.
<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
Este bloque de código es el controlador 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
Clase auxiliar para formular clase desde Apex a 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;
}}El código anterior describe un escenario de ejemplo por el que puede agregar LWC como widget a la página Lightning.
Para ver la tabla de datos Lightning real, agregue este código al archivo sampleSdkUseCaseWidget.js-meta.xml. A continuación, agregue el widget Archivar a la página 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>Consulta de datos de SDK de archivo: Caso de uso de ejemplo 2
Este caso de uso de ejemplo muestra cómo gestiona Archive SDK tareas sin superar los límites reguladores, como límites de CPU o llamadas de tiempo de espera, en la aplicación Archive.
Para obtener más información, consulte Límites reguladores Apex.
Caso de uso
Su negocio requiere que el Equipo de asistencia de nivel 3 tenga acceso para ver casos archivados con un estado de alta prioridad.
Este ejemplo muestra cómo solucionar un error cuando el número de registros archivados recuperados a través del SDK es demasiado grande. El error dice: SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time
allotted for callout, please contact support.
El código de estas clases Apex crea este caso de uso.
La clase de ArchiveSecondPageJob procesa datos paginados desde Archivo utilizando un Id. de desplazamiento, realizando llamadas según sea necesario. Se ejecuta de forma asíncrona a través de la interfaz Queueable, realizando un seguimiento del tiempo total de ejecución para evitar superar los límites y poniéndose en cola para continuar el procesamiento si es necesario. La clase gestiona respuestas, actualiza el Id. de desplazamiento y registra detalles acerca de cada página de datos 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;
}
}
}
}
La clase de ArchiveSearch realiza una búsqueda en el objeto Caso utilizando filtros específicos, recupera los resultados y registra detalles como el recuento total y el Id. de desplazamiento. Si la búsqueda devuelve un Id. de desplazamiento válido, indicando más páginas de resultados, pone en cola al archiveSecondPageJob para procesar la siguiente página de forma asíncrona. Esta clase inicia esencialmente la búsqueda y transfiere el procesamiento posterior al archiveSecondPageJob definido anteriormente.
Este es el formato para la llamada de búsqueda 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 obtener más información, consulte Guía del desarrollador de Salesforce Apex.

