Как отправить запрос на получение в AL
У меня сейчас 2 проблемы. Я пытаюсь отправить GetRequest на свой веб-сервис. Это делается с помощью метода SendNotify (phonenumber: text; template: text). Когда я вызываю метод через действие, я получаю следующее сообщение об ошибке: Неправильное использование имени заголовка. Убедитесь, что заголовки запроса используются с HttpRequestMessage, заголовки ответов с HttpResponseMessage и заголовки содержимого с объектами HttpContent. Когда я отладки, программа останавливается на следующей строке: ContentHeaders.Add("Авторизация", "Знаменосец eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2dsadaXdrZUZTTWpNcnlBc2s1IiwiZXhwIjoxNTk1NDA3NDgzLCJpYXQiOjE1OTQzNjgyNTR9.1tAsf-x2FEvhDMyB4dsvgVKfZMLwAHcr_OLRA8RBeiY"); Маркер в настоящее время жестко закодирован, но его следует удалить из списка настройки службы. Кто-нибудь может сказать мне, что я делаю не так?
codeunit 2020803 "Notify SMS Interface" implements SendNotifyInterface
{
procedure CheckInputData(NotifyEntry: Record "Notify Entry")
begin
NotifyEntry.Get();
end;
procedure SendNotify(phonenumber: text; template: text)
var
client: HttpClient;
RequestMessage: HttpRequestMessage;
RequestHeaders: HttpHeaders;
ResponseMessage: HttpResponseMessage;
NotifyServiceSetup: Record "Notify Service Setup";
JsonText: Text;
IsSuccessful: Boolean;
SendSMSURL: text;
begin
NotifyServiceSetup.Get();
SendSMSURL := NotifyServiceSetup."Service URL" + '/contacts/contacts/sms/' + 'sagos/' +
phonenumber + '/' + template;
JsonText := BuildJsonText();
InitHttpRequestContent(RequestMessage, JsonText);
InitHttpRequestMessage(RequestMessage, SendSMSURL, 'GET');
IsSuccessful := client.Send(RequestMessage, ResponseMessage);
if not IsSuccessful then
Error('Authentication failed!');
if not ResponseMessage.IsSuccessStatusCode then begin
Error('request was not successfully');
exit;
end;
end;
local procedure InitHttpRequestContent(var RequestMessage: HttpRequestMessage; JsonText: Text)
var
ContentHeaders: HttpHeaders;
NotifyServiceSetup: Record "Notify Service Setup WMR";
bearerToken: Text[250];
token: Text[250];
begin
token := NotifyServiceSetup.GetToken(NotifyServiceSetup."Authentication Token Key");
bearerToken := 'Bearer ' + token;
NotifyServiceSetup.Get();
RequestMessage.Content().Clear();
RequestMessage.Content().WriteFrom(JsonText);
RequestMessage.Content().GetHeaders(ContentHeaders);
ContentHeaders.Clear();
ContentHeaders.Add('Content-Type', 'application/json');
ContentHeaders.Add('Authorization', 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2dsadaXdrZUZTTWpNcnlBc2s1IiwiZXhwIjoxNTk1NDA3NDgzLCJpYXQiOjE1OTQzNjgyNTR9.1tAsf-x2FEvhDMyB4dsvgVKfZMLwAHcr_OLRA8RBeiY');
end;
local procedure InitHttpRequestMessage(var RequestMessage: HttpRequestMessage; ServiceURL: Text; Method: Text)
var
RequestHeaders: HttpHeaders;
NotifyServiceSetup: Record "Notify Service Setup WMR";
token: Text[250];
bearerToken: Text[250];
begin
token := NotifyServiceSetup.GetToken(NotifyServiceSetup."Authentication Token Key");
bearerToken := 'Bearer ' + token;
RequestMessage.GetHeaders(RequestHeaders);
RequestHeaders.Clear();
RequestHeaders.Add('Accept', 'application/json');
RequestHeaders.Add('Authorization', 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2dXdrZUZTTWpNcnlBc2s1IiwiZXhwIjoxNTk1NDA3NDgzLCJpYXQiOjE1OTQzNjgyNTR9.1tAsf-x2FEvhDMyB4dsvgVKfZMLwAHcr_OLRA8RBeiY');
RequestMessage.Method(Method);
RequestMessage.SetRequestUri(ServiceURL);
end;
local procedure BuildJsonText() ContentText: Text
var
ContentJson: JsonObject;
begin
ContentJson.WriteTo(ContentText);
end;
}
Вторая проблема, с которой я столкнулся, - это проверка данных в методе CheckInputData (NotifyEntry: Record "Notify Entry"). В записи для уведомлений есть поле под названием "Контактный номер", в котором содержится вся информация о клиенте. Я хочу попросить в методе предоставить номер телефона и приветствие. К сожалению, я не знаю, как я вышел из контакта №. Могу запросить данные. Может кто-нибудь подскажет?
ОБНОВЛЕНИЕ 1
codeunit 2020808 Test
{
procedure sendNotify(phonenumber: text; template: text)
var
NotifyServiceSetup: Record "Notify Service Setup WMR";
IsSuccessful: Boolean;
client: HttpClient;
content: HttpContent;
contentHeaders: HttpHeaders;
request: HttpRequestMessage;
response: HttpResponseMessage;
txtResponse: InStream;
Url: Text;
token: Text[250];
begin
NotifyServiceSetup.Get();
token := NotifyServiceSetup.GetToken(NotifyServiceSetup."Authentication Token Key");
content.GetHeaders(contentHeaders);
contentHeaders.Clear();
contentHeaders.Add('Content-Type', 'application/json');
request.GetHeaders(contentHeaders);
contentHeaders.Add('Authorization', StrSubstNo('Bearer %1', token));
request.Content := content;
Url := NotifyServiceSetup."Service URL" + '/contacts/contacts/sms/' + 'Tegos/' + phonenumber + '/' + template;
request.SetRequestUri(Url);
request.Method := 'GET';
client.Send(request, response);
response.Content().ReadAs(txtResponse);
end;[![enter image description here][1]][1]
2 ответа
Если кажется, что проблема в contentHeader.Add()
Это случилось и со мной. Я оставляю вам этот код для справки.
procedure CheckCodeWebService(_accessToken: Text; _salesHeader: record "Sales Header")
var
jsonRequest: Text;
txtResponse: InStream;
Url: Text;
client: HttpClient;
request: HttpRequestMessage;
response: HttpResponseMessage;
contentHeaders: HttpHeaders;
content: HttpContent;
begin
jsonRequest := '{' +
'"GetPurchaseOrder": {' +
'"value": {' +
'"DataArea": {' +
'"PurchaseOrder": [' +
'{' +
'"PurchaseOrderHeader": {' +
'"ID": {' +
'"value": ""' +
'},' +
'"DocumentReference": [' +
'{' +
'"ID": {' +
'"value": " ' + _salesHeader.DealID + ' "' +
'}' +
'}' +
'],' +
'"SalesOrderReference": [' +
'{' +
'"ID": {' +
'"value": " ' + _salesHeader.SalesOrderNroCisco + ' "' +
'}' +
'}' +
'],' +
'"Description": [' +
'{' +
'"value": "yes",' +
'"typeCode": "details"' +
'}' +
']' +
'}' +
'}' +
']' +
'},' +
'"ApplicationArea": {' +
'"CreationDateTime": "datetime",' +
'"BODID": {' +
'"value": "BoDID-test",' +
'"schemeVersionID": "V1"' +
'}' +
'}' +
'}' +
'}' +
'}';
content.WriteFrom(jsonRequest);
content.GetHeaders(contentHeaders);
contentHeaders.Clear();
contentHeaders.Add('Content-Type', 'application/json');
request.GetHeaders(contentHeaders);
contentHeaders.Add('Authorization', StrSubstNo('Bearer %1', _accessToken));
contentHeaders.Add('Accept', 'application/xml');
request.Content := content;
Url := 'https://api.xxxx.com/xxxxx/ORDER/v2/sync/xxxxxxxx';
request.SetRequestUri(Url);
request.Method := 'POST';
client.Send(request, response);
response.Content().ReadAs(txtResponse);
Хорошо, проблема решена. Вместо типа контента я ввел RequestHeaders.Add ('Accept', 'application / json'). Теперь GetRequest работает.
codeunit 2020808 Test
{
procedure sendNotify(phonenumber: text; template: text)
var
NotifyServiceSetup: Record "Notify Service Setup WMR";
IsSuccessful: Boolean;
client: HttpClient;
content: HttpContent;
contentHeaders: HttpHeaders;
request: HttpRequestMessage;
response: HttpResponseMessage;
txtResponse: InStream;
Url: Text;
token: Text[250];
begin
NotifyServiceSetup.Get();
token := NotifyServiceSetup.GetToken(NotifyServiceSetup."Authentication Token Key");
content.GetHeaders(contentHeaders);
contentHeaders.Clear();
//contentHeaders.Add('Content-Type', 'application/json');
request.GetHeaders(contentHeaders);
contentHeaders.Add('Authorization', StrSubstNo('Bearer %1', token));
contentHeaders.Add('Accept', 'application/json');
//request.Content := content;
Url := NotifyServiceSetup."Service URL" + '/contacts/contacts/sms/' + 'Tegos/' + phonenumber + '/' + template;
request.SetRequestUri(Url);
request.Method := 'GET';
client.Send(request, response);
response.Content().ReadAs(txtResponse);
end;
}