<адрес веб-сервиса>/CustomRequestHandler?mon=<Моникёр модуля>&method=<Наименование метода/функции>
Операция CustomRequestHandler предназначена для выполнения Fore-функции с помощью POST-запроса.
В параметрах операции передаётся моникёр модуля и наименование выполняемого Fore-метода/функции. Моникёр указывается в следующем формате: <моникёр открытого соединения>!<ключ модуля>. В методе/функции должен содержаться строковый параметр, через который в Fore будет передан отправляемый POST-запрос. Необходимым условием для успешного выполнения является отправка заголовка do_rest_through_post со значением 1. Дальнейшая обработка POST-запроса должна осуществляться в прикладном коде на Fore. Результат выполнения функции будет возвращён в качестве ответа за POST-запрос.
Ниже приведён пример кода html-страницы, которая используется для выполнения Fore-функции с помощью операции CustomRequestHandler. Ключ модуля и наименование функции определены в переменных objKey и methodName соответственно. Простой код функции, с помощью которой можно получить отправляемый запрос:
Function TestReceive(Value: String): String;
Begin
Return "Сформированный запрос: " + Value;
End Function TestReceive;
При выполнении кода в тексте html-страницы будут отображены отправляемые запросы и результаты их выполнения: ответ, полученный от BI-сервера, или код ошибки.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Использование операции CustomRequestHandler</title>
</head>
<body>
<script type="text/javascript">
var svc = "http://localhost:9090/axis2/services/PP.SOM.Som";
var objKey = 390432;
var methodName = "TestReceive";
// Выполнение CustomRequestHandler
CustomRequestHandler();
// Подключение к репозиторию и отправка запроса на выполнение операции CustomRequestHandler
function CustomRequestHandler() {
OpenMetabase = { "OpenMetabase": { "tDef": { "id": "Warehouse" }, "tCreds": { "user": { "id": "User" }, "pass": "Password" } } }
// Подключение к репозиторию
moniker = PostRequest(svc, OpenMetabase).OpenMetabaseResult.id;
// Выполнение Fore-функции на сервере
PostRequest(svc + "/CustomRequestHandler?mon=" + moniker +"!"+ objKey + "&method=" + methodName, "Test Request Body", true);
// Закрытие соединения с репозиторием
CloseMetabase = { "CloseMetabase": { "tMb": {"id": moniker} } }
PostRequest(svc, CloseMetabase)
}
// Отправка запросов
function PostRequest(url, request, custom_handler = false) {
document.writeln("<hr>Запрос:<p>" + JSON.stringify(request) + "<p>");
<!--Отправка запроса-->
var xhr = new XMLHttpRequest();
if (custom_handler)
{
xhr.open("POST", url, false);
xhr.setRequestHeader('do_rest_through_post', 1);
}
else
xhr.open("POST", url, false);
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
xhr.send(JSON.stringify(request));
if (xhr.status == 200) {
document.writeln("Ответ:<p>" + xhr.responseText + "<p>");
return eval("(" + xhr.responseText + ")");
} else {
document.writeln("Ошибка выполнения запроса:<p>" + xhr.responseText + "<p>");
return { "error" : true };
}
}
</script>
</body>
</html>
См. также: