Obtener datos de un servicio REST externo y enviarlos desde él
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;
¿Necesita ayuda? Consulta nuestra guía de solución de problemas o notifica un problema para enviar comentarios específicos.