タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

AS400

【AS400】RPGLE-MOVEA命令をfreeでどう書くか

最近、RPGLEはほぼFree形式で書くようにしています。 しかしながら、MOVEA命令のfree置き換えが無いっぽいので、困っておりました。 MOVEA命令は、標識の一括セット/クリアなどで便利だったのですが・・・。 サンプル1 標識30~59までを一括でOFFに設定する…

【AS400】レコードロック検証

改めて、DB2 for iでのレコードロックを検証していきたいと思います。 (1) レコードロックとは? (2) RPGプログラムでレコードロックを発生させてみる 検証1用ソースPGM RPGLESRC/SAMPLE39 検証1 実行結果 レコードロックの確認方法 ロックウェイト時のWRKAC…

【AS400】SQLRPGLE-挿入、更新、削除件数を取得する

久しぶりにAS400のSQLRPGLEネタです。 SQLのINSERT文、UPDATE文、DELETE文実行後に、どうやって結果レコード数を取得するのか? という疑問が湧きました。 Javaであれば、下記のようにSQL実行結果の戻り値で結果レコード件数を取得できるのですが・・・。 in…

【AS400】RPGLE-数値→文字列変換

RPGLEでのキャスト処理(数値→文字列)についてです。 数値を文字列化して出力したいケースは、多くあると思います。 自分がわかる範囲で、そのバリエーションをまとめてみました。 (1) %CHAR関数を使う %CHARを使うことで、数値を簡単に文字列変換してくれ…

【AS400】デフォルト・ゲートウェイの変更

AS400セットアップ後、なかなか変更にならなそうなデフォルトゲートウェイの変更方法を記しておきます。 IBM iのVersionは、V7R1になります。 変更方法 例として、現在、「172.16.1.1」のデフォゲを、「172.16.1.254」へ変更する操作になります。 (1) 現状のルー…

【AS400】RPGLE-数値日付の妥当性チェック

タイトルの件、やはり便利な命令が用意されていました。 これまでは、DSで年、月、日に分けて、閏年判定を交えて、オリジナル関数で処理させていましたが、TEST命令を使えば簡単に判定できることがわかりました。 サンプルはこちらです。 サンプルPGM D MAIN…

【AS400】オペレーション・コンソールによる接続

久しぶりにAS400に関する投稿です。 オンプレミス系サーバーで最重要なものといえば、コンソールですよね。 AS400のコンソールについて、はるか昔は同軸ケーブルで接続のダム端で行っていましたが、今やPCベースで操作が可能です。 そういえば、最初からコン…

【AS400】RPGLE-文字列に半角¥が含んでいるかの判定処理

表題の処理をどうしてもやりたくて、BIF関数等をいろいろと試したのですが、うまくいかず。。。 さすがは、アメリカ産まれのAS400! そうは問屋は卸してくれませんね。 具体的には、%SCANを使って、半角¥の文字位置を取得しようとしたのですが、全角¥でも…

【AS400】RPGLE-一括レコード更新処理サンプル(UNLOCK命令を使用)

AS400でレコード更新を処理する場合、専用アプリ、SQL、DFUなど多くの方法がございますが、複雑な条件をつけて、1つ1つ判定したうえで、更新したい!という場合では、RPGでやるのが便利だと思っています。 そこでサンプルを。 サンプルは、単純に売上明細…

【AS400】RPGLEからCLコマンドを実行(ex.DLYJOB)

RPGプログラムからDLYコマンドを実行させたいケースがありましたので、まとめます。 下記のサイトを参考にさせていただきました。 Capturing QCMDEXC error codes | RPGPGM.COM - From AS400 to IBM i RPGプログラムからDLYJOBを実行するサンプル 単純にプロ…

【AS400】RPGLE-ポインターによるパラメータ渡し

RPGでもポインターを利用できるようです。 あまり詳しくないのですが、構造体をパラメータにして別プログラムへ渡すためにポインターを使ってみました。 呼出し元(MAIN)のプロシージャでの処理 DATA1という名称の構造体を準備しました。構造体では、ID,NAM…

【AS400】DSPF-ユーザー定義編集コード

EDTCDEについて AS400の画面ファイルにて、EDTCDE(編集コード)をよく使われることと思います。 EDTCDEは、数値を読みやすくするためのカンマ編集などを記述するためのコードのこと。 iSeries Infomation Center - DDS 解説書: 表示装置ファイル - 表示装置…

【AS400】QRYプログラムからSQL文を生成する方法

昨日、同僚から教えていただいたネタをひとつご紹介します。 私は、知らない機能だったので、衝撃でした。 SQLがよくわかっていなかった10年前に知りたかった機能でしたよ!!! と、こぼしていても始まらないので、さっそく試してみました。 QRYプログラム…

【AS400】コネクションプールの確認

GlassfishなどのAP Serverでコネクションプールの登録した場合、AS400ではどうなっているかの話です。 P-COMMでは、ネットワークの状況の照会にて、確認可能です。 ネットワークの状況の確認 WRKTCPSTSコマンド、またはNETSTATコマンドを実行します。 WRKTCP…

【AS400】DSPF-画面幅を超えるフィールドの取り扱い方法

5250エミュレータ画面は、基本的に80×24のサイズになっていて、小規模な業務系アプリではまったく問題なく、必要なフィールドを画面へ配備できるのですが、コメントなど画面幅を超える長さをフィールドをメンテする場合、どうしたらいいのだろう? という疑…

【AS400】ワークステーションIDを指定しない端末について

地味なネタで恐縮ですが・・・。 Client Access(P-COMM)にて、ワークステーションIDを指定しない端末については、Server側が自動的にIDを割り当ててくれます。 では、どのようなIDが割り当てられるのか? 下記のコマンドにて確認できます。 WRKCFGSTS *CTL QP…

【AS400】ClientAccessエミュレータ初回起動時のパスワード要求を回避する方法

ClientAccessのエミュレータを使用すると、毎回、下記のような「IBM iサインオン」接続認証画面が起動するかと思います(P-COMM単体のソフトウェアには無かったかと思いますが・・・)。 (1) batファイル作成 IBMiLogOn.bat echo off cd C:\Program Files\IB…

【AS400】UPDDTAコマンドにて主キーを編集する方法

マニアックなネタです。 AS400のVersionは、V7R01です(V5R04でも同様でした)。 前回、取り上げましたUPDDTAコマンドでは、キーも編集できたりしてしまいます。 しかし、時々、「あれ? キーが編集できないぞ!」となってしまうときがあります。 これはいっ…

【AS400】DFU・UPDDTAコマンドによるデータ保守

簡単に、データを保守した場合に重宝しているコマンド、それは「UPDDTA」です!! これは、AS400のユーティリティ「DFU(データ・ファイル・ユーティリティー)」で提供されているもので、メニューから、もしくは簡単にコマンドから呼び出して利用することが…

【DB2/400】登録済みストアド・プロシージャの確認

ちょうど、DB2 for i上に展開しているストアド・プロシージャを確認する必要があり、通常ならiナビで確認するのですが、P-COMMからサクっと調査する方法はないか検索していましたら、下記のサイトと廻り合えました! AS/400のとなりで-ストアードプロシージ…

【DB2/400】AutoNumber IDのテーブル作成

正直、ずっとDDSでのテーブルばかり扱ってきたので、DDLのテーブルについてはなじみがありません。 これではいかん!ということで、少しずつスキルアップを進めていこうと考えます。 まずは、AutoNumberの主キーから!!!(なぜか? 理由は特にありません)…

【RAD】Rational Developer for i 9.1のインストール

私は、AS400での開発において「P-COMM」をメインに使用していますが、Java開発や新規のRPG開発などで、Rational Developer for iのお世話になっています。 Rational Developer製品は有償です。略して「RDi」と呼ぶようですが、私は「Rational Application Deve…

【AS400】特定のオブジェクトを参照するプログラムの調査方法

前回では、フィールド等の使用状況調査についてを書きましたが、今回は、特定のオブジェクト(テーブルやプログラム)を参照するプログラムを確認する方法を書きます。 あるプログラムが、どのプログラムで呼び出されているか? あるテーブルが、どのプログ…

【AS400】複数ソースプログラムでのフィールド利用調査方法

ソースプログラム内で、このフィールドがどこで使われているかな?と調査するケースがよくあるかと思います。 IDEであれば、プロジェクト内でキーワード検索をかければ一発なのですが、P-COMMオンリーでは厳しいものがありますね。 しかしながら、PDMのオプ…

【AS400】RPGLE-金額計算時の端数処理

計算時の端数処理(四捨五入、切捨て、切り上げ)は、業務系ではかかせない処理かと思います。 しかしながら、RPGでは、この基本処理を簡単に記述できない苦悩があります。 いつものように、単に私が知らないだけなのかもしれませんが・・・。 税込み金額の…

【AS400】RPGLE-有効文字列の長さを調べる方法

自分が知らなかったことで、はまってしまったので、アップしておきます。 入力されている文字列の長さを調べる方法は、BIF関数「%LEN」で簡単に取得できるものだと思っていました。 しかし、DB2 for iでは、DDSで定義したテーブルの文字列は、CHARになるので…

【P-COMM】プログラム開発にて画面を広く使う方法

AS400の開発ツールも、だいぶバラエティー豊かになってきましたが、P-COMM端末での操作が一番落ち着くのはなぜなんでしょうか!? 最近では、RDiを使う機会も増えてはおりますが、まだまだClient Accessのエミュレータ(P-COMM)は現役バリバリです。 せっか…

【AS400】SQLRPGLE-リモートAS400へのアクセス

AS400が複数台存在する場合に、リモートのRDBSへアクセスすることが可能です。 簡単ですが、その方法をまとめます。 準備作業 (1) ローカル:遠隔RDBの登録 WRKRDBDIREコマンドでリモートAS400のRDBを登録します。 リレーショナル・データベース・ディレクトリー 項目の処理 位…

【AS400】SQLRPGLE-カーソルを使った集計処理

SQLカーソル処理にて、集計処理させるプログラムについてです。 はっきり言って、SQLは超・便利です。 CRUD処理はもちろん、複雑な照会であっても、副問い合わせなどで簡単にデータの取り出しが可能です。 ただ、複雑なSQL文は、解読するのに一苦労します(…

【AS400】SQLRPGLE-RPGでSQL文を使う

RPGにてシンプルなSQL文を書く機会があったので、簡単なサンプルを書いてみました。 SQLRPGLEサンプル D MAIN PR EXTPGM('SAMPLE28') D 7P 0 D* D MAIN PI D P@QCNT 7P 0 D* D C@QCNT S 7P 0 D* D******************************************************* D…

【AS400】RPG-CALL文での数値パラメータ渡し

コマンドラインから、直接、CALL命令(プログラム呼び出し)を実行する場合、数値パラメータを渡す必要がある場合の対処方法です。 パック10進数であれば、パラメータにて数値を渡すことが可能です。 下記のようなサンプルを作成してみました。 TIGER/RPGLES…

【AS400】CL-システム値の取り出し

CLからシステム値を取得する方法を書いてみました。 日付、時間であれば、RPGからだと、便利な組込関数の%DATE()や%TIME()でサクッと取り出せるのですが、それをCL上でやるにはどうするかという話になります。 RPGでの日付、時間の取得方法 C EVAL W@DAT = %…

【AS400】RPGLE-日付・時刻型フィールド

DB2/400の日付・時間系のデータ項目を調査しましたので、まとめておきたいと思います。 まず、DB2/400で定義できるデータタイプは、下記の通り。 今回、サンプルテーブルを準備し、RPG、Java(AS400内部ではなく、自分のローカルPCより実行)からその項目に…

【AS400】RPGでのエラーモニター処理

先に紹介したRPGでの例外処理にて、個別に例外処理を組み込むことが可能になりますが、例外が発生した場合、モニタリングし、例外をキャッチした場合、共通処理として何らかの処理を実行させる方法が一般的かと思います。 例外発生後の共通処理としては、 QS…

【AS400】修正したはずのプログラムが正しく反映されない?

GitなどのVersion管理システム(IBMならば、Team Concertでしょうか)で運用していれば、表題のような問題は発生しないかもしれませんが、 個人的にちょくちょくこういうことがありました(本来あってはいけません)。 修正したはずのプログラムが反映されて…

【AS400】CLでの例外処理

前回のRPG例外処理に続き、今度はCLでの例外処理です。 方法は、MONMSG命令により実行プログラムが例外扱いと判定するので、その際に吐き出されるメッセージIDをキャッチし、その例外処理を実装する、そんな感じでしょうか。 実際に、サンプルを見ます。 下…

【AS400】RPGでの例外処理

例外処理は、とても大切ですよね。 RPGプログラムでも、Javaの「try~catch」のようなものがあります。 それが、「MONITOR命令」です。 TRYではなく、MONITOR文によってエラー監視を行えます。(MONITOR~ENDMON) サンプル・プログラム 固定フォーマット C M…

【AS400】データベース名変更方法

AS400(V7R1)のローカルのRDBの名前の初期値は、Serverのシリアルナンバーになっていると思います。 その名称を変更する方法をまとめます。 データベース名の確認 次のコマンドで確認できます。 WRKRDBDIRE リレーショナル・データベース・ディレクトリー 項目の処理 位置指定 . …

【AS400】スタートアップ・プログラム

前回は、クリーンアップに関して書きましたが、今回は、スタートアップの話です。 つながりは、まったくありません。しいて言えば「アップ」つながりです。。。 始動プログラムの確認 まずは、AS400(V7R1)の始動プログラム設定を確認してみました。システム値「…

【AS400】クリーンアップ設定

AS400のQSYSOPRのメッセージをよく見てみると、次のようなメッセージが毎日出力されていました。 クリーンアップが開始された。 ユーザー・メッセージのクリーンアップが開始された。 操作員およびワークステーション・メッセージのクリーンアップが開始され…

【AS400】CHGPFコマンドにて、フィールドを変更する

前回では、AS400のテーブルに新しいフィールドを追加する方法を紹介しましたが、今度はすでに存在するフィールドを変更してみたいと思います。 再度、従業員マスタ(物理ファイル)のDDSを使って試します。 TIGER/DDSSRC EMPLOYEES A UNIQUE A R RECEMP TEXT…

【AS400】CHGPFコマンドにて、テーブルにフィールドを追加する

AS400のテーブルをDDSで管理している場合において、フィールドを追加する方法をまとめておきたいと思います。 DDSとは、従来の記述方法でデータ属性 (レコードおよびフィールドの名前や長さ) のデータ記述仕様を使用して、物理ファイルや論理ファイルを定義…

【AS400】コマンド・デフォルト値の変更

IBM提供のコマンドでオプションありのものについては、デフォルト値をユーザーが指定できるようになっています。 CHGCMDDFT コマンドを入力し、F4プロンプトを呼び出すと、下記のような画面が表示されます。例では、テープ初期化コマンドでの固定値を設定さ…

【AS400】RPGLE-日付差、時間差を求める

RPGも、BIF(Built-In Functions 組込み関数)を使うことで、シンプルにコーディングできるようになっています。 今回は、%DIFFを使って、日数差と時間差を算出するサンプルを作ってみました。 RPGLE (SAMPLE25) D*****************************************…

【AS400】SAVF/TAPEからのオブジェクト復元

ライブラリー復元の次は、オブジェクト復元を試してみます。 ログファイルが存在しないデータなど、「あれ?、先週時点でのデータの値はどうだったのだろう?」などと調査する場面に出くわしてしまったときなどで使用します(できれば、そういう場面には、遭…

【AS400】出力待ち行列のスプールをテキストファイルで取得する方法

AS400上にあるスプールファイルをテキストファイルでダウンロードする方法を紹介します。 おそらく様々な方法があるんでしょうけど、手っ取り早くやる方法として、iナビを使います。 実行管理機能→出力待ち行列→所定のOUTQを選択すると、そのOUTQ内にスタン…

【AS400】TAPEからのライブラリー復元

概要 SAVFからのライブラリー復元に関連して、テープ装置から保管ライブラリーを復元する方法をまとめておきます。 テープからのライブラリー復元方法 処理の流れ テープ確認 対象ライブラリー消去(任意) RSTLIBコマンド実行 1.テープ確認 DSPTAP DEV(TAP0…

【AS400】SAVFからのライブラリー復元

概要 今度は、SAVFをFTPでAS400へアップロードする方法にて、AS400に保管されたSAVFを使って、保管したライブラリーを実際に復元します。 SAVF自体は、ただの保管ファイルですので、中身を復元させる必要があります。当たり前ですね。 コマンド例 RSTLIB SAV…

【AS400】SAVFをFTPでAS400へアップロードする方法

概要 AS400本体以外の場所に保存したSAVFをAS400へアップロードする方法をまとめてみました。 今回も、Windows7のパソコンから実施します。 FTPコマンドによるアップロード 処理の流れ 受皿となるSAVFを準備する(AS400にて操作) ftpコマンドでServerへログ…

【AS400】System i ナビゲーターで「実行管理機能」や「データベース」などの機能が表示されない

System i ナビゲーターとは、AS400 ServerをGUIで操作するツールのことです。 少し前までは、「iナビ」と略されていました。iは、System i の i ではなく、iSeriesの i だったと思います。iSeriesナビゲーターという名称だったので。 私は、古い人間ですので…