J'ai essayé node-jt400 (Programmes)

Programs Appelons le programme.

CLLE (pas de paramètres)

Essayez CALL un programme CL simple sans paramètres.

MYLIB/SMPL010C.CLLE


             PGM                                                     
             SNDMSG MSG('SMPL010C a été appelé') TOMSGQ(*SYSOPR)  
             ENDPGM                                                  

Programs.JS


app.get("/smpl010c", function (req, res, next) {
  var SMPL010C = pool.pgm('SMPL010C', []); 
  SMPL010C({}).then(
    function (result) {
      res.send(result);
    });
});

Il y a une restriction sur l'appel d'un programme. Autrement dit, ** il y a toujours un programme à exécuter dans la liste des bibliothèques **. Les éléments suivants étaient tous NG.

var SMPL010C = pool.pgm('MYLIB/SMPL010C', []); 
var SMPL010C = pool.pgm('MYLIB.SMPL010C', []); 
var SMPL010C = pool.pgm('/QSYS.LIB/MYLIB.LIB/SMPL010C.PGM', []); 

nodejt16.png

nodejt17.png

RPGLE (avec paramètres)

Essayez d'appeler RPGLE avec des paramètres.

MYLIB/SMPL011R.SQLRPGLE


      *                                                                            
      * CRTSQLRPGI OBJ(MYLIB/SMPL011R) SRCFILE(MYLIB/QRPGLESRC) DBGVIEW(*SOURCE)
      *                                                                            
     H DFTACTGRP(*NO)                                                              
     D main            PR                  EXTPGM('SMPL011R')                      
     D                                3P 0                                         
     D                               12A                                           
     D                               12A                                           
     D                               40A                                           
     D                                7P 3                                         
     D main            PI                                                          
     D id                             3P 0                                         
     D lname                         12A                                           
     D fname                         12A                                           
     D prof                          40A                                           
     D tokuten                        7P 3                                         
                                                                                   
     D stmt            S            512A                                           
     /free                                                 
                                                           
         stmt = 'insert into member' +                     
                ' values(?, ?, ?, ?, ?)';                  
         exec sql prepare s1 from :stmt;                   
                                                           
         exec sql execute s1                               
               using :id, :lname, :fname, :prof, :tokuten; 
                                                           
         tokuten = tokuten + 100;                          
                                                           
         *inlr = *on;                                      
                                                           
         return ;                                          
                                                           
     /end-free                                             

Programs.JS


app.get("/smpl011r", function (req, res, next) {
    var SMPL011R = pool.pgm('smpl011r', [
        { type: 'DECIMAL', precision:  3, scale: 0, name: 'id' },
        { type: 'CHAR',    precision: 12, scale: 0, name: 'lname' },
        { type: 'CHAR',    precision: 12, scale: 0, name: 'fname' },
        { type: 'CHAR',    precision: 40, scale: 0, name: 'prof' },
        { type: 'DECIMAL', precision:  7, scale: 3, name: 'tokuten' }
    ]);
    SMPL011R({
        id: 120,
        lname: 'Date',
        fname: 'Masamune',
        prof : 'Apparu en costume blanc.',
        tokuten: 10
    }).then(function (result) { 
      res.send(result); 
    });
});

Cependant, ce programme ne fonctionne pas correctement. Lorsque j'ai débogué SMPL011R pour rechercher la cause, j'ai constaté que les paramètres japonais n'étaient pas transmis correctement. nodejt18.png

nodejt19.png

Modification de la source Java de node-jt400

Donc, je vais essayer de corriger la source Java de node-jt400. Récupérez la source sur github.

git clone [email protected]:tryggingamidstodin/node-jt400.git mynode-jt400

nodejt20.png

La source à modifier est \ java \ src \ nodejt400 \ Pgm.java.

Pgm.java


  public TextPgmParam(String name, Props paramDef)
  {
    super(name, paramDef);
    parser = new AS400Text(paramDef.getFirstInt("size", "precision"), "Cp871");
  }

Cp871 semble faire quelque chose de mal, alors j'ai fait ce qui suit:

Pgm.java


  public TextPgmParam(String name, Props paramDef)
  {
    super(name, paramDef);
    parser = new AS400Text(paramDef.getFirstInt("size", "precision"));
  }

Après avoir modifié la source, créez un nouveau jt400wrap.jar et remplacez jt400wrap.jar dans \ mon dossier \ node_modules \ node-jt400 \ java \ lib.

Je l'ai exécuté à nouveau et pris le débogage au même endroit. Cette fois, les paramètres sont passés correctement.

nodejt22.png

Le paramètre "tokuten" a été ajouté 100. Il semble que la valeur de retour soit également prise.

nodejt23.png

nodejt24.png

L'affiche n'assume aucune responsabilité pour la modification de la source. Veuillez le faire à vos propres risques.

Ajouté le 28 décembre 2017 J'ai mis le jt400wrap.jar pré-construit ici [https://github.com/ymurata1967/node-jt400/releases/).

Recommended Posts

J'ai essayé node-jt400 (Programmes)
J'ai essayé node-jt400 (exécuter)
J'ai essayé node-jt400 (Transactions)
J'ai essayé node-jt400 (Construction de l'environnement)
J'ai essayé node-jt400 (écriture IFS)
J'ai essayé node-jt400 (mise à jour SQL)
J'ai essayé node-jt400 (requête SQL)
J'ai essayé node-jt400 (flux SQL)
J'ai essayé node-jt400 (lecture IFS)
J'ai essayé Spring.
J'ai essayé de mettre Tomcat
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé FizzBuzz.
J'ai essayé JHipster 5.1
[J'ai essayé] Tutoriel de printemps
J'ai essayé d'exécuter Autoware
J'ai essayé QUARKUS immédiatement
J'ai essayé d'utiliser TestNG
J'ai essayé Spring Batch
J'ai essayé d'utiliser Galasa
J'ai essayé DI avec Ruby
J'ai essayé d'utiliser azure cloud-init
J'ai essayé la machine Spring State
J'ai essayé Drools (Java, InputStream)
J'ai essayé Rails débutant [Chapitre 1]
J'ai essayé d'utiliser Apache Wicket
J'ai essayé d'utiliser Java REPL
J'ai essayé l'analyse du code source
J'ai essayé le problème FizzBuzz
J'ai essayé Rails débutant [Chapitre 2]
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé de vérifier yum-cron
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'utiliser anakia + Jing maintenant
J'ai essayé de mâcher C # (indexeur)
J'ai essayé quelque chose qui s'appelle la recherche récursive
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
[K8s] J'ai essayé la communication entre les pods!
J'ai essayé l'analyse morphologique avec MeCab
J'ai essayé un petit docker de digdag.
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé de mettre Domino11 dans CentOS7
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé l'outil de micro-benchmarking de Java JMH
J'ai essayé d'utiliser JWT en Java
J'ai essayé GraphQL avec Spring Boot
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de créer divers programmes de séquence de nombres tels que le numéro Koratz, le numéro Fibonatch, le numéro Triangle
[Android] J'ai essayé d'utiliser la disposition du coordinateur.
J'ai essayé d'installer CentOS 8 sur ESXi 6.7