Loading
Ställa in och bibehålla din Salesforce-organisation
Innehållsförteckningar
Välj filter

          Inga resultat
          Inga resultat
          Här är några söktips

          Kontrollera stavningen av dina nyckelord.
          Använd mer allmänna söktermer.
          Välj färre filter för att utöka din sökning.

          Sök hela Salesforce-hjälpen
          Arkivera Apex datafrågor

          Arkivera Apex datafrågor

          Arkivera Apex datafrågor aktiverar programmatisk åtkomst till arkiverade data i appen Arkivera. Dessa datafrågor automatiserar verksamhetsprocesser, har stöd för systemintegreringar från tredje part, skapar egna vyer och rapporter och korsreferenserar arkiverade data med aktiva poster.

          Komponenten Arkivera och Arkivera sökning har alternativ för manuell datahämtning. Apex erbjuder avancerade funktioner, som sökfrågeparametrar, filter och paginering, för direkt åtkomst till data via kod.

          Apex datafrågefunktioner inkluderar:

          • Sök i arkiverade poster genom att använda specificerade kriterier.
          • Använd delvis matchning med en asterisk (*).
          • Returnera stora datauppsättningar i satser med upp till 1 000 poster per sida.
          • Tillämpa upp till sex filter för att förfina dina resultat.

          Dessa systemrelaterade Salesforce-objekt filtreras bort och är inte sökbara via Apex.

          • Feed
          • History
          • Relation
          • Share

          För att upprätthålla optimal prestanda och säkerställa att endast relevanta arkiverade data returneras utesluter Arkivera dessa objekt från sökningar.

          Anteckning
          Anteckning Filer och bilagor kan inte hämtas via Arkiv Apex.

          För att komma åt arkiverade filer, använd komponenten Arkiv eller Arkivsökning.

          Arkivera Apex datafrågemetoder

          För att definiera hur du frågar arkiverade data, ange metoden som tillhandahålls av Arkivera Apex.

          • Åtkomst till arkivdata—Metoderna i ArchiverAccessor är utformade för att interagera med arkiverade poster. Sedan kan du bygga sökfrågor och hämta data som lagras i produkten Arkiv.
          • Definiera sökfrågeoperationer—Dessa signaturer berättar vilka typer av sökfrågor du kan utföra med Apex, till exempel globala sökningar och filtrerade sökfrågor.
          • Guidad användning—Genom att undersöka metodsignaturer kan utvecklare förstå de indata och utdata som behövs för deras implementeringar.

          performArchiverGlobalSearch

          Denna metod indikerar funktionaliteten för att utföra en global sökning på arkiverade data.

          Query Parametrar

          Apex datafrågor använder flera parametrar för att precisera din sökning. Vissa parametrar krävs, medan andra är valfria. Att förstå hur du konfigurerar varje parameter hjälper dig att få de mest korrekta och relevanta resultaten.

          • Objektnamn—Specificerar typen av Salesforce-objekt att fråga.

            Anta till exempel att string sObjectName = 'Account' specificerar att sökfrågan är inriktad på kontoposter.

            Denna parameter är obligatorisk.

            Anteckning
            Anteckning Varje sökfråga är inriktad på ett enskilt objekt. Använd separata sökfrågor för att hämta data från flera objekt.
          • Sökfilter—Filter som begränsar sökresultat baserat på fältvillkor.
            • Fältnamn—Det fält du vill filtrera efter, till exempel Name eller CreatedDate
            • Värde eller Lista över värden—Det eller de specifika värden som du vill matcha

              Exempel: Filter för enskilt värde

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

              Denna sökfråga returnerar poster där fältet Namn matchar strängen "test".

              Exempel: Filter med flera värden
              SF_Archive.SearchFilter filter = new
              SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'}); 

              Denna sökfråga returnerar poster där fältet Status matchar strängarna "Öppna" eller "Stängda".

              Hantera tomma eller nullvärden—För att söka efter poster där ett fält är tomt eller null kan du lägga till en tom sträng ("") i listan över värden.

              Exempel:

              List<SearchFilter> filters = new List<SearchFilter>();
              filters.add(new SearchFilter('Subject', '')); 
              Denna sökfråga returnerar kundcaseposter där fältet Ämne är tomt eller null.

              Gränser för sökfilter:

              • Sökfrågor måste ha minst 1 filter per sökfråga.
              • Sökfrågor kan ha upp till 6 filter, kombinerat med AND, per sökfråga.
              • Filter kombineras med AND som standard. OR stöds för närvarande inte.
              • Ett filters värdelista kan inte överstiga 1 000 objekt.

            Denna parameter är obligatorisk.

          • Datumfilter—Om du vill söka baserat på datum, använd parametern DateRange och de obligatoriska filtren. DateRange filtrerar poster efter fält som ArchiveDate, CreatedDate eller ModifiedDate.

            Exempel: Datumfilter för specifik datumfråga

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

            Denna sökfråga returnerar poster som arkiverats mellan 1 januari 2024 och idag.

            Exempel: Datumfilter för flera datumintervall

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

            Denna sökfråga returnerar poster arkiverade mellan 12 december 2023 och 11 januari 2024.

            Datumfilterrekommendationer:

            • För att söka baserat på arkivdatum, lägg till fältet archive_date.
            • Använd Apex datumformat: MM/DD/ÅÅÅÅ.

            Denna parameter är valfri.

          • Returnerade fält—Specificera fält att inkludera i resultaten. Om det inte specificeras returneras alla fält.

            Exempel: Returnera specifika fält

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

            Denna sökfråga returnerar endast fälten Name och CreatedDate för varje post.

            Denna parameter är valfri.

          • Sidstorlek—Anger antalet poster per sökfråga. Standardantalet poster per sökfråga är 25 och maxantalet är 1 000.

            Exempel: Egen sidstorlek

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

            Denna sökfråga returnerar 100 poster per sida.

            Anteckning
            Anteckning Att överskrida 1 000 poster i din sökfråga utlöser ett körningsfel.
            Denna parameter är valfri.
          • Sorteringsriktning—Sorterar resultat efter ett fält, till exempel CreatedDate.
            • Stigande (asc): Äldsta till nyaste.
            • Fallande (desc): Nyast till äldst.

              Exempel: Sorteringsfråga

              SortingDirection sortingDirection = new SortingDirection('desc');

              Denna sökfråga returnerar poster sorterade i fallande ordning baserat på deras CreatedDate.

              Denna parameter är valfri.

          getNextPage

          Om resultaten inte passar på samma sida anropar denna metod nästa sida.

          ScrollId Parameter

          Använd paginering för att returnera stora datauppsättningar genom att hämta resultat på sidor med upp till 1 000 poster.

          För att konfigurera pagineringsflödet, utför den inledande sökfrågan, använd scrollId från svaret för att hämta efterföljande sidor och fortsätt tills scrollId = '-1'..

          Exempel: Hämta resultat med sidnumrering

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

          Komma åt metoderna

          För att hitta metodsignaturerna, gå till Apex Klasser under Inställningar. Öppna ArchiverAccessor. Hitta alla metoder som listas under namnutrymmet performArchiverGlobalSearch.

          Exempel på datafråga

          Detta exempel hämtar Account genom att använda dessa villkor.

          • Fält: Name, CreatedDate
          • Gräns: 100 poster per sida
          • Namn: Innehåller strängen "test"
          • Sortering: Fallande efter 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);
                      

          Felsök vanliga fel

          Felkod Beskrivning Upplösning
          INTERNAL_ERROR Ett oväntat fel inträffade. Kontakta support med feldetaljer.
          RESOURCE_LIMIT_ERROR Överskridit gränser för paginering eller sökfrågestorlek. Minska sidstorleken eller förfina sökfilter.
          VALIDATION_ERROR Sökkriterier som saknas eller är ogiltiga. Se till att alla fält och filter är giltiga.

          Ytterligare rekommendationer

          • Övervaka din API-användning för att undvika att överskrida gränser.
          • För att casta svaret till ett objekt, serialisera det till JSON och sedan deserialisera det tillbaka till ett objekt.
          • Kontrollera att fält är aktiverade och tillgängliga.
          • Dubbelkolla alla sökfrågeparametrar.
          • För olösta problem, kontakta Salesforces support med detaljerade loggar.

          Stegvisa testförfaranden finns i Arkiv Apex Testing.

          Arkivera Apex datafrågor—Kodexempel

          I detta kodexempel valideras ett filter, ett datumintervall och en begäran om arkivsökning genom statuskoden i appen Arkiv.

          Ett getNextPage efter (scrollId != -1) inkluderas eftersom resultatens storlek är begränsad 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()); 
              }

          Arkivera Apex datafrågor—Exempel på användningsfall 1

          Detta exempel på användning visar hur du bygger och anpassar en komponent som visar Konton med hög prioritet i appen Arkiv.

          Användningsfall

          Din verksamhet kräver att supportteamet på nivå 3 har åtkomst att se arkiverade kundcase med hög prioritet.

          Detta exempel visar hur du:

          • Skapa en anpassad Lightning (LWC).
          • Hämta arkiverade data genom att använda Apex datafrågor.
          • Tillämpa filtret (Hög prioritet).
            Anteckning
            Anteckning Andra filter kan anpassas genom att hänvisa till koden i Arkivera Apex datafrågor — Kodexempel.

            Detta exempel är begränsat till 25 poster. Apex låter dig ställa in resultaten till 1 000 per sida. Standard är 25, med alternativet att paginera genom resultaten.

          Komponent som visar kundcase med hög prioritet

          Exempel på SdkUseCaseWidget.js

          I detta kodexempel är parametern 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;
              }}
          }            

          Exempel på SdkUseCaseWidget.html

          Den Apex kontroll som LWC använder anropar Apex Datafrågor.

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

          Detta är anropet till Archive Apex. Den innehåller dessa parametrar.

          • sObjectName—Avbildar sökningen
          • Filter—Används för att hämta data
          • Fält—De beräknade fält som ska returneras från data.
          • Intervall—Datumintervallet som används för att fråga data.
          <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 .

          Detta kodblock är Apex kontroller.

          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 .

          Hjälpklass för att formulera klass från Apex till 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;
          }}

          Ovanstående kod beskriver ett exempelscenario där du kan lägga till LWC som en komponent på Lightning.

          För att se den faktiska Lightning-datatabellen, lägg till denna kod i sampleSdkUseCaseWidget.js-meta.xml. Lägg sedan till komponenten Arkiv 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>

          Arkivera Apex datafrågor—Exempel på användningsfall 2

          Detta exempel på användning visar hur Arkiv Apex hanterar uppgifter utan att överskrida styrande gränser, som CPU-gränser eller Timeout-anrop, i appen Arkiv.

          Mer information finns i Apex styrande gränser.

          Användningsfall

          Din verksamhet kräver att supportteamet på nivå 3 har åtkomst att se arkiverade kundcase med hög prioritet.

          Detta exempel visar hur man kringgår ett fel när antalet arkiverade poster som hämtas via Apex är för stort. Felet lyder: SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time allotted for callout, please contact support.

          Kod från dessa Apex klasser skapar detta användningsfall.

          Klassen ArchiveSecondPageJob bearbetar paginerade data från Arkiv genom att använda ett rullnings-ID och göra anrop efter behov. Den körs asynkront via gränssnittet Köbar och följer den totala körtiden för att undvika att överskrida gränser och ställer sig i kö för fortsatt bearbetning om det behövs. Klassen hanterar svar, uppdaterar bläddrings-ID och loggar detaljer om varje hämtad datasida.

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

          Klassen ArchiveSearch utför en sökning på objektet Kundcase med hjälp av specifika filter, hämtar resultaten och loggar detaljer som totalt antal och rullnings-ID. Om sökningen returnerar ett giltigt rullnings-ID som indikerar fler resultatsidor placeras det i kö för archiveSecondPageJob att bearbeta nästa sida asynkront. Denna klass inleder i huvudsak sökningen och överför ytterligare bearbetning till det tidigare definierade archiveSecondPageJob.

          Här är formatet för det inledande söksamtalet.

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

          Mer information finns i Salesforce Apex Developer Guide.

           
          Laddar
          Salesforce Help | Article