オブジェクト "UserRecordAccess" [here]を使用したアクセス制御について説明しているSalesforceのマニュアルによると、与えられた "User"と "Case"のアクセス許可リスト を取得したいと思います。 Salesforceでインタラクティブワークベンチツールを使用してSalesforce - オブジェクトUserRecordAccessでのクエリ構文エラー
は、私はこのクエリの構築で次の構文エラーを受信:
SOQLクエリ:ワークベンチで
SELECT RecordId, HasReadAccess FROM UserRecordAccess WHERE UserId = 'abc123xyz..' AND RecordId in (SELECT Id FROM Case WHERE CaseNumber = '10001026')
検証メッセージ:
MALFORMED_QUERY: The left operand field in the where expression for outer query should be an id field, cannot use: 'RecordId'
代替構文はSOQLからbこのようなネストされたクエリは何か?
たソリューション:ソリューション・パスとして は、下記の投稿の答えを以下、私が順番に3つのSOQLクエリを実行RESTインターフェース、とAPEXスクリプトでコードを書いてきました。そのフィールドは、同じデータ型の私は信じるべきセットの1つのインスタンスと比較されるのidの(SET<ID>
)のセットを返します
@RestResource(urlMapping='/sfcheckap/*')
// sample: /services/apexrest/sfcheckap/00001028&[email protected]
//
global with sharing class MyRestResource1 {
@HttpGet
global static Boolean doGet() {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
String myinput = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
List<String> inputList = myinput.split('&');
String mycase = inputList[0];
String myemail = inputList[1];
sObject s1 = [SELECT Id FROM User WHERE Email = :myemail];
ID MyUserId = s1.ID;
Case s2 = [SELECT Id FROM Case WHERE CaseNumber = :mycase LIMIT 1];
ID MyCaseId = s2.ID;
System.debug('Dynamic MyCaseId is: ' + MyCaseId);
UserRecordAccess s3 = [SELECT RecordId, HasReadAccess FROM UserRecordAccess
WHERE UserId = :MyUserId AND RecordId = :MyCaseId];
ID MyRecordId = s3.ID;
Boolean result = s3.HasReadAccess;
return result;
}
}