1

首先,提前感谢您的帮助。我对 apex 比较陌生,但对编程不熟悉。因此,虽然我会很高兴有人立即给出答案,但我同样对如何调试它以找到答案感兴趣。那么,对于这个问题...

我有一个控制器,它基于来自 VF 页面的查询字符串值构建 SOQL 语句并返回联系人结果集。然后以 JSON 格式返回结果集。当我在 force.com 内部运行它时,作为对控制器的测试,它可以正常工作......

PageReference pr = new PageReference('/');
Test.setCurrentPageReference(pr);
MyController con = new MyController ();
pr.getParameters().put('action', 'search');
System.debug(con.JsonString);

这返回

{"SearchResults":[***ARRAY OF MANY CONTACT RECORDS***],"PaginationInfo":
{"RecordsPerPage":10,"TotalRecords":5,"TotalPages":1,"PageNumber":1}}

如果我在 force.com 之外查看此内容,请通过指向 VF 页面的链接,如下所示: https ://mysite.secure.force.com/requestpage?action=search

它还正确转储了 json。访问自定义字段时遇到问题。如果我在添加字段之前运行相同的测试,则 force.com 中的一切仍然正常。

PageReference pr = new PageReference('/');
Test.setCurrentPageReference(pr);
MyController con = new MyController ();
pr.getParameters().put('action', 'search');
pr.getParameters().put('specialty', 'a0xH0000001u5YtIAI');
System.debug(con.JsonString);

在针对控制器的测试中运行上述内容会吐出一个带有多个联系人记录的 JSON 对象。但是,当我执行添加参数的外部调用https://mysite.secure.force.com/requestpage?action=search&specialty=a0xH0000001u5YtIAI时,我得到一个空的结果集。

{"SearchResults":[],"PaginationInfo":
{"RecordsPerPage":10,"TotalRecords":null,"TotalPages":null,"PageNumber":1}}

所以,我的第一个想法是该字段存在某种身份验证问题,因为我在控制器中的测试实际上确实返回了一个结果集。基本上,我以管理员身份登录的控制器运行测试,工作正常。以访客用户身份从站点外部访问的 VF 页面不起作用,但仅适用于该字段。如果我执行上面的第一个请求,我没有按字段过滤,它确实返回联系人对象。此外,返回 json 对象的事实使我相信代码中没有发生异常。昨晚我花了几个小时试图弄清楚字段级别的身份验证。根据一些帖子,我访问了 force.com 中的站点,访问了公共访问设置、自定义字段级安全性,并将该部分编辑为我认为应该正确的部分。那里的所有字段都被检查为可见。不确定“只读”如何在那里工作。我试过包括一张图片,我的水平不允许我买。

我还尝试研究如何看到错误日志有效。我打开了开发者控制台并尝试设置调试日志,但我似乎无法弄清楚如何使用这些工具来调试我的情况。那么,有人可以指出我正确的方向吗?最后一点,虽然我觉得这可能是一个身份验证问题,但也许我遗漏了一些东西,这是一个代码问题。很难说,因为当我运行测试时它没有失败。再次,提前感谢你们的帮助。

4

0 回答 0