我在salesforce中创建了一个包,该包将使用用户的电子邮件ID发出http callout请求,以获取该电子邮件的数据并将数据添加到某个自定义对象。但是当我尝试使用UserInfo.getUserEmail()
作为请求参数但是它使用noreply@salesforce.com
发出请求时。当我在开发帐户上运行它时,它确实有效。我也尝试过使用
1.String userName = UserInfo.getUserName();
2.User activeUser = [Select Email From User where Username = : userName limit 1];
3.String userEmail = activeUser.Email;
但是第2行给了我一个错误List has no rows for assignment to SObject
这是我的第一个salesforce包,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
这就是问题所在。丹尼尔回答得很好。 对于遇到相同类似问题的人来说,这是因为预定作业在其服务器上作为“幻像”进程运行。因此,在使用installhandler或创建计划时,我们必须为其提供installedid。否则它不会对用户有任何了解。以某种方式保存installedid!
答案 1 :(得分:0)
List has no rows for assignment to SObject
找不到行时返回。这不会解决问题,但最佳做法是将其分配到像
这样的列表中List<User> activeUsers = [Select Email From User where Username = : userName];
if(activeUsers.size() > 0)
User activeUser = activeUsers[0];
http://wiki.developerforce.com/page/Apex_Code_Best_Practices
要解决您的问题,您运行查询的两次之间的配置文件可能会因分配的权限不同而不同。如果您未设置对用户对象的读取权限,则会出现此类错误。