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

configuration Apache, Zend et PHP , Web services
Répondre
Karine
Messages : 14
Enregistré le : jeu. 21 janv. 2021, 14:43:11

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

Message 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"
}

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

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

Message 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.

Karine
Messages : 14
Enregistré le : jeu. 21 janv. 2021, 14:43:11

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

Message 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

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

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

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

Karine
Messages : 14
Enregistré le : jeu. 21 janv. 2021, 14:43:11

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

Message par Karine »

je vais essayer comme cela

merci beaucoup -)

Isabeau
Messages : 1
Enregistré le : lun. 07 août 2023, 05:33:25

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

Message 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.
Tous les détails à savoir sur pdfsmart

Hurri
Messages : 38
Enregistré le : lun. 02 nov. 2020, 16:04:59

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

Message 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.

Répondre