getUpdated()
指定されたオブジェクトに対して指定された期間内に更新された (追加または変更された) 個別のレコードのリストを取得します。
構文
1GetUpdatedResult[] = connection.getUpdated(string sObjectType, dateTime startDate, dateTime EndDate);使用方法
データ複製アプリケーションに getUpdated() を使用すると、指定されたオブジェクトのうち、指定された期間内に作成または更新されたオブジェクトの ID のセットを取得できます。getUpdated() コールは、GetUpdatedResult オブジェクトの配列を取得します。この配列には、作成または更新された各オブジェクトの ID と、作成または更新された日時 (協定世界時 (UTC) タイムゾーン) がそれぞれ含まれます。クライアントアプリケーションで getUpdated() を使用する前に、データ複製に目を通してください。
ルールとガイドライン
作成または更新されたオブジェクトを複製する際は、次のルールやガイドラインを考慮する必要があります。
- startDate は、endDate の値より過去の日時でなければなりません。startDate は、endDate と同じか未来の日時であってはなりません。そのような場合、API は INVALID_REPLICATION_DATE エラーを返します。
- コールが実行された日から 30 日以内の結果が返されます。
- クライアントアプリケーションは、定期的にデータ変更のポーリングを行います。ポーリング時の重要な検討事項については、「変更のポーリング」を参照してください。
- クライアントアプリケーションは、適切な権限が付与されている場合、任意のオブジェクトを複製できます。たとえば、組織のすべてのデータを複製するには、クライアントアプリケーションは指定されたオブジェクトの「すべてのデータの参照」アクセス権限を持ってログインしなければなりません。同様に、オブジェクトはそのユーザの共有ルールに含まれていなければなりません。詳細は、「データアクセスに影響する要素」を参照してください。
- 特定のオブジェクトは、API からは複製できません。getUpdated() コールからオブジェクトを複製するには、オブジェクトが複製可能に設定されている (replicateable が true) 必要があります。指定されたオブジェクトが複製可能かどうかを確認するには、クライアントアプリケーションでオブジェクトに対する describeSObjects() コールを実行し、replicateable プロパティを確認します。
- Group、User、Contract、Product2 オブジェクトなど、オブジェクトによっては削除できないものがあります。ただし、これらのオブジェクトのインスタンスが Salesforce ユーザインターフェ���スにはすでに表示されていない場合、管理者アクセス権限を持つユーザのみが参照できるよう無効にすることができます。表示されていないオブジェクトインスタンスが無効かどうかを判別するには、クライアントアプリケーションから getUpdated() をコールし、オブジェクトの有効フラグを確認します。
- 時間データの処理方法は、開発ツールごとに異なります。開発ツールによってはローカル時間を表示するものも、協定世界時 (UTC) を表示するものもあります。開発ツールごとの時間の処理方法はツールのドキュメントを参照してください。
更新されたオブジェクトの複製の基本手順
更新されたオブジェクトの複製では、複製する各オブジェクトで次の基本手順に従います。
- 必要に応じて、直近の複製要求以降、オブジェクトの構造が変更されたかどうかを確認します (「オブジェクトの構造変更のチェック」を参照)。
- getUpdated() をコールし、データを取得するオブジェクトと期間を渡します。
- ID の配列すべてに対して反復処理を行います。配列の各 ID 要素に対し、retrieve() をコールして関連するオブジェクトから必要な最新情報を取得します。その後クライアントアプリケーションは、ローカルデータに新しい行の挿入や、既存の行を最新情報で更新するなどの適切な処理を行います。
- 必要に応じて、今後の参照のために要求のタイムスタンプを保存します。
クライアントアプリケーションは、データ複製処理に関連付けられた他のタスクを実行することもあります。たとえば、商談がクローズしている場合、クライアントアプリケーションは新たな収益レポートを実行することが考えられます。同様にタスクが完了している場合、プロセスは他のシステムのログに別の方法で記述することが考えられます。
サンプルコード —Java
このサンプルでは、直近の 60 分で更新された取引先を取得し、コンソールにその ID を書き込みます。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public void getUpdatedRecords() {
18 try {
19 GregorianCalendar endTime = (GregorianCalendar) connection
20 .getServerTimestamp().getTimestamp();
21 GregorianCalendar startTime = (GregorianCalendar) endTime.clone();
22 // Subtract 60 minutes from the server time so that we have
23 // a valid time frame.
24 startTime.add(GregorianCalendar.MINUTE, -60);
25 System.out.println("Checking updates as of: "
26 + startTime.getTime().toString());
27
28 // Get the updated accounts within the specified time frame
29 GetUpdatedResult ur = connection.getUpdated("Account", startTime,
30 endTime);
31 System.out.println("GetUpdateResult: " + ur.getIds().length);
32
33 // Write the results
34 if (ur.getIds() != null && ur.getIds().length > 0) {
35 for (int i = 0; i < ur.getIds().length; i++) {
36 System.out.println(ur.getIds()[i] + " was updated between "
37 + startTime.getTime().toString() + " and "
38 + endTime.getTime().toString());
39 }
40 } else {
41 System.out.println("No updates to accounts in "
42 + "the last 60 minutes.");
43 }
44 } catch (ConnectionException ce) {
45 ce.printStackTrace();
46 }
47}サンプルコード —C#
このサンプルでは、直近の 60 分で更新された取引先を取得し、コンソールにその ID を書き込みます。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public void getUpdatedRecords()
18{
19 try
20 {
21 DateTime endTime = binding.getServerTimestamp().timestamp;
22 // Subtract 60 minutes from the server time so that we have
23 // a valid time frame.
24 DateTime startTime = endTime.AddMinutes(-60);
25 Console.WriteLine("Checking updates as of: "
26 + startTime.ToLocalTime().ToString());
27
28 // Get the updated accounts within the specified time frame
29 GetUpdatedResult ur = binding.getUpdated("Account", startTime,
30 endTime);
31 Console.WriteLine("GetUpdateResult: " + ur.ids.Length);
32
33 // Write the results
34 if (ur.ids != null && ur.ids.Length > 0)
35 {
36 for (int i = 0; i < ur.ids.Length; i++)
37 {
38 Console.WriteLine(ur.ids[i] + " was updated between "
39 + startTime.ToLocalTime().ToString() + " and "
40 + endTime.ToLocalTime().ToString());
41 }
42 }
43 else
44 {
45 Console.WriteLine("No updates to accounts in "
46 + "the last 60 minutes.");
47 }
48 }
49 catch (SoapException e)
50 {
51 Console.WriteLine("An unexpected error has occurred: " +
52 e.Message + "\n" + e.StackTrace);
53 }
54}引数
| 名前 | 型 | 説明 |
|---|---|---|
| sObjectTypeEntityType | string | オブジェクト種別。指定された値は、組織で有効なオブジェクトである必要があります。標準オブジェクトの一覧は、「標準オブジェクト」を参照してください。 |
| startDate | dateTime | データを取得する期間の開始日時 (ローカル時間ではなく協定世界時 (UTC))。API は、指定された dateTime 値の秒の値を切り捨てます (たとえば、12:30:15 は 12:30:00 UTC となります)。 |
| endDate | dateTime | データを取得する期間の終了日時 (ローカル時間ではなく協定世界時 (UTC))。API は、指定された dateTime 値の秒の値を切り捨てます (たとえば、12:35:15 は 12:35:00 UTC となります)。 |