Loading
ただいま大変多くのお問い合わせをいただいており、ご連絡までにお時間を頂戴しております続きを読む
Salesforce 組織の設定および管理
目次
絞り込み条件を選択

          結果がありません
          結果がありません
          検索のヒントをいくつかご紹介します

          キーワードの入力ミスがないか確認する。
          より一般的な検索語を使用する。
          絞り込み条件を減らして、検索範囲を広げる。

          Salesforce ヘルプ全体を検索
          Apex データクエリのアーカイブ

          Apex データクエリのアーカイブ

          アーカイブ Apex データクエリを使用すると、アーカイブアプリケーションのアーカイブデータにプログラムでアクセスできます。これらのデータクエリは、ビジネスプロセスの自動化、サードパーティのシステムインテグレーションのサポート、カスタムビューとレポートの作成、有効なレコードとのアーカイブデータの相互参照を行います。

          [アーカイブ] コンポーネントと [アーカイブ検索] には、手動でデータを取得するオプションがあります。Apex は、クエリ・パラメータ、フィルタ、ページネーションなどの高度な機能を備えており、コードを使用してデータに直接アクセスできます。

          Apex データクエリには次の機能があります。

          • 指定した条件を使用してアーカイブ済みレコードを検索します。
          • アスタリスク (*) を使用して部分一致を使用します。
          • ページあたり最大 1,000 件のレコードのバッチで大きなデータセットを返します。
          • 最大 6 個の検索条件を適用して結果を絞り込みます。
          • オブジェクトが本番組織から削除された場合でも、アーカイブ済みレコードを照会します。

          これらのシステム関連の Salesforce オブジェクトは除外され、Apex で検索できません。

          • Feed
          • History
          • Relation
          • Share

          最適なパフォーマンスを維持し、関連するアーカイブデータのみが返されるように、アーカイブではこれらのオブジェクトが検索から除外されます。

          メモ
          メモ Archive Apex ではファイルと添付ファイルを取得できません。

          アーカイブ済みファイルにアクセスするには、アーカイブコンポーネントまたはアーカイブ検索を使用します。

          メモ
          メモ

          Archive Apex では、次の要求制限が適用されます。

          間隔 要求の制限
          毎分 1000
          時間あたり 30,000
          1 日あたり 100000

          この制限を超えると、HTTP 状況コード 429 を受信します。

          Apex データのアーカイブクエリメソッド

          アーカイブ データを照会する方法を定義するには、Archive Apex で提供される方法を設定します。

          • アーカイブデータへのアクセス — ArchiverAccessor内のメソッドは、アーカイブされたレコードを操作するように設計されています。その後、クエリを作成し、アーカイブ製品に保存されているデータを取得できます。
          • クエリ操作の定義:これらのシグニチャは、グローバル検索や絞り込まれたクエリなど、Apex を使用して実行できるクエリの種類を示します。
          • 使用方法のガイド — メソッド署名を調べることで、開発者は実装に必要な入力と出力を理解できます。

          performArchiverGlobalSearch メソッド

          このメソッドは、アーカイブされたデータに対してグローバル検索を実行する機能を示します。

          Query パラメータ

          Apex データクエリでは、いくつかのパラメータを使用して検索を絞り込みます。必須のパラメーターもあれば、省略可能なパラメーターもあります。各パラメーターの設定方法を理解することで、最も正確で関連性の高い結果を得ることができます。

          • オブジェクト名 — 照会する Salesforce オブジェクトの種別を指定します。

            たとえば、string sObjectName = 'Account' は、クエリの対象が取引先レコードであることを指定します。

            このパラメーターは必須です。

            メモ
            メモ 各クエリは 1 つのオブジェクトを対象とします。複数のオブジェクトからデータを取得するには、個別のクエリを使用します。
          • 検索条件 — 項目条件に基づいて検索結果を絞り込みます。
            • Field Name — 絞り込むフィールド (NameCreatedDate など)
            • 値または値のリスト — 照合する特定の値 (複数可)

              例: 単一値検索条件

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

              このクエリは、[名前] 項目が文字列 "test" に一致するレコードを返します。

              例: 複数値検索条件
              SF_Archive.SearchFilter filter = new
              SF_Archive.SearchFilter('Status', new List<String>{'Open', 'Closed'}); 

              このクエリは、[状況] 項目が文字列「オープン」または「クローズ」に一致するレコードを返します。

              空または Null 値の処理 — 項目が空または null のレコードを検索するには、空の文字列 (%) を値のリストに追加します。

              例:

              List<SearchFilter> filters = new List<SearchFilter>();
              filters.add(new SearchFilter('Subject', '')); 
              このクエリは、[件名] 項目が空または null のケースレコードを返します。

              検索条件の制限:

              • クエリには、クエリごとに少なくとも 1 つの検索条件が必要です。
              • クエリには、クエリごとに最大 6 個の検索条件をANDロジックと組み合わせて使用できます。
              • デフォルトでは、フィルタはANDロジックを使用して結合されます。OR ロジックは現在サポートされていません。
              • 検索条件の値リストは、1,000 項目を超えることはできません。

            このパラメーターは必須です。

          • 日付フィルタ — 日付に基づいて検索するには、DateRange パラメータと必須フィルタを使用します。DateRange は、ArchiveDateCreatedDateModifiedDate などの項目でレコードを絞り込みます。

            例: 特定の日付クエリの日付検索条件

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

            このクエリは、2024 年 1 月 1 日から今日までの間にアーカイブされたレコードを返します。

            例: 複数の日付範囲の日付検索条件

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

            このクエリは、2023 年 12 月 12 日から 2024 年 1 月 11 日までにアーカイブされたレコードを返します。

            日付検索条件のおすすめ:

            • アーカイブ日に基づいて検索するには、archive_date日フィールドを追加します。
            • Apex 日付形式 (MM/DD/YYYY) を使用します。

            このパラメーターは省略可能です。

          • 返される項目 — 結果に含める項目を指定します。指定しない場合、すべての項目が返されます。

            例: 特定の項目を返す

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

            このクエリでは、各レコードのName項目とCreatedDate項目のみが返されます。

            このパラメーターは省略可能です。

          • ページサイズ — クエリあたりのレコード数を設定します。クエリあたりのデフォルトのレコード数は 25、最大数は 1,000 です。

            例: カスタムページサイズ

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

            このクエリでは、ページあたり 100 件のレコードが返されます。

            メモ
            メモ クエリのレコード数が 1,000 件を超えると、実行時エラーが発生します。
            このパラメーターは省略可能です。
          • Sorting Direction (並び替えの方向) — CreatedDate などの項目で結果を並び替えます。
            • 昇順 (asc): 最も古い順。
            • 降順 (desc): 新しい順。

              例: クエリの並び替え

              SortingDirection sortingDirection = new SortingDirection('desc');

              このクエリは、レコードをCreatedDateの降順に並び替えて返します。

              このパラメーターは省略可能です。

          getNextPage メソッド

          結果がすべて同じページに収まらない場合、このメソッドは次のページをコールします。

          ScrollId パラメータ

          ページネーションを使用して、最大 1,000 件のレコードのページで結果を取得して、大きなデータセットを返します。

          ページ設定ワークフローを設定するには、最初のクエリを実行し、応答のscrollIdを使用して後続のページを取得し、scrollId = '-1'.まで続行します。

          例: ページネーションを使用した結果の取得

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

          メソッドへのアクセス

          メソッドの署名を検索するには、[設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択します。ArchiverAccessor クラスを開きます。performArchiverGlobalSearch 名前空間にリストされているすべてのメソッドを見つけます。

          サンプルデータクエリ

          この例では、次の条件を使用してAccountレコードを取得します。

          • 項目: NameCreatedDate
          • 制限: ページあたり 100 件のレコード
          • 名前: 文字列「test」を含む
          • 並び替え: 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);
                      

          一般的なエラーのトラブルシューティング

          エラーコード 説明 解決策
          INTERNAL_ERROR 予期しないエラーが発生しました。 エラーの詳細についてサポートにお問い合わせください。
          RESOURCE_LIMIT_ERROR ページネーションまたはクエリサイズの制限を超えています。 ページサイズを減らすか、検索条件を絞り込みます。
          VALIDATION_ERROR 検索条件がないか無効です。 すべての項目と検索条件が有効であることを確認します。

          その他のおすすめ

          • 制限に達しないように API 使用状況を監視します。
          • 応答をオブジェクトにキャストするには、JSON にシリアライズしてからオブジェクトにデシリアライズします。
          • 項目が有効になっていて、アクセス可能であることを確認します。
          • すべてのクエリパラメーターを再確認します。
          • 未解決の問題については、Salesforce サポートに連絡して詳細なログを入手してください。

          テスト手順の詳細は、「Archive Apex Testing」を参照してください。

          Apex データクエリのアーカイブ — コード例

          次のコード例では、検索条件、日付範囲、アーカイブ検索要求がアーカイブアプリケーションのステータスコードを使用して検証されます。

          (scrollId != -1) に続く getNextPage コールは、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()); 
              }

          Apex データクエリのアーカイブ — サンプル使用事例 1

          この使用事例では、アーカイブアプリケーションに優先度の高い取引先を表示するコンポーネントを作成してカスタマイズする方法を示します。

          使用事例

          優先度の高い状況のアーカイブ済みケースを参照するには、Tier 3 サポートチームへのアクセス権が必要です。

          次に、例を示します。

          • カスタマイズされた Lightning Web コンポーネント(LWC)を作成します。
          • Apexデータ・クエリを使用して、アーカイブ・データを取り込みます。
          • 検索条件 (優先度高) を適用します。
            メモ
            メモ その他のフィルタは、「Apex データクエリのアーカイブ — コード例」のコードを参照してカスタマイズできます。

            この例では、25 件のレコードに制限されています。Apex では、結果を 1 ページあたり 1,000 件に設定できます。デフォルトは 25 で、結果をページネーションするオプションがあります。

          優先度の高いケースを表示するコンポーネント

          サンプル SdkUseCaseWidget.js

          このコード例では、パラメーターは 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;
              }}
          }            

          サンプル SdkUseCaseWidget.html

          LWC で使用される Apex コントローラは、Apex データ クエリをコールします。

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

          これは Archive Apex のコールです。これには次のパラメーターが含まれます。

          • sObjectName — 検索を示します。
          • 検索条件 — データを取得するために使用されます。
          • 項目 — データから返される予測項目。
          • 範囲 — データの照会に使用される日付範囲。
          <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

          このコードブロックは 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

          Apex から 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;
          }}

          上記のコードは、LWC をコンポーネントとして Lightning ページに追加できるサンプル シナリオを示しています。

          実際の Lightning データ テーブルを表示するには、次のコードを sampleSdkUseCaseWidget.js-meta.xml ファイルに追加します。次に、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 データクエリのアーカイブ — サンプル使用事例 2

          この使用事例では、Archive Apex が Archive アプリケーションでガバナ制限 (CPU 制限やタイムアウト コールアウトなど) を超えないで ToDo を処理する方法を示します。

          詳細は、「Apex ガバナ制限」を参照してください。

          使用事例

          優先度の高い状況のアーカイブ済みケースを参照するには、Tier 3 サポートチームへのアクセス権が必要です。

          この例では、Apex で取得されるアーカイブ済みレコードの数が多すぎる場合のエラーを回避する方法を示します。エラーは「SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time allotted for callout, please contact support」です。

          これらの Apex クラスのコードによって、次の使用事例が作成されます。

          ArchiveSecondPageJob クラスは、スクロール ID を使用してアーカイブからページ設定されたデータを処理し、必要に応じてコールアウトを実行します。Queueable インターフェースを介して非同期に実行され、制限を超えないように合計実行時間を追跡し、必要に応じて処理を続行するために自分自身をキューに入れます。このクラスは応答を処理し、スクロール ID を更新して、取得した各データページの詳細を記録します。

          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 クラスは、特定の検索条件を使用して Case オブジェクトの検索を実行し、結果を取得して、合計数やスクロール ID などの詳細を記録します。検索で有効なスクロール ID が返された場合、archiveSecondPageJobは次のページを非同期で処理するためにキューに入れられます。このクラスは、基本的に検索を開始し、以前に定義したarchiveSecondPageJobに以降の処理を渡します。

          最初の検索コールの形式を次に示します。

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

          詳細については、『Salesforce Apex Developer Guide (Salesforce Apex 開発者ガイド)』を参照してください。

           
          読み込み中
          Salesforce Help | Article