この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

リアルタイムイベント監視での非同期 SOQL の使用

リアルタイムイベントでの非同期 SOQL の使用例をいくつか紹介します。

非同期 SOQL は、Summer '23 以降すべての Salesforce 組織で廃止される予定です。

メモ

機密の特許情報を含む Patent__c というカスタムオブジェクトを作成したとします。そして、ユーザーが API を使用してこのオブジェクトを照会する状況を把握したいと考えます。ApiEvent オブジェクトに次の非同期 SOQL クエリを使用して、最後にいつ、誰が、Patent__c のどの部分にアクセスしたのかを判断します。この WHERE 句は QueriedEntities 項目を使用して、結果を Patent__c オブジェクトの API クエリのみに絞り込みます。

URI の例
1https://yourInstance.salesforce.com/services/data/v48.0/async-queries/
POST リクエストボディの例
1{
2  "query": "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent 
3            WHERE QueriedEntities LIKE '%Patent__c%'",
4  "targetObject": "ApiTarget__c",
5  "targetFieldMap": {
6    "EventDate": "EventDate__c",
7    "EventIdentifier": "EventIdentifier__c",
8    "QueriedEntities": "QueriedEntities__c",
9    "SourceIp": "IPAddress__c",
10    "Username": "User__c",
11    "UserAgent": "UserAgent__c"
12  }
13}
POST レスポンスボディの例
1{
2  "jobId" : "08PB00000066JRfMAM",
3  "message" : "",
4  "operation" : "INSERT",
5  "query" : "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent 
6             WHERE QueriedEntities LIKE '%Patent__c%'",
7  "status" : "Complete",
8  "targetExternalIdField" : "",
9  "targetFieldMap" : {
10    "EventDate" : "EventDate__c",
11    "SourceIp" : "IPAddress__c",
12    "EventIdentifier" : "EventIdentifier__c",
13    "QueriedEntities" : "QueriedEntities__c",
14    "Username" : "User__c",
15    "UserAgent" : "UserAgent__c"
16  },
17  "targetObject" : "ApiTarget__c",
18  "targetValueMap" : { }
19}

アーカイブ済みオブジェクトの SOQL クエリから返される数値項目はすべて、標準オブジェクトのエンティティ履歴の数値項目と同様に、科学的記数法ではなく、標準記数法で表記されます。

メモ

監査の目的で繰り返しこの質問をする場合は、cURL スクリプトを使用してクエリを自動化できます。
1curl -H "Content-Type: application/json" -X POST -d
2'{"query": "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent WHERE QueriedEntities LIKE '%Patent__c%'",
3  "targetObject": "ApiTarget__c", 
4  "targetFieldMap": {"EventDate": "EventDate__c","EventIdentifier": "EventIdentifier__c","QueriedEntities": "QueriedEntities__c","SourceIp": "IPAddress__c","Username": "User__c","UserAgent": "UserAgent__c"}}' 
5  "https://yourInstance.salesforce.com/services/data/v48.0/async-queries/" -H 
6  "Authorization: Bearer 00D30000000V88A!ARYAQCZOCeABy29c3dNxRVtv433znH15gLWhLOUv7DVu.
7 uAGFhW9WMtGXCul6q.4xVQymfh4Cjxw4APbazT8bnIfxlRvUjDg"

イベント監視のもう 1 つの使用事例は、社会保障番号やメールなどの機密項目にアクセスしたすべてのユーザーを特定することです。たとえば、次の非同期 SOQL クエリを使用して、社会保障番号を参照したユーザーを特定することができます。

URI の例
1https://yourInstance.salesforce.com/services/data/v48.0/async-queries/
POST リクエストボディの例
1{        
2   "query": "SELECT Query, Username, EventDate, SourceIp FROM ApiEvent 
3             WHERE Query LIKE '%SSN__c%'",
4   "targetObject": "QueryEvents__c",
5   "targetFieldMap": {
6      "Query":"QueryString__c", 
7      "Username":"User__c", 
8      "EventDate":"EventDate__c", 
9      "SourceIp" : "IPAddress__c"
10   }
11}
POST レスポンスボディの例
1{
2   "jobId": "08PB000000001RS",
3   "message": "",
4   "query": "SELECT Query, Username, EventDate, SourceIp FROM ApiEvent 
5             WHERE Query LIKE '%SSN__c%'",
6   "status": "Complete",
7   "targetFieldMap": {"Query":"QueryString__c", "Username":"User__c", 
8                     "EventDate":"EventDate__c", "SourceIp" : "IPAddress__c"
9                     },
10   "targetObject": "QueryEvents__c"
11}