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 -)