Как отправить запрос на получение в AL - PullRequest
1 голос
/ 13 июля 2020

У меня сейчас 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 ]

2 голосов
/ 13 июля 2020

Если проблема, кажется, в 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);
0 голосов
/ 14 июля 2020

Хорошо, проблема решена. Вместо типа контента я ввел 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...