En aquest tema, explorarem com el llenguatge RPG pot interactuar amb altres llenguatges de programació. Aquesta capacitat és crucial per integrar aplicacions RPG amb sistemes moderns i tecnologies diverses. Aprendrem a cridar funcions externes, a utilitzar APIs i a gestionar dades entre RPG i altres llenguatges.

Objectius d'Aprenentatge

  • Comprendre els conceptes bàsics d'interfície entre RPG i altres llenguatges.
  • Aprendre a cridar funcions externes des de RPG.
  • Gestionar dades entre RPG i altres llenguatges.
  • Utilitzar APIs per a la integració de sistemes.

Conceptes Clau

  1. Cridar Funcions Externes

RPG pot cridar funcions escrites en altres llenguatges com C, Java, o Python. Això es fa mitjançant l'ús de procediments externs.

Exemple de Crida a una Funció en C

// C Code: myfunction.c
#include <stdio.h>

void myfunction() {
    printf("Hello from C!\n");
}
// RPG Code: callc.rpgle
D myfunction      PR                  EXTPROC('myfunction')

/free
    myfunction();
    *inlr = *on;
/end-free

Explicació:

  • EXTPROC('myfunction') indica que myfunction és una funció externa definida en un altre llenguatge.
  • La funció myfunction és cridada des de RPG com si fos una funció nativa.

  1. Utilitzar APIs

Les APIs permeten que RPG interactuï amb serveis externs, com ara serveis web o biblioteques de tercers.

Exemple d'Ús d'una API REST amb HTTPAPI

// RPG Code: callapi.rpgle
D http_url_get    PR            10I 0 EXTPROC('http_url_get')
D   url                      65535A   OPTIONS(*VARSIZE)
D   response                 65535A   OPTIONS(*VARSIZE)

D url             S          65535A   VARYING
D response        S          65535A   VARYING

/free
    url = 'http://api.example.com/data';
    http_url_get(url: response);
    dsply response;
    *inlr = *on;
/end-free

Explicació:

  • http_url_get és una funció externa que fa una petició GET a una URL.
  • url conté l'adreça de l'API.
  • response emmagatzema la resposta de l'API.

  1. Gestionar Dades entre RPG i Altres Llenguatges

Quan es treballa amb dades entre RPG i altres llenguatges, és important assegurar-se que els formats de dades siguin compatibles.

Exemple de Gestió de Dades amb JSON

// RPG Code: jsonhandling.rpgle
D json_parse      PR            10I 0 EXTPROC('json_parse')
D   jsonString                65535A   OPTIONS(*VARSIZE)
D   jsonObject                65535A   OPTIONS(*VARSIZE)

D jsonString      S          65535A   VARYING
D jsonObject      S          65535A   VARYING

/free
    jsonString = '{"name": "John", "age": 30}';
    json_parse(jsonString: jsonObject);
    dsply jsonObject;
    *inlr = *on;
/end-free

Explicació:

  • json_parse és una funció externa que converteix una cadena JSON en un objecte RPG.
  • jsonString conté les dades JSON.
  • jsonObject emmagatzema l'objecte resultant.

Exercicis Pràctics

Exercici 1: Cridar una Funció en C

  1. Escriu una funció en C que retorni la suma de dos enters.
  2. Crida aquesta funció des d'un programa RPG i mostra el resultat.

Exercici 2: Utilitzar una API REST

  1. Utilitza una API pública per obtenir dades meteorològiques.
  2. Fes una petició GET des d'un programa RPG i mostra la resposta.

Exercici 3: Gestionar Dades JSON

  1. Escriu un programa RPG que converteixi una cadena JSON en un objecte RPG.
  2. Mostra els valors dels camps de l'objecte.

Solucions

Solució a l'Exercici 1

// C Code: sum.c
int sum(int a, int b) {
    return a + b;
}
// RPG Code: callsum.rpgle
D sum             PR            10I 0 EXTPROC('sum')
D   a                           10I 0 VALUE
D   b                           10I 0 VALUE

/free
    dsply sum(5: 3);
    *inlr = *on;
/end-free

Solució a l'Exercici 2

// RPG Code: callweatherapi.rpgle
D http_url_get    PR            10I 0 EXTPROC('http_url_get')
D   url                      65535A   OPTIONS(*VARSIZE)
D   response                 65535A   OPTIONS(*VARSIZE)

D url             S          65535A   VARYING
D response        S          65535A   VARYING

/free
    url = 'http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London';
    http_url_get(url: response);
    dsply response;
    *inlr = *on;
/end-free

Solució a l'Exercici 3

// RPG Code: parsejson.rpgle
D json_parse      PR            10I 0 EXTPROC('json_parse')
D   jsonString                65535A   OPTIONS(*VARSIZE)
D   jsonObject                65535A   OPTIONS(*VARSIZE)

D jsonString      S          65535A   VARYING
D jsonObject      S          65535A   VARYING

/free
    jsonString = '{"name": "John", "age": 30}';
    json_parse(jsonString: jsonObject);
    dsply jsonObject;
    *inlr = *on;
/end-free

Resum

En aquesta secció, hem après com RPG pot interactuar amb altres llenguatges de programació. Hem vist com cridar funcions externes, utilitzar APIs i gestionar dades entre RPG i altres llenguatges. Aquestes habilitats són essencials per integrar RPG amb sistemes moderns i ampliar les seves capacitats.

© Copyright 2024. Tots els drets reservats