Loading
Salesforce-organisaatiosi määrittäminen ja ylläpito
Sisällysluettelo
Valitse suodattimet

          Ei tuloksia
          Ei tuloksia
          Tässä on joitain hakuvinkkejä

          Tarkista avainsanojesi oikeinkirjoitus.
          Käytä yleisempiä hakutermejä.
          Laajenna hakua valitsemalla vähemmän suodattimia.

          Hae koko Salesforce-ohjeesta
          Apex arkistointipyynnöt

          Apex arkistointipyynnöt

          Arkistoi Apex -kyselyt sallivat arkistoidun datan ohjelmallisen käytön Arkistoi-sovelluksessa. Nämä datakyselyt automatisoivat liiketoimintaprosesseja, tukevat kolmansien osapuolten järjestelmäintegraatioita, luovat mukautettuja näkymiä ja raportteja sekä ristiviittaavat arkistoitua dataa aktiivisten tietueiden kanssa.

          Arkistoi- ja Arkistoi haku -komponentit tarjoavat vaihtoehtoja datan manuaaliseen noutamiseen. Apex tarjoaa edistyneitä ominaisuuksia, kuten kyselyparametrejä, suodattimia ja sivutusta, jotta voit käyttää dataa suoraan koodilla.

          Apex Data Query -ominaisuuksiin sisältyy:

          • Hae arkistoituja tietueita käyttämällä määritettyjä ehtoja.
          • Käytä osittaista vastaavuutta tähtimerkin kanssa (*).
          • Palauta suuria datajoukkoja enintään 1 000 tietueen erissä per sivu.
          • Käytä enintään kuutta suodatinta tarkentaaksesi tuloksiasi.

          Nämä järjestelmään liittyvät Salesforce-objektit suodatetaan pois, eikä niitä voi hakea Apexissa.

          • Feed
          • History
          • Relation
          • Share

          Arkistoi ei sisällä näitä objekteja hakuista, jotta voit ylläpitää optimaalista suorituskykyä ja varmistaa, että vain asiaankuuluvia arkistoituja tietoja palautetaan.

          Huomautus
          Huomautus Tiedostoja ja liitteitä ei voi noutaa Apexin arkistoinnin kautta.

          Käytä Arkistoi-komponenttia tai Arkistoi haku -komponenttia käyttääksesi arkistoituja tiedostoja.

          Arkistoi Apex kyselymetodit

          Määritä arkistoidun datan kyselytapa määrittämällä Apexin tarjoama arkistointimenetelmä.

          • Arkistointidatan käyttäminen — ArchiverAccessor-metodit on suunniteltu vuorovaikuttamaan arkistoitujen tietueiden kanssa. Sen jälkeen voit luoda kyselyitä ja hakea arkistoituun tuotteeseen tallennettua dataa.
          • Kyselytoimintojen määrittäminen — Nämä allekirjoitukset kertovat sinulle, millaisia kyselyitä voit suorittaa Apexilla, kuten globaaleja hakuja ja suodatettuja kyselyitä.
          • Ohjaava käyttö — Tutkimalla metodin allekirjoituksia kehittäjät voivat ymmärtää toteutuksilleen tarvittavat input- ja output-arvot.

          performArchiverGlobalSearch-metodi

          Tämä menetelmä osoittaa, miten globaali haku voidaan suorittaa arkistoidulle datalle.

          Query-parametrit

          Apex käyttävät useita parametrejä hakuasi tarkentamiseen. Jotkin parametrit ovat pakollisia, kun taas toiset ovat valinnaisia. Jokaisen parametrin määrittämisen ymmärtäminen auttaa sinua saamaan tarkempia ja relevantteja tuloksia.

          • Objektin nimi — Määrittää kyseltävän Salesforce-objektin tyypin.

            Esimerkiksi string sObjectName = 'Account' määrittää, että kysely kohdistaa tilitietueisiin.

            Tämä parametri on pakollinen.

            Huomautus
            Huomautus Jokainen kysely kohdistetaan yhteen objektiin. Käytä erillisiä kyselyitä noutaaksesi dataa useista objekteista.
          • Hakusuodattimet — Suodattimet, jotka rajoittavat hakutuloksia kenttien ehtojen perusteella.
            • Kentän nimi — Kenttä, jonka perusteella haluat suodattaa, kuten Name tai CreatedDate
            • Arvo tai Arvojen luettelo — Tietty arvo tai arvot, joita haluat täsmätä

              Esimerkki: Yksittäisen arvon suodatin

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

              Tämä kysely palauttaa tietueet, joiden Nimi-kenttä vastaa merkkijonoa "test".

              Esimerkki: Useiden arvojen suodatin
              SF_Archive.SearchFilter filter = new
              SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'}); 

              Tämä kysely palauttaa tietueet, joiden Tila-kenttä vastaa merkkijonoa "Avoin" tai "Suljettu".

              Tyhjien arvojen tai null-arvojen käsittely — Jos haluat hakea tietueita, joiden kenttä on tyhjä tai null, voit lisätä Arvojen luetteloon tyhjän merkkijonon ("").

              Esimerkki:

              List<SearchFilter> filters = new List<SearchFilter>();
              filters.add(new SearchFilter('Subject', '')); 
              Tämä kysely palauttaa tapaustietueet, joiden Aihe-kenttä on joko tyhjä tai null.

              Hakusuodattimien rajoitukset:

              • Kyselyillä täytyy olla vähintään 1 suodatin per kysely.
              • Kyselyillä voi olla enintään 6 suodatinta, yhdistettynä AND-logiikkaan, per kysely.
              • Suodattimet yhdistetään käyttämällä oletusarvoisesti AND-logiikkaa. OR-logiikkaa ei tueta tällä hetkellä.
              • Suodattimen arvojen luettelo ei voi olla yli 1 000 kohdetta.

            Tämä parametri on pakollinen.

          • Päivämääräsuodattimet — Jos haluat hakea päivämäärien perusteella, käytä DateRange-parametriä ja pakollisia suodattimia. DateRange suodattaa tietueita niiden kenttien perusteella, kuten ArchiveDate, CreatedDate tai ModifiedDate.

            Esimerkki: Tietyn päivämäärän kyselyn päivämääräsuodatin

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

            Tämä kysely palauttaa 1. tammikuuta 2024 ja tämänhetkisen päivän välisenä aikana arkistoidut tietueet.

            Esimerkki: Usean ajanjakson päivämääräsuodatin

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

            Tämä kysely palauttaa 12. joulukuuta 2023 ja 11. tammikuuta 2024 välisenä aikana arkistoidut tietueet.

            Suositellut päivämääräsuodattimet:

            • Jos haluat hakea arkistointipäivän perusteella, lisää archive_date-päivämääräkenttä.
            • Käytä Apex: KK/PP/VVVV.

            Tämä parametri on valinnainen.

          • Palautetut kentät — Määritä tuloksiin sisällytettävät kentät. Jos arvoa ei ole määritetty, kaikki kentät palautetaan.

            Esimerkki: Palauta tietyt kentät

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

            Tämä kysely palauttaa vain kunkin tietueen Name- ja CreatedDate-kentät.

            Tämä parametri on valinnainen.

          • Sivun koko — Määrittää tietueiden määrän per kysely. Tietueiden oletusarvoinen määrä per kysely on 25, ja enimmäismäärä on 1 000.

            Esimerkki: Mukautetun sivun koko

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

            Tämä kysely palauttaa 100 tietuetta per sivu.

            Huomautus
            Huomautus Jos kyselysi sisältää yli 1 000 tietuetta, käynnistyy suorituksen aikainen virhe.
            Tämä parametri on valinnainen.
          • Lajittelusuunta — Lajittelee tulokset kentän mukaan, kuten CreatedDate.
            • Nouseva (asc): Vanhimmasta uusimpaan.
            • Laskeva (desc): Uusimmasta vanhimpaan.

              Esimerkki: Lajittelukysely

              SortingDirection sortingDirection = new SortingDirection('desc');

              Tämä kysely palauttaa tietueet, jotka on lajiteltu laskevassa järjestyksessä niiden CreatedDate perusteella.

              Tämä parametri on valinnainen.

          getNextPage-metodi

          Jos tulokset eivät mahdu samaan sivuun, tämä menetelmä kutsuu seuraavaa sivua.

          ScrollId-parametri

          Käytä sivutusta palauttaaksesi suuria datajoukkoja noutamalla tuloksia enintään 1 000 tietueen sivuilta.

          Määritä sivutustyönkulku suorittamalla alustava kysely, käyttämällä vastauksesta saatuja scrollId-arvoja noutaaksesi myöhempiä sivuja ja jatkaaksesi scrollId = '-1'..

          Esimerkki: Tulosten noutaminen sivutuksella

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

          Metodien käyttäminen

          Löydät metodin allekirjoitukset Määritykset-valikon Apex. Avaa ArchiverAccessor-luokka. Etsi kaikki performArchiverGlobalSearch-nimitilan alla olevat metodit.

          Esimerkki datakyselystä

          Tämä esimerkki noutaa Account-tietueet käyttämällä seuraavia ehtoja.

          • Kentät: Name, CreatedDate
          • Rajoitus: 100 tietuetta per sivu
          • Nimi: Sisältää merkkijonon "test"
          • Lajittelu: Laskeva 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);
                      

          Yleisten virheiden vianmääritys

          Virhekoodi Kuvaus Ratkaisu
          INTERNAL_ERROR Odottamaton virhe tapahtui. Ota yhteyttä tukeen virheiden lisätiedoilla.
          RESOURCE_LIMIT_ERROR Ylitetty sivutuksen tai kyselyn kokorajoitukset. Vähennä sivun kokoa tai tarkenna hakusuodattimia.
          VALIDATION_ERROR Hakuehdot puuttuvat tai virheellisiä. Varmista, että kaikki kentät ja suodattimet ovat käypiä.

          Muita suosituksia

          • Valvo API:n käyttöäsi välttyäksesi rajoitusten ylittymiseltä.
          • Jos haluat lähettää vastauksen objektiin, sarjaa se JSON-tiedostoon ja poista sitten sarjanpito takaisin objektiksi.
          • Varmista, että kentät ovat käytössä ja käytettävissä.
          • Tarkasta kaikki kyselyparametrit.
          • Jos sinulla on ratkaisemattomia ongelmia, ota yhteyttä Salesforce-tukeen yksityiskohtaisten lokien avulla.

          Katso vaiheittaiset testaustoimenpiteet kohdasta Apex-testauksen arkistointi.

          Apex arkistointipyynnöt — Esimerkkikoodi

          Tässä esimerkkikoodissa suodatin, ajanjakso ja arkiston hakupyyntö vahvistetaan Arkistoi-sovelluksen tilakoodin kautta.

          (scrollId != -1) seuraava getNextPage sisällytetään mukaan, koska tulosten koko on rajoitettu performArchiverGlobalSearch-kutsussa.

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

          Apex arkistointipyynnöt — Esimerkki käyttötarkoituksesta 1

          Tämä käyttöesimerkki osoittaa, miten voit rakentaa ja mukauttaa komponenttia, joka näyttää High Priority Accounts -objektin Arkistoi-sovelluksessa.

          Käyttötarkoitus

          Yrityksesi vaatii, että tason 3 tukitiimillä on korkean prioriteetin tilan arkistoitujen tapausten tarkasteluoikeus.

          Tämä esimerkki osoittaa, miten voit:

          • Luo mukautettu Lightning (LWC).
          • Nouda arkistoitua dataa käyttämällä Apex.
          • Käytä suodatinta (korkea prioriteetti).
            Huomautus
            Huomautus Muita suodattimia voidaan mukauttaa käyttämällä Apex arkistointikyselyt -osiossa olevaa koodia — esimerkki koodista.

            Tämä esimerkki on rajoitettu 25 tietueeseen. Apex sallii sinun asettaa tuloksiin 1 000 per sivu. Oletusarvo on 25, ja voit valita sivutuksen tulosten läpi.

          Korkean prioriteetin tapaukset näyttävä komponentti

          Esimerkki SdkUseCaseWidget.js

          Tässä esimerkkikoodissa parametri on 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;
              }}
          }            

          Esimerkki SdkUseCaseWidget.html

          LWC:n käyttämä Apex kutsuu Apex.

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

          Tämä on Arkistoi Apex -kutsu. Se sisältää seuraavat parametrit.

          • sObjectName — Kuvaa hakua
          • Suodattimet — Käytetään datan noutamiseen
          • Kentät — Datan palauttamat ennustetut kentät.
          • Asteikko — Datan kyselemiseen käytetty ajanjakso.
          <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

          Tämä koodilohko on 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

          Avustajan luokka, joka muotoilee luokan Apexista LWC:ään

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

          Yllä oleva koodi kuvaa esimerkkiskenaariota, jossa voit lisätä LWC:n komponenttina Lightning.

          Jos haluat tarkastella todellista Lightning-datataulukkoa, lisää tämä koodi sampleSdkUseCaseWidget.js-meta.xml-tiedostoon. Lisää sitten Arkistoi-komponentti 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>

          Apex arkistointipyynnöt — Esimerkki käyttötarkoituksesta 2

          Tämä käyttöesimerkki osoittaa, miten Arkistoi Apex käsittelee tehtäviä ylittämättä hallintarajoituksia, kuten CPU-rajoituksia tai Timeout-kutsuja Arkistoi-sovelluksessa.

          Lisätietoja on kohdassa Apex-hallintarajoitukset.

          Käyttötarkoitus

          Yrityksesi vaatii, että tason 3 tukitiimillä on korkean prioriteetin tilan arkistoitujen tapausten tarkasteluoikeus.

          Tämä esimerkki osoittaa, miten voit välttyä virheestä, kun Apexilla haettujen arkistoitujen tietueiden määrä on liian suuri. Virheessä lukee: SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time allotted for callout, please contact support.

          Näiden Apex koodi luo tämän käyttötarkoituksen.

          ArchiveSecondPageJob-luokka käsittelee arkistosta sivutettuja tietoja käyttämällä vierityksen tunnusta ja tekemällä callout-kutsuja tarvittaessa. Se suoritetaan asynkronisesti Queueable-käyttöliittymän kautta, se seuraa kokonaissuoritusaikaa rajoitusten ylittymisen välttämiseksi ja jatkaa käsittelyä tarvittaessa. Luokka käsittelee vastaukset, päivittää vierityksen tunnuksen ja kirjaa kunkin haetun datasivun tiedot lokiin.

          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-luokka suorittaa haun Tapaus-objektille käyttämällä tiettyjä suodattimia, noutaa tulokset ja kirjaa lokiin lisätietoja, kuten kokonaismäärän ja vierityksen tunnuksen. Jos haku palauttaa kelvollisen vierityksen tunnuksen, joka osoittaa enemmän tulosten sivuja, se asettaa archiveSecondPageJob käsittelemään seuraavan sivun asynkronisesti. Tämä luokka käynnistää haun ja käsittelee aiemmin määritetyn archiveSecondPageJob.

          Alla on alkuperäisen hakupuhelun muoto.

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

          Lisätietoja on kohdassa Salesforce Apex Developer Guide.

           
          Ladataan
          Salesforce Help | Article