【问题标题】:How to query remote site settings from Apex如何从 Apex 查询远程站点设置
【发布时间】:2015-09-17 22:19:24
【问题描述】:

我有一个将来的方法,可以将callout 转换为.net 应用程序。在顶部附近我有硬编码声明:

private static final String SERVICE_URL = 'https://outside.site.com';

我稍后在 setEndpoint 调用 HttpRequest 对象时使用它。

此字符串出现在远程站点设置中 - 它必须如此才能工作。沙盒和生产中的字符串值不同,但远程站点设置对象的名称相同 - 'Broker'。我想消除这个硬编码字符串并使用名称“代理”来查找远程站点设置对象并将端点设置为其 URL - 在沙盒和生产之间移动时要少担心一件事。

虽然我看到了很多关于如何使用元数据或工具创建远程站点设置的示例,但我没有找到关于如何查询其中一个的示例,只有几十个其他人在询问如何做到这一点。

消除这种硬代码的最好、最简单的方法是什么?

【问题讨论】:

    标签: .net salesforce metadata apex


    【解决方案1】:

    远程站点是一个元数据对象,因此您无法通过 SOQL/APEX 直接访问它们。这是一项安全功能,可确保调用不会触及不安全的网站,即在不受您控制的情况下将您的安全数据发送到您的组织之外。

    如果这是一个数据对象并且可以通过 SOQL/Apex 进行管理,那么某人可能会恶意插入一行,然后将您的所有数据从 SF 传递到他们的站点。

    我的建议是添加两个基本域,例如example.com,然后使用自定义对象或类似对象来管理完整的网址。

    【讨论】:

    • 网上有关于如何使用元数据 api 从 Apex 或 javascript 创建远程站点设置的示例。如果可以做到这一点,正如您所说的那样危险,那么应该可以阅读现有的,对吗?我查看了一个自定义对象以及如何将其强制为单例。优点:还支持查找时的默认选择。缺点:必须手动同步。将两个名称都放在远程站点设置中 - 仍然有硬代码知道要使用哪个,并使生产可以发送消息进行测试,反之亦然。
    • 但是,您的建议确实给了我另一个想法:是否可以从 Apex 获取当前站点 URL 或某种“沙盒”标志?
    • 这是一个检测SF的版本以及是否是沙盒的类。 michaelforce.org/recipeView?id=a0Ga000000Ekp65EAB 不幸的是,它似乎几乎无法测试,或者至少不可能获得 75% 的覆盖率。不过,如果没有其他内容出现,它仍然是一个选项。
    • 是的,这实际上就是我们在代码库上的做法,我们使用上面的 isSandbox 实用程序并根据它选择我们的端点。
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多