gpt4 book ai didi

screen-scraping - 将 Salesforce VisualForce 页面视为外部小部件

转载 作者:行者123 更新时间:2023-12-03 23:32:40 26 4
gpt4 key购买 nike

我想将 Salesforce VisualForce 页面变成我公司网站的小部件。我想使用服务器端代码和服务帐户访问小部件。我将在我的网页中缓存、设置样式并输出小部件 html。我知道我可以使用服务器端代码和几个 API 调用来重现小部件,但我喜欢能够在 Salesforce 中管理小部件并让小部件可在 Salesforce 中的其他地方重用的想法。

在这种情况下,小部件将报告我们在 Salesforce 中跟踪的竞赛中的当前领导者。我计划将这种方法重用于其他“小型报告小部件”。这是一个非常有用的模式。我敢肯定有人已经优雅地解决了它。到目前为止,我的搜索都是空的。

我试图避免使用站点,因为访问我们公司网站的用户在 Salesforce 中没有用户帐户(现在我正在考虑允许匿名访问的站点)。

我的第一次尝试看起来像这样(受 SSO 到自助服务门户的启发):

var ws = new sfapi.SforceService();
var lr = ws.login(Secrets.salesforce_user_name, Secrets.salesforce_password);
string url = "https://na6.salesforce.com/apex/mywidget?sessionId=" + lr.sessionId;

我也尝试过 ?sid 和 ?csssid,但像这样的网址只会让我跳转到 Salesforce 登录页面:

https://na6.salesforce.com/apex/mywidget?sessionId=00D3000000myorg!my-session-id-from-logging-in-with-the-api-8_i2fX_9wnYdwnwatGVuX6jGjmVmnv50j78yfGF1aKHdoDFtIx_J9

我可以使用标准的屏幕抓取技术使用用户名和密码发布到标准的 Salesforce 登录表单,然后拉出/apex/mywidget 页面。但这感觉很笨拙且不受支持。

现在我正在考虑创建一个可公开访问的新站点,以公开我的小部件。至少我可以放心地筛选那个页面。

感谢任何帮助。我现在打算使用匿名网站方法。

最佳答案

将数据渲染到 Visualforce 页面中,然后进行屏幕截图看起来有点脆弱,更不用说效率低下 - 有更好的方法...

定义 Apex REST Web 服务,然后您可以轻松地从服务器端代码调用该 Web 服务,如果需要,仍然可以在 Visualforce 中呈现它 - 您可以像调用任何其他 Apex 方法一样调用 Apex REST 方法。

这是一个示例 REST Web 服务。我只是返回一个 Map<String,String>在这里,但是您可以返回任何原始类型、任何 sObject 或原始或 sObject 的 List 或 Map(只要 Map 具有 String 键) - 参见 the Apex REST Web Services docs

@RestResource(urlMapping='/MyResource/*')
global with sharing class MyRestResource {
@HttpGet
global static Map<String,String> getResource() {
Map<String,String> result = new Map<String,String>();

result.put('key1', 'value1');
result.put('key2', 'value2');

return result;
}
}

这里有一些 PHP 调用它(我假设你有一个访问 token (又名 session ID)和实例 URL):

$url = "$instance_url/services/apexrest/MyResource";
$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Authorization: OAuth $access_token",
"Content-type: application/json"));

$json_response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ( $status != 200 ) {
die("Error: call to URL $url failed with status $status, ".
"response $json_response\n");
}

$response = json_decode($json_response, true);

echo "The service says ".$response['key1'].' '.$response['key2']."\n";

curl_close($curl);

如果你想显示相同的数据,这里有一个 Visualforce 页面

<apex:page controller="TestRestController">
<p>Controller says {!result}</p>
</apex:page>

页面 Controller :

public class TestRestController {
public String getResult() {
Map<String, String> result = MyRestResource.getResource();

return result.get('key1') + ' ' + result.get('key2');
}
}

关于screen-scraping - 将 Salesforce VisualForce 页面视为外部小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com