ProgramCall クラス

IBM® Toolbox for Java™ ProgramCall クラスでは、Java プログラムが IBM i プログラムを呼び出すことができます。 ProgramParameter クラスを使用して、 入力、出力、および入出力パラメーターを指定することができます。 プログラムを実行すると、 出力および入出力パラメーターには IBM i プログラムから戻されたデータが入ります。 IBM i プログラムの実行が失敗した場合、Java プログラムでは、 結果の IBM i メッセージを AS400Message オブジェクトのリストとして取り出すことができます。

必須パラメーターは、次のとおりです。

プログラム名およびパラメーター・リストは、 ProgramCall setProgram() メソッドを介してコンストラクターで設定するか、あるいは run() メソッドで設定することができます。run() メソッドはプログラムを呼び出します。

ProgramCall クラスを使用すると、AS400 オブジェクトはサーバーに接続します。 接続の管理については、接続の管理を参照してください。

例: ProgramCall を使用する

注: 法律上の重要な情報に関しては、 コードに関するライセンス情報および特記事項をお読みください。

以下の例では、ProgramCall クラスを使用する方法を示します。

     // Create an AS400 object.
     AS400 sys = new AS400("mySystem.myCompany.com");

     // Create a program object. I choose
     // to set the program to run later.
     ProgramCall pgm = new ProgramCall(sys);

     // Set the name of the program.
     // Because the program does not take
     // any parameters, pass null for the
     // ProgramParameter[] argument.
     pgm.setProgram(QSYSObjectPathName.toPath("MYLIB", "MYPROG", "PGM"));

     // Run the program. My program has
     // no parms. If it fails to run, the failure
     // is returned as a set of messages
     // in the message list.
     if (pgm.run() != true)
     {
        // If you get here, the program
        // failed to run. Get the list of
        // messages to determine why the
        // program didn't run.
        AS400Message[] messageList = pgm.getMessageList();

        // ... Process the message list.
     }

     // Disconnect since I am done running programs
     sys.disconnectService(AS400.COMMAND);

ProgramCall オブジェクトは、 プログラムの統合ファイル・システム・パス名を必要とします。

デフォルトの動作では、 Java プログラムとIBM i プログラムが同じサーバー上にあるときでも、IBM i プログラムは別のサーバー・ジョブで稼働します。 しかし、このデフォルトの動作をオーバーライドし、 ProgramCall setThreadSafe() メソッドを使用して IBM i プログラムが Java のジョブで実行されるようにすることができます。

ProgramParameter オブジェクトを使用する

ProgramParameter オブジェクトを使用すると、 Java プログラムと IBM i プログラムの間でパラメーター・データを受け渡しすることができます。 setInputData() メソッドを使用して入力データを設定します。 プログラムの実行後に、 getOutputData() メソッドで出力データを検索します。 各パラメーターはバイト配列です。 Java プログラムは、バイト配列を Java 形式と IBM i 形式との間で変換する必要があります。 データ変換クラスは、データを変換するためのメソッドを提供します。パラメーターは、リストとして ProgramCall オブジェクトに追加されます。

例: ProgramParameter を使用する

注: 法律上の重要な情報に関しては、 コードに関するライセンス情報および特記事項をお読みください。

以下の例では、ProgramParameter オブジェクトを使用してパラメーター・データを渡す方法を示します。

     // Create an AS400 object
     AS400 sys = new AS400("mySystem.myCompany.com");

     // My program has two parameters.
     // Create a list to hold these parameters.
     ProgramParameter[] parmList = new ProgramParameter[2];

     // First parameter is an input parameter
     byte[] key = {1, 2, 3};
     parmList[0] = new ProgramParameter(key);

     // Second parameter is an output
     // parameter. A four-byte number is returned.
     parmList[1] = new ProgramParameter(4);

     // Create a program object specifying the name of the
     // program and the parameter list.
     ProgramCall pgm = new ProgramCall(sys, "/QSYS.LIB/MYLIB.LIB/MYPROG.PGM", parmList);

     // Run the program.
     if (pgm.run() != true)
     {
        // If the system cannot run the
        // program, look at the message list
        // to find out why it didn't run.
        AS400Message[] messageList = pgm.getMessageList();
     }
     else
     {
        // Else the program ran. Process the
        // second parameter, which contains the returned data.

        // Create a converter for this data type
        AS400Bin4 bin4Converter = new AS400Bin4();

        // Convert from system type to Java
        // object. The number starts at the
        // beginning of the buffer.
        byte[] data = parmList[1].getOutputData();
        int i = bin4Converter.toInt(data);
     }

     // Disconnect since I am done running programs
     sys.disconnectService(AS400.COMMAND);