Loading
Konfigurere og vedlikeholde Salesforce-organisasjonen
Innhold
Velg filtre

          Ingen resultater
          Ingen resultater
          Her er noen søketips

          Kontroller stavemåten i søkeordene.
          Bruk mer generelle søkebegreper.
          Velg færre filtre for å utvide søket.

          Søk i all Salesforce Hjelp
          Arkivere Apex

          Arkivere Apex

          Arkiver Apex gir programmatisk tilgang til arkiverte data i Arkiver-appen. Disse dataspørringene automatiserer forretningsprosesser, støtter tredjeparts systemintegrasjoner, oppretter tilpassede visninger og rapporter og kryssrefererer til arkiverte data med aktive poster.

          Arkiver-komponenten og Arkivsøk gir alternativer for manuell datahenting. Apex tilbyr avanserte funksjoner, som spørringsparametere, filtre og sideinndeling, for direkte datatilgang via kode.

          Apex Data Query-funksjoner inkluderer:

          • Søk i arkiverte poster med angitte kriterier.
          • Bruk delvis samsvar med et stjernetegn (*).
          • Returner store datasett i batcher på opptil 1000 poster per side.
          • Bruk opptil seks filtre for å begrense resultatet.

          Disse systemrelaterte Salesforce-objektene filtreres ut og kan ikke søkes via Apex.

          • Feed
          • History
          • Relation
          • Share

          For å opprettholde optimal ytelse og sikre at bare relevante arkiverte data returneres, utelukker Arkiver disse objektene fra søk.

          Merk
          Merk Filer og vedlegg kan ikke hentes via Arkiver Apex.

          Bruk Arkiver-komponenten eller Arkiver-søk for å få tilgang til arkiverte filer.

          Arkivere Apex

          For å definere hvordan du spør etter arkiverte data, angir du metoden som leveres av Arkiver Apex.

          • Tilgang til arkiveringsdata: Metodene i ArchiverAccessor er utformet for å samhandle med arkiverte poster. Deretter kan du bygge spørringer og hente data som er lagret i Arkiver-produktet.
          • Definere spørringsoperasjoner: Disse signaturene forteller deg hvilke typer spørringer du kan utføre med Apex, som globale søk og filtrerte spørringer.
          • Veiledet bruk: Ved å undersøke metodesignaturer kan utviklere forstå inndataene og utdataene som kreves for implementeringene.

          performArchiverGlobalSearch-metode

          Denne metoden angir funksjonaliteten for å utføre et globalt søk på arkiverte data.

          Query-parametere

          Apex bruker flere parametere til å begrense søket. Enkelte parametere er obligatoriske, mens andre er valgfrie. Når du forstår hvordan du konfigurerer hver parameter, får du de mest nøyaktige og relevante resultatene.

          • Objektnavn: Angir typen Salesforce-objekt som det skal spørres etter.

            string sObjectName = 'Account' angir for eksempel at spørringen skal målrette kontoposter.

            Denne parameteren er obligatorisk.

            Merk
            Merk Hver spørring er rettet mot ett enkelt objekt. Bruk separate spørringer til å hente data fra flere objekter.
          • Søkefiltre: Filtre som avgrenser søkeresultater basert på feltbetingelser.
            • Feltnavn: Feltet du vil filtrere etter, for eksempel Name eller CreatedDate
            • Verdi eller Liste over verdier: Den spesifikke verdien eller verdiene du vil samsvare med

              Eksempel: Filter for enkeltverdi

              SF_Archive.SearchFilter filter = new
              SF_Archive.SearchFilter('Name', 'test'); 

              Denne spørringen returnerer poster der Navn-feltet samsvarer med strengen "test".

              Eksempel: Filter for flere verdier
              SF_Archive.SearchFilter filter = new
              SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'}); 

              Denne spørringen returnerer poster der Status-feltet samsvarer med strengene Åpen eller Avsluttet.

              Håndtering av tomme verdier eller nullverdier: Hvis du vil søke etter poster der et felt er tomt eller null, kan du legge til en tom streng ("") i Verdieliste.

              Eksempel:

              List<SearchFilter> filters = new List<SearchFilter>();
              filters.add(new SearchFilter('Subject', '')); 
              Denne spørringen returnerer Sak-poster der Emne-feltet er tomt eller null.

              Søkefiltergrenser:

              • Spørringer må ha minst ett filter per spørring.
              • Spørringer kan ha opptil 6 filtre kombinert med AND logikk per spørring.
              • Filtre kombineres som standard med AND logikk. OR-logikk støttes ikke for øyeblikket.
              • Verdilisten for et filter kan ikke overskride 1000 elementer.

            Denne parameteren er obligatorisk.

          • Datofiltre: Hvis du vil søke basert på datoer, bruker du DateRange-parameteren og de obligatoriske filtrene. DateRange filtrerer poster etter felt som ArchiveDate, CreatedDate eller ModifiedDate.

            Eksempel: Datofilter for spesifikk datospørring

            Date todayDate = Date.today();
            Date jan1st2024 = Date.newInstance(2024, 1, 1);
            DateRange dateRange = new DateRange('archive_date', jan1st2024, todayDate);

            Denne spørringen returnerer poster som er arkivert mellom 1. januar 2024 og i dag.

            Eksempel: Datofilter for flere datoområder

            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);

            Denne spørringen returnerer poster som er arkivert mellom 12. desember 2023 og 11. januar 2024.

            Anbefalte datofiltre:

            • Hvis du vil søke basert på arkiveringsdatoen, legger du til archive_date-datofeltet.
            • Bruk Apex: MM/DD/ÅÅÅÅ.

            Denne parameteren er valgfri.

          • Returnerte felt: Angi felt som skal inkluderes i resultatet. Hvis ikke angitt, returneres alle felt.

            Eksempel: Returspesifikke felt

            List<string> fields = new List<string>{'Name', 'CreatedDate'};

            Denne spørringen returnerer bare Name- og CreatedDate-feltene for hver post.

            Denne parameteren er valgfri.

          • Sidestørrelse: Angir antall poster per spørring. Standard antall poster per spørring er 25, og maksimum er 1000.

            Eksempel: Tilpasset sidestørrelse

            SF_Archive.ArchiverAccessorResponse res = 
            SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', 
            filters, 100, fields);

            Denne spørringen returnerer 100 poster per side.

            Merk
            Merk Overskridelse av 1000 poster i spørringen utløser en kjøretidsfeil.
            Denne parameteren er valgfri.
          • Sorteringsretning: Sorterer resultater etter et felt, for eksempel CreatedDate.
            • Stigende (asc): Eldre til nyeste.
            • Synkende (desc): Nyeste til eldste.

              Eksempel: Sorteringsspørring

              SortingDirection sortingDirection = new SortingDirection('desc');

              Denne spørringen returnerer poster sortert i synkende rekkefølge basert på deres CreatedDate.

              Denne parameteren er valgfri.

          getNextPage-metode

          Hvis ikke alle resultatene passer på samme side, kaller denne metoden opp neste side.

          ScrollId-parameter

          Bruk sideinndeling til å returnere store datasett ved å hente resultater på sider med opptil 1000 poster.

          For å konfigurere sideinndeling-arbeidsflyten utfører du den første spørringen, bruker scrollId fra svaret til å hente etterfølgende sider og fortsetter til scrollId = '-1'..

          Eksempel: Hente resultater med paginering

          // 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);
          }

          Få tilgang til metodene

          Gå til Apex under Oppsett for å finne metodesignaturene. Åpne ArchiverAccessor-klassen. Finn alle metodene som er oppført under performArchiverGlobalSearch-navneområdet.

          Eksempel på dataspørring

          Dette eksemplet henter Account-poster ved å bruke disse betingelsene.

          • Felt: Name, CreatedDate
          • Grense: 100 poster per side
          • Navn: inneholder streng "test"
          • Sortering: Synkende etter 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);
                      

          Feilsøke vanlige feil

          Feilkode Beskrivelse Oppløsning
          INTERNAL_ERROR Det oppsto en uventet feil. Kontakt kundestøtte med feildetaljer.
          RESOURCE_LIMIT_ERROR Grenser for sideinndeling eller spørringsstørrelse overskredet. Reduser sidestørrelsen eller begrens søkefiltre.
          VALIDATION_ERROR Manglende eller ugyldige søkekriterier. Kontroller at alle felt og filtre er gyldige.

          Andre anbefalinger

          • Overvåk API-bruken for å unngå å nå grenser.
          • For å gi svaret til et objekt serialiserer du det til JSON og deserialiserer det tilbake til et objekt.
          • Kontroller at felt er aktivert og tilgjengelig.
          • Dobbeltkontrollere alle spørringsparametere.
          • Hvis du har uløste problemer, kontakter du Salesforces kundestøtte med detaljerte logger.

          Du finner trinnvise testprosedyrer i Arkivere Apex-tester.

          Arkivere Apex – kodeeksempel

          I dette kodeeksempelet valideres et filter, et datoområde og en forespørsel om arkivsøk via statuskoden i Arkiver-appen.

          Et getNextPage etter (scrollId != -1) inkluderes fordi størrelsen på resultatene er begrenset i 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()); 
              }

          Arkivere Apex – eksempel på brukstilfelle 1

          Dette eksemplet viser hvordan du bygger og tilpasser en komponent som viser kontoer med høy prioritet i Arkiver-appen.

          Bruksområde

          Virksomheten krever at nivå 3-kundestøtteteamet har tilgang til å vise arkiverte saker med status for høy prioritet.

          Dette eksemplet viser hvordan du gjør følgende:

          • Opprett en tilpasset Lightning (LWC).
          • Hent arkiverte data ved å bruke Apex.
          • Bruk filteret (Høy prioritet).
            Merk
            Merk Andre filtre kan tilpasses ved å referere til koden i Arkivere Apex – kodeeksempel.

            Dette eksemplet er begrenset til 25 poster. Apex lar deg angi resultatet på 1000 per side. Standardverdien er 25, med alternativet sideinndeling gjennom resultatene.

          Komponent som viser saker med høy prioritet

          Eksempel på SdkUseCaseWidget.js

          I dette kodeeksempelet er parameteren 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;
              }}
          }            

          Eksempel på SdkUseCaseWidget.html

          Apex som LWC bruker, kaller opp Apex.

          SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields, range);

          Dette er kallet til Arkiver Apex. Den inkluderer disse parameterne.

          • sObjectName: Viser søket
          • Filtre: Brukes til å hente data
          • Felt: De projiserte feltene som skal returneres fra data.
          • Range (Område): Datoområdet som brukes til å spørre dataene.
          <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

          Denne kodeblokken er 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

          Hjelperklasse for å formulere klasse fra Apex til 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;
          }}

          Koden ovenfor beskriver et eksempel på et scenario der du kan legge til LWC som en komponent på Lightning.

          For å vise den faktiske Lightning-datatabellen legger du til denne koden i sampleSdkUseCaseWidget.js-meta.xml-filen. Legg deretter til Arkiver-komponenten på 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>

          Arkivere Apex – eksempel på brukstilfelle 2

          Dette eksemplet viser hvordan Apex arkiverer oppgaver uten å overskride styringsgrenser, som CPU-grenser eller tidsavbrudd, i arkiveringsappen.

          Se Apex Governor Limits for å få mer informasjon.

          Bruksområde

          Virksomheten krever at nivå 3-kundestøtteteamet har tilgang til å vise arkiverte saker med status for høy prioritet.

          Dette eksemplet viser hvordan du omgår en feil når antall arkiverte poster hentet via Apex er for stort. Feilen sier: SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time allotted for callout, please contact support.

          Kode fra disse Apex oppretter dette bruksområdet.

          ArchiveSecondPageJob-klassen behandler sideinndelte data fra Arkiv ved å bruke en rulle-ID og utføre oppkall etter behov. Den kjører asynkront via Købar-grensesnittet, sporer den totale utførelsestiden for å unngå å overskride grenser og setter seg selv i kø for fortsatt behandling hvis det er nødvendig. Klassen håndterer svar, oppdaterer rulle-IDen og logger detaljer om hver hentede dataside.

          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;
                                     }           
                                 }
                 }
          }
                      

          ArchiveSearch-klassen utfører et søk på Sak-objektet ved å bruke spesifikke filtre, henter resultatene og logger detaljer som totalt antall og rull-ID. Hvis søket returnerer en gyldig rull-ID som angir flere sider med resultater, legger den archiveSecondPageJob for å behandle neste side asynkront. Denne klassen initierer i det vesentlige søket og overfører videre behandling til den tidligere definerte archiveSecondPageJob.

          Her er formatet for det første søkekallet.

          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);
             }}}}

          Hvis du vil ha mer informasjon, kan du se Salesforce Apex Developer Guide.

           
          Laster
          Salesforce Help | Article