*

[C#,AS400]C#でAS400のプログラムCallとコマンドの実行方法。

公開日: : 最終更新日:2015/01/09 AS400, C#, i Series, RPG3, System i

PCのプログラムからCall

AS400のRPGPGMをPCから呼び出ししたいときがあります。
FTPでコマンドをCallしたりも出来ますが、かゆいところに手が届かない。
最初のころは知らなくてソケット通信のプログラムを作成して、無理やりCallしたりしていましたが、
Client Accessには便利なdllがあるので、その利用方法です。

使い方

cwbx.dllの場所

cwbx.dllというライブラリがAS400のRPG等をCallするためのAPIになっています。
利用するためには参照設定から追加しなくてはなりませんが、問題はこの「cwbx.dll」はどこにあるのか、ということですね。
32bit環境であれば
C:\Program Files\IBM\Client Access\Shared\cwbx.dll
64bit環境であれば
C:\Program Files (x86)\IBM\Client Access\Shared\cwbx.dll
上記に存在しています。

というわけで参照の追加からさくっと追加します。
cwbx.dll 参照の追加
cwbx.dll 参照の追加

準備は完了です。

ソース

using cwbx;

class AS400Program {
	private const string User = "HOGE";
	private const string Password = "HOGE";
	private const string Host = "192.168.0.2";

	public void CallProgram() {
		AS400System system = new AS400System();
		system.Define("AS400");
		system.UserID = User;
		system.Password = Password;
		system.IPAddress = Host;
		system.Connect(cwbcoServiceEnum.cwbcoServiceRemoteCmd);

		if (system.IsConnected(cwbcoServiceEnum.cwbcoServiceRemoteCmd) == 1) {
			// コマンドの実行
			var cmd = new cwbx.Command();
			cmd.system = system;
			cmd.Run("ADDLIBLE HOGED");			// データライブラリ

			// プログラムの実行
			var program = new cwbx.Program();
			program.LibraryName = "HOGEO";		// ライブラリ名
			program.ProgramName = "HOGE01R";	// 実行したいプログラム
			program.system = system;
			try {
				program.Call();
			} catch (Exception) {
				throw;
			}
		}
		system.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
	}
}

HOGEOというライブラリに存在するHOGE01RというRPGをCallしています。
HOGE01RはHOGEDに存在するファイルを扱うプログラムという想定です。

解説

コマンドの実行

var cmd = new cwbx.Command();
cmd.system = system;
cmd.Run("ADDLIBLE HOGED");			// データライブラリ

今回のHOGE01RはHOGEDに存在するファイルを利用するので、ライブラリを追加しています。
ちなみに、ライブラリを追加せずにプログラムを実行すると、*LIBLにファイルが存在しないため、メッセージウェイトになります。
CLを作ってライブラリリストに追加するようにしてもいいのですが、今回は面倒なのでADDLIBLEコマンドを実行させました。

万が一間違ってWaitになったら、AS400にコンソールで接続して、WRKACTJOBか何かでキャンセルしてください。
QZRCSRVSというジョブで実行されています。

プログラムの実行

var program = new cwbx.Program();
program.LibraryName = "HOGEO";		// ライブラリ名
program.ProgramName = "HOGE01R";	// 実行したいプログラム
program.system = system;
try {
	program.Call();
} catch (Exception) {
	throw;
}

実行プログラムのライブラリとモジュールを指定して実行しています。
なお、メッセージウェイトになった場合は、返答して初めて例外処理がされます。

こんな感じでご利用くださいませ。

ad

関連記事

logo

[C#]BinaryFormatterでのDeserializeが遅い。遅すぎる。

概要 BinaryFormatterのサイズ的には大して変わらんとして、じゃあ速度的にはどうなのよ

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル パズルをランダム生成して配置する。(PrefabとInstantiate)

Unity関連記事まとめページはこちら 前回の続き。 パズルを消すことが出来たのでランダ

記事を読む

logo

[jt400, Java]レコードレベルアクセスの実現

到着順 AS400のファイルシステムですと、レコードを読み込んで、処理して、出力して、次のレコード

記事を読む

wannabenote_unity

[Unity]コードリファレンス ゲーム時間を表示する。

ゲーム内の時間を表示します。 Timeクラス 時間のためのクラスです。 ゲームが起動してか

記事を読む

Unity_

[Unity]Unity2Dチュートリアル スプライトを利用する その2

前回で、タイルを置いて、全部消えちまうじゃねぇか! 色一個一個つけるのめんどくせぇ!! というところ

記事を読む

logo

[iTextSharp,C#]TifファイルをPDFに変換する。

TifファイルをPDFに変換してほしいと言われて作ったときのソースのメイン部分を抜粋です。 確

記事を読む

visualstudio_

[visual studio]ODBC等のConnection Stringの簡単な作り方

Connection Stringって大体いつも検索して、それを使ってみて、だめだったりOKだったり

記事を読む

logo

[C#]文字列のプロパティを初期化したい。空文字で初期化したい。

Twitterで適当に叫んでたときのネタをメモ。 C#でプロパティの初期化が面倒です。 たと

記事を読む

unity rotate worldpoint

[Unity]コードリファレンス GameObjectを回転する。

くるくる回します。 rotationプロパティ Objectの向きをワールド座標で指定します

記事を読む

logo

[Java, DBUtils]ApacheのDBUtilsを利用して、データベースにアクセスする。

手抜きがしたい オブジェクト指向をする上で、o/r mapperが欲しくなります。 かなーり昔に

記事を読む

ad

Comment

  1. Johnf63 より:

    I think you have noted some very interesting points , appreciate it for the post. edcdaeedfgcd

  2. Johnd378 より:

    An fascinating dialogue is value comment. I believe that it is best to write more on this matter, it might not be a taboo topic but generally individuals are not sufficient to talk on such topics. To the next. Cheers dgcgaefegfdk

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑