!!!方法1:Runtime#execを使う
!例
http://publib.boulder.ibm.com/html/as400/v4r5/ic2962/info/java/rzaha/callclex.htm
import java.io.*;
public class CallCLPgm
{
public static void main(String[] args)
{
try
{
Process theProcess =
Runtime.getRuntime().exec("/QSYS.LIB/JAVSAMPLIB.LIB/DSPJVA.PGM");
}
catch(IOException e)
{
System.err.println("Error on exec() method");
e.printStackTrace();
}
} // end main() method
} // end class
!!!方法2:Toolkit for Java を使う
Java <-> RPG で型の変換が色々必要になるので注意。
使用するライブラリはログインユーザの JOBD のINLLIBLに設定されているものになる。
CRTJOBD TEST/TESTJOBD INLLIBL(QTEMP QGPL TESTLIB)
CHGUSRPRF USER1 JOBD(TEST/TESTJOBD)
みたいな感じで利用するライブラリを変更できる。
!!必要なライブラリ
*jt400.jar
*x4j400.jar
!!例1
!test.java
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.ProgramCall;
import com.ibm.as400.access.AS400Message;
public class test{
public static void main(String[] args) {
AS400 as400 = new AS400("hoge","user","pass");
try {
ProgramCall pc = new ProgramCall(as400 );
String programName = "/QSYS.LIB/TESTLIB.LIB/TESTPROG.PGM";
// 引数設定
ProgramParameter[] parmlist = new ProgramParameter[2];
AS400Text nametext = new AS400Text(8);
parmlist[0] = new ProgramParameter( nametext.toBytes("John Doe") );
parmlist[1] = new ProgramParameter( 50 );
pc.setProgram( progName, parmlist );
if (pc.run() != true)
{
// Report failure.
System.out.println("Program failed!");
// Show the messages.
AS400Message[] messagelist = pc.getMessageList();
for (int i = 0; i < messagelist.length; ++i)
{
// Show each message.
System.out.println(messagelist[i]);
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
as400.disconnectAllServices();
}
}
}
!!例2:実行時にライブラリを変更する
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.ProgramCall;
import com.ibm.as400.access.AS400Message;
public class test{
public static void main(String[] args) {
AS400 as400 = new AS400("hoge","user","pass");
try {
CommandCall command = new CommandCall(as400);
if (!command.run("ADDLIBLE LIB(TESTLIB) POSITION(*FIRST)")){
System.out.println("Call failed!");
return;
}
ProgramCall pc = new ProgramCall(as400);
String programName = "/QSYS.LIB/TESTLIB.LIB/TESTPROG.PGM";
// 引数設定
ProgramParameter[] parmlist = new ProgramParameter[2];
AS400Text nametext = new AS400Text(8);
parmlist[0] = new ProgramParameter( nametext.toBytes("John Doe") );
parmlist[1] = new ProgramParameter( 50 );
pc.setProgram( progName, parmlist );
if (pc.run() != true)
{
// Report failure.
System.out.println("Program failed!");
// Show the messages.
AS400Message[] messagelist = pc.getMessageList();
for (int i = 0; i < messagelist.length; ++i)
{
// Show each message.
System.out.println(messagelist[i]);
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
as400.disconnectAllServices();
}
}
}
!!応答待ちに反応する
MessageQueue
QueuedMessage
あたりを使う。
!!!方法3:PCML(Program Call Markup Language) を使う
Toolkit for Java の呼出をXMLを使って簡単にする方法
!!必要なライブラリ
*jt400.jar
*x4j400.jar
!!例1
!SAMPLE00.pcml
!PCMLtest.java
import com.ibm.as400.access.AS400;
import com.ibm.as400.data.ProgramCallDocument;
public class PCMLTest {
public static void main(String[] args) {
try {
AS400 as400 = new AS400("shuflle","primula","nerine");
ProgramCallDocument testPCML = new ProgramCallDocument(as400,"SAMPLE00");
if(testPCML.callProgram("SAMPLE00")) {
System.out.println("SAMPLE00:実行完了");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
!!例2
!SAMPLE01.pcml
!PCMLtest.java
import java.math.BigDecimal;
import com.ibm.as400.access.AS400;
import com.ibm.as400.data.ProgramCallDocument;
public class PCMLTest {
public static void main(String[] args) {
try {
AS400 as400 = new AS400("SHUFFLE","PRIMULA","NERINE");
ProgramCallDocument testPCML = new ProgramCallDocument(as400,"SAMPLE01");
// 入出力のパラメータを作成
BigDecimal in1 = new BigDecimal("12.34");
BigDecimal out1 = new BigDecimal("0.00");
// パラメータセット
testPCML.setValue("SAMPLE01.IN1", in1);
if(testPCML.callProgram("SAMPLE01")) {
System.out.println("SAMPLE01:実行完了");
out1 = (BigDecimal)testPCML.getValue("SAMPLE01.OUT1");
System.out.println("入力値:"+ in1);
System.out.println("戻り値:"+ out1);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
{{category2 プログラミング言語,RPG}}
{{category2 プログラミング言語,Java}}