jtopen / jt400ツールキットを使用して、JavaからIBM iシリーズr5v4(別名AS / 400)のプログラムを呼び出しています(実際にはJRubyですが、純粋なJavaでも同じ問題が発生しています)。これは一部のプログラムでは問題なく機能しますが、他のプログラムでは、出力バイトにすべてゼロが含まれます。これは間違っており、場合によっては無効です(たとえば、ZonedDecimalの場合)。ProgramCall、JobList、またはSYSOPR.MSGQにメッセージは添付されていません。なぜこれが起こるのか誰かが知っていますか?
いくつかのコードを表示するには(ライブラリを使用したことがある人なら誰でも、このJavaのRubyレンダリングを理解できると確信しています)。
as400 = AS400.new(host, user, password)
call = ProgramCall.new(as400)
call.program = "/QSYS.LIB/LIBRARY_NAME.LIB/PROGRAM_NAME.PGM"
# Prepare converters
text1_converter = AS400Text.new(1)
text3_converter = AS400Text.new(3)
decimal92_converter = AS400ZonedDecimal.new(11, 2)
# Prepare parameters
call.parameter_list = []
# Input parameters
call.parameter_list << ProgramParameter.new(text1_converter.to_bytes('N'))
call.parameter_list << ProgramParameter.new(decimal92_converter.to_bytes(1500.25))
# Output parameters
call.parameter_list << ProgramParameter.new(text3_converter.byte_length)
call.parameter_list << ProgramParameter.new(decimal92_converter.byte_length)
# Execute the call
call.run
# Show the results
puts "Text3 output value: " + text3_converter.to_object(params[2].output_data).to_s
puts "Decimal92 output value: " + decimal92_converter.to_object(params[3].output_data).to_s
私が言ったように、これはいくつかのプログラムではうまく機能しますが、他のプログラムでparams[2].output_data
は[0、0、0]のバイト配列になりますが、これは意図した結果ではありません。さらに悪いことに、 params[3].output_data
[0、0、0、0、0、0、0、0、0、0、0]になります。これは、ZonedDecimal.new(9、2)の無効なバイト値です。誰かが私を助けることができますか?