Programs Rufen wir das Programm auf.
Versuchen Sie, ein einfaches CL-Programm ohne Parameter aufzurufen.
MYLIB/SMPL010C.CLLE
PGM
SNDMSG MSG('SMPL010C wurde aufgerufen') TOMSGQ(*SYSOPR)
ENDPGM
Programs.JS
app.get("/smpl010c", function (req, res, next) {
var SMPL010C = pool.pgm('SMPL010C', []);
SMPL010C({}).then(
function (result) {
res.send(result);
});
});
Es gibt eine Einschränkung beim Aufrufen eines Programms. Das heißt, ** es gibt immer ein Programm, das in der Bibliotheksliste ausgeführt werden kann **. Die folgenden waren alle NG.
var SMPL010C = pool.pgm('MYLIB/SMPL010C', []);
var SMPL010C = pool.pgm('MYLIB.SMPL010C', []);
var SMPL010C = pool.pgm('/QSYS.LIB/MYLIB.LIB/SMPL010C.PGM', []);
Versuchen Sie, RPGLE mit Parametern aufzurufen.
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: 'Datum',
fname: 'Masamune',
prof : 'Erschien im weißen Kostüm.',
tokuten: 10
}).then(function (result) {
res.send(result);
});
});
Dieses Programm funktioniert jedoch nicht ordnungsgemäß.
Als ich SMPL011R debuggte, um die Ursache zu untersuchen, stellte ich fest, dass die japanischen Parameter nicht korrekt übergeben wurden.
Also werde ich versuchen, die Java-Quelle von node-jt400 zu reparieren. Holen Sie sich die Quelle von Github.
git clone [email protected]:tryggingamidstodin/node-jt400.git mynode-jt400
Die zu ändernde Quelle ist \ 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 scheint etwas falsch zu machen, also habe ich Folgendes getan:
Pgm.java
public TextPgmParam(String name, Props paramDef)
{
super(name, paramDef);
parser = new AS400Text(paramDef.getFirstInt("size", "precision"));
}
Erstellen Sie nach dem Ändern der Quelle eine neue jt400wrap.jar und ersetzen Sie jt400wrap.jar in \ myfolder \ node_modules \ node-jt400 \ java \ lib.
Ich habe es erneut ausgeführt und das Debugging an derselben Stelle durchgeführt. Diesmal werden die Parameter korrekt übergeben.
Der Parameter "tokuten" wurde um 100 hinzugefügt. Es scheint, dass der Rückgabewert auch genommen wird.
Das Poster übernimmt keine Verantwortung für die Änderung der Quelle. Bitte tun Sie dies auf eigenes Risiko.
Hinzugefügt am 28. Dezember 2017 Ich habe die vorgefertigte Datei jt400wrap.jar hier abgelegt [https://github.com/ymurata1967/node-jt400/releases/).
Recommended Posts