jmr*_*ian 14 salesforce controllers visualforce apex-code
在visualforce页面中,我需要检索组织的salesforce实例的URL,而不是视觉强制URL.
例如,我需要https://cs1.salesforce.com而不是https://c.cs1.visual.force.com
这是我到目前为止所尝试的以及我得到的结果:
从VF页面访问Site全局变量:
<apex:outputText value="{!$Site.Domain}" /> 回报 null
旁注:一切$Site.xxx似乎都回归了null.
来自Apex控制器:
Run Code Online (Sandbox Code Playgroud)public String getSfInstance() { return ApexPages.currentPage().getHeaders().get('Host'); }
和
Run Code Online (Sandbox Code Playgroud)public String getSfInstance() { return URL.getSalesforceBaseUrl().toExternalForm(); }
返回c.cs1.visual.force.com和https://c.cs1.visual.force.com分别.
问题:如何检索我想要的内容:https://cs1.salesforce.com?
小智 11
这是我在Apex Trigger中使用的内容
System.URL.getSalesforceBaseUrl().getHost().remove('-api' );
Run Code Online (Sandbox Code Playgroud)
这给了我正确的URL
这是一个已知问题,URL.getSalesforceBaseUrl()应该提供此信息,但它没有。然而实际上,这对功能的影响非常有限。
它们的实例域和顶级域是可以互换的,因为请求不属于一个域的 URL 会被重定向到另一个域。
例如,如果您从 cs1.salesforce.com 寻找 /apex/myPage,您将被重定向到 c.cs1...反之亦然,从 apex 域请求 /ID 将使您重定向到实例域(除非详细操作已被覆盖) )
如果这对您没有帮助,则有一种解决方法,尽管非常难看:) 创建一个自定义对象来存储基本 url 并在插入/更新触发器之前创建,该触发器会将 baseURL 字段设置为URL.getSalesforceBaseUrl().toExternalForm()。显然,触发器是平台上唯一可以发挥作用的地方(除了执行匿名,这没有多大用处)。设置应用程序时,将某些内容插入到该表中,然后使用 SOQL 检索基本 url。
| 归档时间: |
|
| 查看次数: |
36788 次 |
| 最近记录: |