Рендеринг данных на страницу Visualforce, а затем отрисовка экрана кажется немного ломкой, не говоря уже о неэффективности - есть лучший способ ...
Определите веб-сервис Apex REST, затем вы можете легко вызвать этот веб-сервис из кода на стороне сервера и, при необходимости, по-прежнему отображать его в Visualforce - вы можете вызвать метод REST Apex, как и любой другой метод Apex. *
Вот пример веб-службы REST. Я просто возвращаю Map<String,String>
здесь, но вы можете вернуть любой примитивный тип, любой sObject или List или Map примитивов или sObjects (если у Map есть строковые ключи) - см. веб-сервисы Apex REST документы
@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, который вызывает его (я предполагаю, что у вас есть токен доступа (или идентификатор сеанса) и 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>
Контроллер страницы:
public class TestRestController {
public String getResult() {
Map<String, String> result = MyRestResource.getResource();
return result.get('key1') + ' ' + result.get('key2');
}
}