0

我有一个视觉力页面,它引用了我的控制类“ESWebCaseController.cls”。

视觉力页面有一个名为“公司”的字段,该字段在 SF 站点上运行,当表单提交用于 SOQL 查询时,任何人都可以访问,例如:

List account_list = [SELECT Name FROM Account WHERE Name =:company];

当 company = Acme 时,此查询返回 0 个结果,但使用 Eclipse IDE SF Schema 完成时,此查询返回 1 个结果。在我的组织中肯定有一家名为 Acme 的公司。

当我删除查询中的 WHERE 子句时,返回 10 个帐户,即使我设置 LIMIT 100,也只返回 10 个帐户。这 10 个帐户似乎有一个共同点,那就是它们引用相同的父帐户和/或具有引用父帐户的特定字段 ID。

我想知道是否有任何东西会导致我的控制类中的上述查询被限制在查询本身之外。

以下是查询的调试日志:

20:28:32.158 (158986000)|POP_TRACE_FLAGS|[163]|01p500000009goT|ESWebCaseController|APEX_CODE,FINEST;APEX_PROFILING,FINEST;CALLOUT,FINEST;DB,FINEST;SYSTEM,FINEST;VALIDATION,FINEST;VISUALFORCE,FINEST;WORKFLOW,FINEST
20:28:32.159 (159879000)|SOQL_EXECUTE_BEGIN|[163]|Aggregations:0|select Name from Account where Name = :tmpVar1
20:28:32.159 (159893000)|LIMIT_USAGE|[163]|SOQL|1|100
20:28:32.159 (159898000)|LIMIT_USAGE|[163]|AGGS|0|300
20:28:32.177 (177286000)|SOQL_EXECUTE_END|[163]|Rows:0
20:28:32.177 (177308000)|LIMIT_USAGE|[163]|SOQL_ROWS|0|50000
20:28:32.177 (177324000)|HEAP_ALLOCATE|[163]|Bytes:4
20:28:32.177 (177337000)|HEAP_ALLOCATE|[163]|Bytes:0
20:28:32.177 (177411000)|HEAP_ALLOCATE|[163]|Bytes:4
20:28:32.177 (177441000)|VARIABLE_SCOPE_BEGIN|[163]|account_list|LIST<Account>|true|false
20:28:32.177 (177488000)|VARIABLE_ASSIGNMENT|[163]|account_list|{"serId":1,"value":[]}|0x14cace14
20:28:32.177 (177504000)|STATEMENT_EXECUTE|[165]
4

1 回答 1

0

您是否在控制器上使用共享功能,并且您是否可以从运行查询的用户那里访问帐户 Acme?

默认情况下,类具有“共享”,因此它们尊重父组织中的共享,这意味着如果访问页面的用户无权访问数据,则数据将无法用于查询。

一个快速简单的测试是获取您需要访问的记录的 ID 并登录到 salesforce,然后直接转到 url。

因此,如果记录是 a01adf20123032(这是一个虚构的 id fyi)并且您的实例是 na1,您将登录到 salesforce 并导航到https://na1.salesforce.com/a01adf20123032如果您获得的权限不足,那么该人不会有访问权。

通过 IDE,您很可能使用具有“查看所有数据”权限的系统管理员用户,因此他们将始终获得返回的所有数据。

于 2013-06-06T12:58:21.217 回答