2

特定のユーザーが読み取り権限を持つすべてのアカウントを照会するにはどうすればよいですか? 次のことを試しましたが、「半結合サブ選択は id フィールドのみをクエリできます。使用できません: 'RecordId'」というエラーが返されました。

User u = new User();    
Account[] account = [SELECT Name FROM Account a
                            WHERE Id IN
                            (
                                SELECT RecordId
                                FROM UserRecordAccess
                                WHERE RecordId = :a.Id
                                AND UserId = :u
                                AND HasReadAccess = true
                            )
                    ];

コードは、システムとして実行されるスケジュールされたバッチ ジョブの一部として実行されているため、「共有あり」の使用は適用されません。

ありがとう

4

2 に答える 2

2

Salesforce のドキュメントによると、RecordID は奇妙に見えるピックリスト フィールドです。サブクエリで機能しない理由を説明するピックリスト フィールドである場合。

最初に一連の RecordID を作成してから、これを使用して Account クエリをフィルター処理することができます。

Set<ID> sRecordIDs = [SELECT RecordID FROM UserRecordAccess WHERE UserId = :u AND HasReadAccess = True];

Account[] accs =[SELECT ID,Name FROM Account WHERE Id in :sRecordIDs];

UserRecordAccess のレコード数が多い場合、これはガバナーの制限を超える可能性があります。

于 2012-05-26T16:41:59.770 に答える
0

アカウントに対してのみこれを実行したい場合は、次を試してください。

User u = new User();
list<Account> accs = [select Id, Name from Account where Id in (select AccountId from AccountShare where UserOrGroupId = :u.Id) or OwnerId = :u.Id];

これにより、ユーザーがアクセスできるか所有するすべてのアカウント レコードが得られます。一般に、各 sObject には、それに対する可視性を表す独自の「共有」sObject があります。

于 2012-06-01T14:07:33.500 に答える