Programs Appelons le programme.
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', []);
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.
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
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.
Le paramètre "tokuten" a été ajouté 100. Il semble que la valeur de retour soit également prise.
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