Obtener datos de un servicio REST externo y enviarlos desde él

Completado

El siguiente ejemplo combina todas las clases y funciones HTTP diferentes para recuperar datos de un servicio externo. El servicio externo devuelve un documento JSON con información del usuario. Puede usar el sitio web jsonplaceholder.typicode.com para probar los servicios REST. Además, puede solicitar, agregar y editar datos de ese sitio web porque es un espacio libre para que practique.

vprocedure GetUserInformation(UserNumber: Integer)
var
    Client: HttpClient;
    ResponseMessage: HttpResponseMessage;
    ResponseString: Text;
begin
    if not Client.Get(StrSubstNo('https://jsonplaceholder.typicode.com/users/%1', 
                      UserNumber), ResponseMessage) then
        Error('The call to the web service failed.');

    if not ResponseMessage.IsSuccessStatusCode() then
        Error('The web service returned an error message:\\' +
                'Status code: ' + Format(ResponseMessage.HttpStatusCode()) +
                'Description: ' + ResponseMessage.ReasonPhrase());

    ResponseMessage.Content().ReadAs(ResponseString);
end;

La variable ResponseString contendrá el documento JSON como una cadena. Puede usar las clases JSON integradas para analizar la cadena y trabajar con el contenido. También puede usar la clase HttpClient clase para cargar datos a un servicio REST. El siguiente código de ejemplo envía datos y una imagen a un servicio externo. Este servicio puede, por ejemplo, realizar procesamiento de imágenes. En este ejemplo, se recupera la primera imagen de un elemento determinado. El campo Imagen en Elementos es un campo MediaSet. Por lo tanto, puede contener varias imágenes. Esas imágenes se almacenan en la tabla Medios de suscriptor.

procedure ChangeToBlackAndWhitePicture(Item: Record Item)
var
    TenantMedia: Record "Tenant Media";
    Client: HttpClient;
    Content: HttpContent;
    ResponseMessage: HttpResponseMessage;
    Stream: InStream;
    Url: Text;
begin
    if not (Item.Picture.Count() > 0) then
        exit;

    if not TenantMedia.Get(Item.Picture.Item(1)) then
        exit;

    TenantMedia.CalcFields(Content);

    if not TenantMedia.Content.HasValue() then
        exit;

    TenantMedia.Content.CreateInStream(Stream);

    Content.WriteFrom(Stream);
    Url := 'https://mywebsite.com/ImageConverter';
    if not client.Post(Url, Content, ResponseMessage) then
        exit;

    if not ResponseMessage.IsSuccessStatusCode() then
        exit;

    ResponseMessage.Content().ReadAs(Stream);
    Clear(Item.Picture);
    Item.Picture.ImportStream(Stream, 'New Image');
    Item.Modify(true);
end;