Page 1 sur 1

API Java et passage d'un objet en paramètre

Posté : mar. 14 mars 2023, 16:11:50
par Karine
Bonjour à tous,
depuis une APi, je dois passer un objet java en paramètre à un pgm As400. Je ne sais pas trop comment m'y prendre pour le découper? et le convertir
pourriez-vous m'aider ?
merci

Voici l'objet Java:
{
"contact": {
"codeClient": 800105,
"idContactClient": 27,
"nom": "DUPONT ",
"prenom": "FRANCK "
},
"entete": {
"codeVendeur": 11,
"nomFacturation": "JO ",
"rueFacturation": "RUE DE LA PAIX ",
"codePostalFacturation": "75000",
"villeFacturation": "PARIS "
},
"lignes": [
{
"codeArticle": 4031010,
"designationArticle": "ETAGERE 60X240 ",
"quantite": 10,
"prixVente": 81.4,
"montantLigne": 814
},
{
"codeArticle": 9000038,
"designationArticle": "FRAIS DE LIVRAISON ",
"quantite": 1,
"prixVente": 49,
"montantLigne": 49
}
],
"toEmail": true,
"email": "test@test.fr"
}

Re: API Java et passage d'un objet en paramètre

Posté : jeu. 16 mars 2023, 08:34:28
par SebastienB
Bonjour,

Personnellement, je partirais sur une DS comme celle-là (à adapter):

Code : Tout sélectionner

dcl-ds contactDS qualified template;
  codeClient zoned(6) inz(0);
  idContactClient zoned(2) inz(0);
  nom char(50) inz('');
  prenom char(50) inz('');
end-ds;

dcl-ds enteteDS qualified template;
  codeVendeur zoned(2) inz(0);
  nomFacturation char(50) inz('');
  rueFacturation char(50) inz('');
  codePostalFacturation char(5) inz('');
  villeFacturation char(50) inz('');
end-ds;

dcl-ds ligneDS qualified  template;
  codeArticle zoned(10) inz(0);
  designationArticle char(50) inz(0);
  quantite zoned(50) inz(0);
  prixVente zoned(9:2) inz(0);
  montantLigne zoned(9:2) inz(0);
end-ds;

dcl-ds payloadDS qualified template;
  toEmail char(5) inz('');
  email char(100) inz('');
  dcl-ds data;
    contact likeds(contactDS);
    entete likeds(enteteDS);
    lignes likeds(ligneDS) dim(999);
  end-ds;
end-ds;

ensuite je créé une procédure :
dcl-proc receptionPayload export;
  dcl-pi receptionPayload;
    payload likeds(payloadDS);
    httpStatus  int(10);
  end-pi; 
  
N.B. :
J'ai l'habitude de créer des DS distinctes pour des raisons de ré-utilisabilité dans le programme. Je peux ainsi instancier qu'une partie.

Re: API Java et passage d'un objet en paramètre

Posté : jeu. 16 mars 2023, 14:03:14
par Karine
Bonjour SebastienB,

je vous remercie de votre réponse.
Du Côté de l'api, je recherche comment convertir/passer l'objet en paramètre.
J'ai fait plusieurs essais avec des get notamment mais ne trouve pas la bonne syntaxe .
Le nom de l' objet CommandeClient.
parametersList[1] = new ProgramParameter(nametext1.toBytes(CommandeClient....));
Auriez-vous la bonne syntaxe ?

merci

Re: API Java et passage d'un objet en paramètre

Posté : jeu. 16 mars 2023, 14:28:27
par SebastienB
Comment sont déclarés les paramètres en entrée du programme RPG ?
S'il s'agit d'une DS, côté Java, il est nécessaire de créer un objet reprenant la structure de la DS

Ex. avec la DS contact

Code : Tout sélectionner

          // Paramètre de la DS d'entrée
          AS400DataType[] dataTypeDsEntree = {
            new AS400ZonedDecimal(9, 0), // codeClient
            new AS400ZonedDecimal(2, 0), // idContactClient
            new AS400Text(50),  // nom
            new AS400Text(50),  // prenom
          };
          AS400Structure structureDsEntree = new AS400Structure(dataTypeDsEntree);

          // Création et affectation des valeurs
          Object[] inputDataObjDsEntree = {
            BigDecimal.valueOf(codeClient),
            BigDecimal.valueOf(idContactClient),
            nom,
            prenom
          };
Puis affecter cet objet aux paramètres avant appel du programme.

Code : Tout sélectionner

          listeParametres = new ProgramParameter[1]; // paramètres (1 input)
          // Affectation des paramètres
          listeParametres[0] = new ProgramParameter(structureDsEntree.toBytes(inputDataObjDsEntree));

Re: API Java et passage d'un objet en paramètre

Posté : jeu. 16 mars 2023, 14:36:56
par Karine
je vais essayer comme cela

merci beaucoup -)

Re: API Java et passage d'un objet en paramètre

Posté : lun. 07 août 2023, 09:04:58
par Isabeau
Bien sûr, voici comment vous pourriez découper et convertir l'objet Java pour le passer en paramètre à un programme As400 :

Découper l'objet Java en ses différentes parties (contact, entete, lignes, toEmail, email) afin de les traiter séparément.

Pour chaque partie, vous devez convertir les données au format requis par le programme As400. Cela dépend du format attendu par le programme, donc je vais supposer quelques conversions :

Pour "contact", vous pouvez extraire les champs "codeClient", "idContactClient", "nom" et "prenom".

Pour "entete", vous pouvez extraire les champs "codeVendeur", "nomFacturation", "rueFacturation", "codePostalFacturation" et "villeFacturation".

Pour "lignes", vous devez traiter chaque élément de la liste séparément et extraire les champs "codeArticle", "designationArticle", "quantite", "prixVente" et "montantLigne".

Pour "toEmail" et "email", vous pouvez simplement les récupérer tels quels.

Ensuite, vous devrez convertir les données dans le format requis par le programme As400, par exemple, en utilisant des chaînes de caractères ou des formats spécifiques pour les nombres.

N'hésitez pas à fournir plus de détails sur le format attendu par le programme As400 si vous avez besoin d'une aide plus spécifique.

Re: API Java et passage d'un objet en paramètre

Posté : mar. 08 août 2023, 08:59:56
par Hurri
Bonjour,

Personnellement je trouve que çà ressemble très fortement à un JSON.
Donc je créerai mes DS correspondantes et ensuite j'utiliserai Data-Into pour remplit ces DS.