getDeleted()
構文
使用方法
データ複製アプリケーションに getDeleted() を使用すると、指定した期間内に組織のデータから削除されたレコードのリストを取得できます。getDeleted() コールは GetDeletedResult オブジェクトを取得します。このオブジェクトに含まれる DeletedRecord オブジェクトの配列には、削除された各レコードの ID と、削除された日時 (協定世界時 (UTC) タイムゾーン) が入っています。クライアントアプリケーションで getDeleted() を使用する前に、「データ複製」に目を通してください。(ID についての詳細は、「ID データ型」を参照してください)。
リリース 8.0 現在、getDeleted() コールは、ユーザーの共有モデルに従います。
ルールとガイドライン
削除されたレコードを複製する場合、次のルールとガイドラインを考慮してください。
- startDate は、endDate の値より 1 分以上過去の日時でなければなりません。startDate は、endDate 以降の値にすることはできません。そのような場合、API は INVALID_REPLICATION_DATE エラーを返します。
- レコードは、ユーザーがアクセスした場合のみ返されます。
- コールが実行された日から 15 日以内の結果が返されます (管理者がごみ箱の中身を消去した場合、期間が短くなる場合があります)。getDeleted() コールを実行する前に消去処理を実行すると、INVALID_REPLICATION_DATE エラーが返されます。
- latestDateCovered が endDate より前の値の場合、コールは失敗し、latestDateCovered の値と共に INVALID_REPLICATION_DATE エラーが返されます。
-
削除されたレコードは、getDeleted() からアクセス可能な削除ログに出力されます。2 時間ごとに実行されるバックグラウンドプロセスは、削除ログのレコード数が制限を超えた場合、削除ログに書き込まれてから 2 時間以上経過したレコードを消去します。最も古いレコードから順に、削除ログが制限を下回るまで消去を行います。この処理は、大量の削除ログによる Salesforce のパフォーマンス上の問題を防ぎます。制限値は次の数式を使用して算出します。
たとえば、1,000 ライセンスを所有する組織では、削除ログのレコード数が 5,000,000 (5 百万) レコード以上になると消去処理を開始します。getDeleted() コールを実行する前に消去処理を実行すると、INVALID_REPLICATION_DATE エラーが返されます。この例外が発生した場合は、テーブル全体に対するプル処理を実行してください。
- 大量のレコードを削除する場合は、getDeleted() コールがすべてのレコードを返すようにするため、データの複製が 2 時間おきよりも短い間隔で実行されます。
- クライアントアプリケーションは、定期的にデータ変更のポーリングを行います。ポーリング時の重要な検討事項については、「変更のポーリング」を参照してください。
- 特定のオブジェクトのレコードは、API からは複製できません。getDeleted() コールからレコードを複製するには、そのオブジェクトが複製可能に設定されている (replicateable が true) 必要があります。指定されたオブジェクトが複製可能かどうかを確認するには、クライアントアプリケーションでオブジェクトに対する describeSObjects() コールを実行し、replicateable プロパティを確認します。
- 時間データの処理方法は、開発ツールごとに異なります。開発ツールによってはローカル時間を表示するものも、協定世界時 (UTC) を表示するものもあります。開発ツールごとの時間の処理方法はツールのドキュメントを参照してください。
- 履歴オブジェクトの getDeleted() をコールする場合、このコールでは、ユーザーが指定した履歴オブジェクトだけではなく、すべての履歴オブジェクトの特定の日付範囲の間に削除されたレコードを返します。たとえば、AccountHistory の getDeleted() をコールすると、AccountHistory、ContactHistory などの特定の日付範囲で削除されたレコードを取得します。ただし、OpportunityHistory に対する getDeleted() コールは削除された OpportunityHistory レコードのみを返し、その他の関連する削除された履歴オブジェクトは返しません。
削除されたオブジェクトを複製するための基本手順
削除されたレコードは、オブジェクトごとに次の基本手順を使用して複製できます。
- (必要に応じて実行) 直近の複製要求以降、オブジェクトの構造が変更されたかどうかを確認します (「オブジェクトの構造変更のチェック」を参照)。
- getDeleted() をコールし、削除されたレコードのオブジェクトと関連する期間を渡します。
- DeleteResult オブジェクトで、返された DeletedRecord オブジェクトの配列を反復処理します。この配列に��、削除された各レコードの ID と削除日 (協定世界時 (UTC) タイムゾーン) が含まれます。
- ローカルデータに対して適切なアクションを実行し、削除されたレコードを消去するか、削除済みのフラグを設定します。
- 必要に応じて、latestDateCovered の値を使用して、今後の参照のために要求の期間を保存します。
クライアントアプリケーションは、データ複製処理に関連付けられた他のタスクを実行することもあります。たとえば、商談がクローズしている場合、クライアントアプリケーションは新たな収益レポートを実行することが考えられます。同様にタスクが完了している場合、プロセスは他のシステムのログに記述します。
サンプルコード — Java
このサンプルでは、getDeleted() をコールして、直近の 60 分間に削除されたすべての取引先を取得します。次に、ID および返された各取引先が削除された日付をコンソールに書き込みます。
サンプルコード — C#
このサンプルでは、getDeleted() をコールして、直近の 60 分間に削除されたすべての取引先を取得します。次に、ID および返された各取引先が削除された日付をコンソールに書き込みます。
引数
| 名前 | 型 | 説明 |
|---|---|---|
| sObjectTypeEntityType | string | オブジェクト種別。指定された値は、組織で有効なオブジェクトである必要があります。「sObject」を参照してください。 |
| startDate | dateTime | データを取得する期間の開始日時 (ローカル時間ではなく協定世界時 (UTC))。API は、指定された dateTime 値に含まれる秒の部分を切り捨てます (たとえば、12:30:15 は 12:30:00 UTC となります)。 |
| endDate | dateTime | データを取得する期間の終了日時 (ローカル時間ではなく協定世界時 (UTC))。API は、指定された dateTime 値に含まれる秒の部分を切り捨てます (たとえば、12:35:15 は 12:35:00 UTC となります)。 |
制限
getDeleted() コールで返される結果が多すぎる場合は、レスポンスで例外 EXCEEDED_ID_LIMIT が返されます。返すことができるレコード数については、「SOAP API コールの制限」を参照してください。