2012-05-25 85 views
1

的讀取權限如何查詢給定用戶具有讀取權限的所有帳戶? 我嘗試以下,但返回的錯誤「半連接子選擇只能查詢ID字段,不能使用:‘的recordId’」SalesForce:查詢對象用戶有

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 
          ) 
        ]; 

的代碼被執行時,作爲計劃的批處理作業的一部分運行的系統所以使用「與分享」不適用。

感謝

回答

2

Salesforce的documentation說的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中的記錄數很多,這可能會超過管理員限制。

+0

謝謝你的建議。但是,我不打算接受它作爲答案,因爲我試圖用單個查詢來做到這一點 – Jon

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都有自己的'Share'對象,表示對它的可見性,除非它以某種方式退化(即它是主細節中的細節)。