Du er her:
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.
FeedHistoryRelationShare
For å opprettholde optimal ytelse og sikre at bare relevante arkiverte data returneres, utelukker Arkiver disse objektene fra søk.
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
ArchiverAccessorer 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 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
NameellerCreatedDate - 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 verdierSF_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:
Denne spørringen returnerer Sak-poster der Emne-feltet er tomt eller null.List<SearchFilter> filters = new List<SearchFilter>(); filters.add(new SearchFilter('Subject', ''));Søkefiltergrenser:
- Spørringer må ha minst ett filter per spørring.
- Spørringer kan ha opptil 6 filtre kombinert med
ANDlogikk per spørring. - Filtre kombineres som standard med
ANDlogikk.OR-logikk støttes ikke for øyeblikket. - Verdilisten for et filter kan ikke overskride 1000 elementer.
Denne parameteren er obligatorisk.
- Feltnavn: Feltet du vil filtrere etter, for eksempel
- Datofiltre: Hvis du vil søke basert på datoer, bruker du
DateRange-parameteren og de obligatoriske filtrene.DateRangefiltrerer poster etter felt somArchiveDate,CreatedDateellerModifiedDate.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.
- Hvis du vil søke basert på arkiveringsdatoen, legger du til
- 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- ogCreatedDate-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.
Denne parameteren er valgfri.Merk Overskridelse av 1000 poster i spørringen utløser en kjøretidsfeil. - 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.
- Stigende (
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. - 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. - Arkivere Apex – eksempel på brukstilfelle 2
Dette eksemplet viser hvordan Apex arkiverer oppgaver uten å overskride styringsgrenser, som CPU-grenser eller tidsavbrudd, i arkiveringsappen.
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 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.

