Loading
Configuración y mantenimiento de su organización de Salesforce
Índice de materias
Seleccionar filtros

          No hay resultados
          No hay resultados
          Estas son algunas sugerencias de búsqueda

          Compruebe la ortografía de sus palabras clave.
          Utilice términos de búsqueda más generales.
          Seleccione menos filtros para ampliar su búsqueda.

          Buscar en toda la Ayuda de Salesforce
          Consulta de datos de SDK de archivo

          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.

          • Feed
          • HistoryShareFeed
          • Relation
          • Share

          Para mantener un rendimiento óptimo y verificar que solo se devuelven datos archivados relevantes, estos objetos se excluyen de las búsquedas.

          Nota
          Nota Los archivos y archivos adjuntos no se pueden recuperar a través del SDK de Archivo.

          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 ArchiverAccessor está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
            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 Name o CreatedDate
            • 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últiples
              SF_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:

              List<SearchFilter> filters = new List<SearchFilter>();
              filters.add(new SearchFilter('Subject', '')); 
              Esta consulta devuelve registros de casos donde el campo Asunto está vacío o nulo.

              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 AND de forma predeterminada. La lógica de OR no es compatible actualmente.
              • La lista de valores de un filtro no puede superar 1.000 elementos.

            Este parámetro es obligatorio.

          • Filtros de fecha: Si desea buscar basándose en fechas, utilice el parámetro DateRange y los filtros obligatorios. DateRange filtra registros por campos como ArchiveDate, CreatedDate o ModifiedDate.

            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.

          • 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 Name y CreatedDate de 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.

            Nota
            Nota Superar 1.000 registros en su consulta desencadena un error en tiempo de ejecución.
            Este parámetro es opcional.
          • 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.

          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.

          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
            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.

           
          Cargando
          Salesforce Help | Article