読者です 読者をやめる 読者になる 読者になる

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

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

RPGLE

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

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

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

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

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

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

【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-画面幅を超えるフィールドの取り扱い方法

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

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

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

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

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

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

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

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

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

【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】RPGLE-日付・時刻型フィールド

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

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

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

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

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

【AS400】RPGでの例外処理

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

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

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

【AS400】RPGLE-英小文字によるコーディング方法

概要 RPGLEでのコーディングを、より他の言語に近づけて違和感を無くしたい! そう考えると、アルファベット小文字を使ってコーディングしたくなってくるというものです。 操作手順 (1)P-COMMセッションの設定 ホスト・コードページを、「939:日本語英数小文…

【AS400】RPGLE-データ構造

(1)データ構造とは? データ構造とは、記憶域をサブフィールドに分割して使用する手法。データ・ストラクチャー(Data Structure)とも呼びます。 記憶域の割り当て ① 変数の割り当て ・名前の異なる変数は、記憶域内の異なる場所に割り当てられる。 ② データ…

【AS400】RPGLE-データ域

(1)データ域とは? プログラム間、JOB間の制御情報として使用されるディスク上の記憶域。1つのオブジェクト。データ・エリア(DataArea)とも呼ぶ。 データ域は、次の2種類ある。 ユーザー定義のデータ域ユーザーが作成するデータ域で、任意のライブラリーに…

【AS400】DDS-表示装置ファイルの機能キー(CA,CFキーワード)の比較

概要 表示装置に、ファンクションキーを設置する際に、CAとCFの2種類の方法があります。詳しく説明できないので、実際にやってみることにしました。 結果より、画面に入力された値を使用する場合は、CFを使うということ。「F3:終了」など値を使用する必要…

【AS400】CVTRPGSRC(RPGⅢをRPGLEへ変換)

作業手順 (1) 変換記録用のログファイルの準備 一般的には不要と思われるが、変換した結果を記録したい場合に、ログ用PFを準備します。 CPYF FROMFILE(QRPGLE/QARNCVTLG) TOFILE(TIGER/QRNCVTLG) MBROPT(*REPLACE) CRTFILE(*YES) ※項目キーワードへ、ALWNULL…

【AS400】CPYFRMIMPF(PC上のCSVファイルを物理ファイルへ格納する方法)

概要 PCデータを物理ファイルへセットする方法は、Client Accessのデータ転送(アップロード)機能を利用するという手もありますが、AS400にはIFS(統合ファイルシステム)なるファイル共有があります。そこへPC上のCSVファイルを格納して、事前準備した物理…

【AS400】CMPPFM(物理ファイルメンバー比較)

概要 物理ファイルメンバー比較 (CMPPFM) コマンドを使用して、ソースファイルAとソースファイルBを比較し、その違いの結果を出力してくれます。 Version違いのソースが2つあり、どの部分を追加修正したのかを把握するときなどで使用します。 コマンド正…

【AS400】フィールド名のリネーム方法

概要 同一のテーブルをプログラムで使用する場合や、複数のテーブル内に、同一の変数名がある場合などで、ある共通のフィールド名がどのテーブルを参照しているかわからなくなってしまいます。 このような場合、片方のフィールド名をプログラム実行時のみ、…

【AS400】ソースファイルを物理ファイルとして読む方法

概要 RPGからソースファイルのメンバを参照することも可能です。ソースの行を更新することもできます(あまり意味がないかな!?)。 ソースファイルをRPGで指定するためには、CLで事前に参照したいメンバを別名で指定しておく必要あります。(OVRDBF) サンプ…

【AS400】DSPLY(メッセージ表示)

概要 DSPLY命令を使えば、プログラム実行時に変数の値を画面に表示させたり、ユーザーからの入力値を受け取ることができます。 DSPLY命令のレコード様式: 1表示可能な情報の最大長は52バイトです。(ILE RPG解説書より) DSPLY命令がエラーになる条件=入力…