HTTPPOSTCLOB dans un RPG

RPG (3 et 4, free), CL, SQL, etc...
Répondre
Fab_01
Messages : 2
Enregistré le : lun. 22 févr. 2016, 08:54:05

HTTPPOSTCLOB dans un RPG

Message par Fab_01 »

Bonjour,

J'essaie d'appeler un Webservice depuis un programme RPG.
L'exécution du script SQL suivant dans Isérie Navigator marche.
Je me suis basé sur des exemples (formation volubis + pause café), pas de problèmes, j'ai bien la réponse.

Code : Tout sélectionner

VALUES SYSTOOLS.HTTPPOSTCLOB('xxxxx',
 
CAST &#40;' <httpHeader>
	<header name="Content-Type" value="text/xml;charset=utf-8"/>
	<header name="application" value="XXXX"/>
	<header name="key" value="XXXX"/>
            </httpHeader>' AS CLOB&#40;1K&#41;&#41;,
 CAST &#40;' <soapenv&#58;Envelope xmlns&#58;soapenv="http&#58;//schemas.xmlsoap.org/soap/envelope/" xmlns&#58;tar="http&#58;//xxxxxxx/">
               <soapenv&#58;Header/>
               <soapenv&#58;Body>
                     <tar&#58;sendCodeCommande>
                          <numCmdTemp>TEST</numCmdTemp>
                          <numCmdFinal>ESSAI</numCmdFinal>
                          <fraisPort>12</fraisPort>
                     </tar&#58;sendCodeCommande>
               </soapenv&#58;Body>
               </soapenv&#58;Envelope>' AS CLOB&#40;10K&#41;&#41;  &#41; ;
Par contre dans mon SQLRPGLE, j'ai un code erreur 84 que je n'arrive pas à résoudre.

Code : Tout sélectionner

  wa_url = 'http&#58;//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

  str_sql = 'VALUES SYSTOOLS.HTTPPOSTCLOB&#40;''' + %trim&#40;wa_url&#41; + ''','
              + ' CAST &#40;''<httpHeader>'
              + ' <header name="Content-Type" value="text/xml;charset=utf-8"/>'
              + ' <header name="application" value="XXXXXX"/>'
              + ' <header name="key" value="XXXXXX"/>'
              + ' </httpHeader>'' AS CLOB&#40;1K&#41;&#41;,'
              + ' CAST &#40;''<soapenv&#58;Envelope xmlns&#58;soapenv='
              + ' "http&#58;//schemas.xmlsoap.org/soap/envelope/"'
              + ' xmlns&#58;tar="http&#58;//xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/">'
              + ' <soapenv&#58;Header/>'
              + ' <soapenv&#58;Body>'
              + ' <tar&#58;sendCodeCommande>'
              + ' <numCmdTemp>'+%trim&#40;pe_CmdTarifeo&#41;+'</numCmdTemp>'
              + ' <numCmdFinal>'+%trim&#40;pe_CmdAS400&#41;+'</numCmdFinal>'
              + ' <fraisPort>'+%char&#40;wnfraisPort&#41;+'</fraisPort>'
              + ' </tar&#58;sendCodeCommande>'
              + ' </soapenv&#58;Body>'
              + ' </soapenv&#58;Envelope>'' AS CLOB&#40;10K&#41;&#41;&#41;' ;

        exec sql execute immediate &#58;str_sql ;

        if &#40;sqlcod <> 0&#41;;                      
             ...
Le contenu de ma variable fonctionne sous iséries.
On ne fait pas comme ça pour depuis un RPG?

Merci d'avance pour vos réponses.

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

VALUES

Message par cmasse »

il faut bien récupérer la chaîne quelque part ?


VALUES xxxxxxxxxxxxx INTO :MAVARIABLE, me semble plus approprié.


AU passage, le SQL dynamique (execute immediate ou prepare) n'apporte rien.
Christian Massé (Volubis.fr)

Fab_01
Messages : 2
Enregistré le : lun. 22 févr. 2016, 08:54:05

Message par Fab_01 »

Merci pour la réponse.

Du coup, plutôt que de passer par un 'exec sql execute immediate ' où on ne peut pas gérer de 'into :MAVARIABLE', j'ai utilisé le code suivant

Code : Tout sélectionner

         exec sql
           declare curs01 cursor for
              VALUES SYSTOOLS.HTTPPOSTCLOB&#40;   ....&#41;
         exec sql
           open curs01 ;

         exec sql
           fetch curs01 into &#58;sqlres;

  
        if &#40;sqlcod <> 0&#41;;
          ps_Erreur = *on;
        endif;

       // Fermeture de l'ordre SQL
         exec sql
           close curs01 ;   
J'ai juste un problème de variables à gérer correctement. J'ai bien une réponse si je force certaines valeurs en dur pour l'instant.

Répondre