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.