2017-12-15 23 views
0

オブジェクト "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;   
    } 
} 

答えて

0

あなたはWHERE句でSOQLクエリをしている:コードを参照してください。あなたはUserAccessRecord.RecordIdタイプStringである見ることができるように

global class UserRecordAccess extends SObject 
{ 
    global Boolean HasAllAccess; 
    global Boolean HasDeleteAccess; 
    global Boolean HasEditAccess; 
    global Boolean HasReadAccess; 
    global Boolean HasTransferAccess; 
    global String MaxAccessLevel; 
    global String RecordId; 
    global SObjectType SObjectType; 
    global User User; 
    global Id UserId; 
    global APTTaskTemplate__c UserRecordAccess; 

    global UserRecordAccess() 
    { 
    } 
} 

:ここ

はUserAccessRecordのsObjectがどのように見えるかです。

私は信じる2つのSOQLクエリでこれを行うことができるはずです。最初のSOQLクエリはケースIDを取得し、それをリストタイプに変換します。 2番目はそのリストを使用します。