自分のお店を開く時の心構えとは? >>

AS400初心者です。
RPGのプログラムにてメッセージファイルを利用するにはどのようにしたら良いのでしょうか?

たとえば・・・
(RPG)
  'メッセージID’CHAIN メッセージファイル
  'メッセージファイルのFIELD?' MOVEL ’画面のFIELD?’

あるいは
  RPGからCLを呼び出して・・
 (CL)
   SNDMSG メッセージID  メッセージファイル
   取得したメッセージを何らかの方法でRPGに返す?

初心者で質問の仕方も悪いかもしれませんが、よろしくお願いします。

    

このQ&Aに関連する最新のQ&A

A 回答 (3件)

パラメータを渡すというのは、「○件データが更新


されました」の○の部分の数値をその都度変化
させたいという事でしょうか。
現在取り扱っているシステムではメッセージがすべて
固定になっていてそこまでの事はしていないです。
できるかどうかもわかりません。
少し考えてみたのですが次の方法はいかがでしょう。

画面ファイル
WSMSG1 4A O 24 2DSPATR(HI BL)
WSMSG 68A O 24 9DSPATR(HI BL)

配列
E TB1 1 2 4
E TB2 1 2 68

変数部分設定
C MOVE AAAA WSMSG1
キー取得
C MOVE '1003' MSGKEY

メッセージ表示
C MSGKEY LOKUPTB1,M 88
C *IN88IFEQ '1'
C MOVE TB2,M WSMSG
C ENDIF


** TB1
ERR1
1003
** TB2
ERR1 得意先マスタに登録されていません。
1003 更新完了

※メッセージファイルを使用せず、RPGの中で
直接メッセージを指定する方法です。
    • good
    • 0
この回答へのお礼

早速のレスありがとうございます。
しばらく試すことができないかもしれませんが
結果を後ほどご報告いたします。

以前はLANSAを使って開発してたものですからRPGになると
結構わずらわしさを感じたりもします。

お礼日時:2003/12/09 01:37

画面ファイルがRPGにある場合はこれで大丈夫です


画面ファイルがCLにある場合はエラーフラグを
作成し、RPGにフラグを渡しエラーの時に
メッセージを出す(パラメータの指定はCLでする)
DCL VAR(&EFLG) TYPE(*CHAR) LEN(1) VALUE('0')

IF  COND(&IN01 *EQ '1') THEN(DO)
CALL PGM(ライブラリ/プログラム) PARM(&EFLG &WSHAID)
IF COND(&EFLG *EQ '1') THEN(DO)
CHGVAR VAR(&CMIC) VALUE('E004')
CHGVAR VAR(&IN30) VALUE('1')
GOTO START
ENDDO 以上の方法と直接RPGからIDを取得する為の
パラメータを渡す方法があります。
DCL VAR(&PACMIC) TYPE(*CHAR) LEN(4) VALUE(' ')
CALL PGM(プログラム) PARM(&PAERR &PACMIC)
IF COND(&PAERR = '1') THEN(DO)
CHGVAR VAR(&CMIC) VALUE(&PACMIC)
GOTO START
ENDDO
一応、上はエラーフラグも渡し、エラーの時のみ
パラメータで渡したIDを取得する方法です。

この回答への補足

返事遅れてすみません。
>画面ファイルがRPGにある場合はこれで大丈夫です。
のこれは何処にあたるでしょうか?

当方、画面はRPG側に存在し、処理後、画面下に

&1 件のデータが更新されました。

と出したいですが上記拝見して理解できなかったです。
すみません。

現在は、taranko のNO1の回答のおかげで
’ ’件のデータが更新されました。
まで表示可能です。

補足日時:2003/12/08 00:56
    • good
    • 0

1つの例ですが


画面ファイル
WSMSG 79A O 24 1MSGID(USR &CMIC OHAIMSGF)

RPGの場合
MOVEL'E004' CMIC

CLの場合
CHGVAR VAR(&CMIC) VALUE('E004')

このようにしてメッセージファイルのメッセージを
取得して表示しています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記のように試したところできました。

そこでつづけて質問したいのですが、
RPGからメッセージIDの指定方法はわかったのですが
メッセージファイルパラメータはどのようにして渡せば
よいのでしょうか??

お礼日時:2003/11/26 17:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAS400のスプールファイルをエクセルに取り込む方法は?

単純にコピー、貼り付けだと上手くセルに入らないし、データ量が膨大なので、いちいちそんなことやってられません。当方、AS400は全くわからないのですが、なんかそんなソフト、ツールはあるのでしょうか?また、自分で作ることとかできるんでしょうか?

Aベストアンサー

ツールやソフトがあるかどうかわかりませんが、仮にあったとしても、高価だと思いますよ。

OB96さんは、ASはまったくわからないと言う事ですが、コマンドとかの入力もした事無いですか?

もし、少々コマンド入力などの知識があれば、ちょっと面倒だけど、テキストデータを落として、P-COMかCAのデータ転送ツールを使ってエクセルで読み込ませる方法があります。
但し、エクセルのセルにキレイにデータが落ちるかどうかはわかりません。
(帳票によっては、複雑な印字をしている場合があるので)

簡単に手順を説明すると、

(1)AS側で、転送用の仮ファイルを作成
  CRTPF FILE(XXLIB/FL200) RCDLEN(200) IGCDTA(*YES) SIZE(*NOMAX)
  ※XXLIBは自分で作成してください。
(2)AS側で、スプールファイルを(1)にコピー
  CPYSPLF FILE(スプールファイルのファイル名) TOFILE(XXLIBLIB/FL200)
(3)(2)でコピーされたものをASからPCへデータ転送
(4)エクセルで開く時、セルを分割させながら開く

という様になります。

ツールやソフトがあるかどうかわかりませんが、仮にあったとしても、高価だと思いますよ。

OB96さんは、ASはまったくわからないと言う事ですが、コマンドとかの入力もした事無いですか?

もし、少々コマンド入力などの知識があれば、ちょっと面倒だけど、テキストデータを落として、P-COMかCAのデータ転送ツールを使ってエクセルで読み込ませる方法があります。
但し、エクセルのセルにキレイにデータが落ちるかどうかはわかりません。
(帳票によっては、複雑な印字をしている場合があるので...続きを読む

QRPG 配列宣言について

いつもお世話になっております。
IBM AS/400の駆け出しプログラマーです。
今、配列を使ったシステムを組んでいるのですが、
たとえばAというDBの項目に同じものがいくつかあるとします。
課所コード1(KSCD1)、課所コード2(KSCD2)、・・・・
といったような項目です。
そのAのファイルを読み、課所コードを配列に入れたいのですが、
配列KSCというものに
KSC,1にはKSCD1
KSC,2にはKSCD2といった感じです。
演算仕様書でMOVEL  KSCD1  KSC,1
と個々にやっていく方法以外にレコードを読んだときに自動的に配列に入れるような方法があったら教えていただきたいと思います。
何せ個々に入れていくとそれだけで80行使ってしまうので・・・・
知っている方がいらっしゃいましたらどうかお助けください。
お願い致します。

Aベストアンサー

以下の様にプログラミングすれば可能です。

E* テーブル
E  KSC  80 5 (80はテーブル数、5は桁数)
I  DS
I      1  5 KSCD1 (KSCD1はAファイルのフィールド名)
I      6  10 KSCD2
I      11  15 KSCD3
I      16  20 KSCD4
      ・
      ・
      ・
I     396 400 KSCD80

あとはAファイルを読み込めば KSCD1 --> KSC,1 、KSCD2 --> KSC,2 ・・・・ KSCD80 --> KSC,80に自動的にセットされます。
この方法を使えば、画面ファイルのフィールドも同様に使用できます(私は良く使用しております)。
何かわからないことがあれば、補足します。

QRPGでファイル名(もしくはレコード様式名?)をRENAMEする方法

RPGをコンパイルすると
「メッセージ:外部記述ファイルのレコード様式名がファイル名としてすでに定義されている。」
と表示されます。
この場合上司のアドバイスだとRENAMEすれば大丈夫だというのですが、何をどうすればいいのか分かりません。
一応自分なりに検索して入るのですが、なかなか解答が見つかりません。
I仕様書を使って行うのでしょうか?
どなたかアドバイスお願いします。

Aベストアンサー

レコード様式名のリネーム
F仕様書でファイル名の記述がある次の行で同じ
F仕様書で27桁目からリネームしたいレコードの
様式名を記入し、61桁目にK(継続)を記入し
62桁目からRENAME(リネームすることの記述)
68桁目からリネーム後の名前を記述する
これでいかがでしょうか。

QRPG パラメーターについて

AS/400のRPG言語に携わり1年が経ちます。
お恥ずかしながら質問させていただきますが、
CLを組んで、CALLでRPGを呼び出す時にパラメーターを受け渡すようにしました。
初めてやってみましたが、なんとか動くようになりましたが、
今度はデバッグするときや、コマンドラインで直接プログラムを呼び出す時、CALLのオプションでパラメーターを指定しなければならなくなりました。
例えばOPTという数字変数のパラメータとAという文字パラメーター、Bという論理データのパラメーターにそれぞれ
1、’登録’、’1’というものを渡したい場合、
CALL PGM(EM02PR) PARM(・・・・・・)
PARMの記述はどう記入すればよいのでしょうか?

おわかりになる方宜しくお願い致します。

Aベストアンサー

CALL PGM(EM02PR) PARM('1' '0' '0' X'1F')もしくは
CALL PGM(EM02PR) PARM('1' '0' '0' X'01F')
どちらかで大丈夫だと思います。
いかがでしょうか。

QAS400プリンタセッション作成について質問させてください

AS400のプリンタセッションを作りたく思いいろいろ調べました。
下記手順で間違ったところがあればご指摘・またはアドバイス等頂きたく思い投稿させて頂きました。

(1)端末(WinXP pro)にパーソナルコミュニケーションズ(PCOMM)4.3を導入。

※PCOMM以外にもクライアントアクセスなるソフトがあったのですがPCOMMと大きく違いはあるのでしょうか?

(2)同端末に出力したいプリンタのドライバインストール。

(3)PCOMM起動。通信→構成の[リンクパラメータ]でAS400のIPアドレスを記入。[セッションパラメータ]でセッションタイプのプリンタにチェックを入れる。
ホストのタイプはAS400、接続タイプはTELNETの5250を選択。

※セッションパラメータ中にワークステーション名という項目があるのですがここにはどういった値を入れればよいのでしょう?またこの画面内にある[拡張]をクリックして開くところにあるメッセージ待ち行列とは気にしなくていいのでしょうか?

(4)ファイル→プリンタ設定より出力したいプリンタを選らんでOKをクリック。

(5)テスト印刷

以上、実際に試せる環境がないのでこれで出力できるか確認できていませんが詳しい方いらっしゃいましたらご教授願います。

AS400のプリンタセッションを作りたく思いいろいろ調べました。
下記手順で間違ったところがあればご指摘・またはアドバイス等頂きたく思い投稿させて頂きました。

(1)端末(WinXP pro)にパーソナルコミュニケーションズ(PCOMM)4.3を導入。

※PCOMM以外にもクライアントアクセスなるソフトがあったのですがPCOMMと大きく違いはあるのでしょうか?

(2)同端末に出力したいプリンタのドライバインストール。

(3)PCOMM起動。通信→構成の[リンクパラメータ]でAS400のIPアドレスを記入。[セッションパラメ...続きを読む

Aベストアンサー

#1の続きです。

>>WinXPではサポート外なのですね。
Pcomm(途中のバージョンからは、製品名としては『HACP』と呼ぶようになりましたが)の各バージョンのOS対応について、以下のURLにリストがありますので参照して下さい。
http://www-06.ibm.com/jp/software/network/pcomm/version.html

昔のバージョンでは『シュリンクラップ』という、パッケージを単体で購入できるものがありましたが、今のPcomm(正確には『HACP』ですが)は確か、『パスポート・アドバンテージ』製品になっているはずですので、ソフトウェア・メンテナンスの契約をちゃんとしていれば、最新バージョンを使用することは可能です。(サポート期間中のものについて『パスポート・アドバンテージ・オンライン』のサイトでダウンロードできますから、最新のものに限らずインストールイメージを入手することは可能です。)


>>ワークステーション名に関しては任意の名前をつけておいて印刷するときディスプレイセッションからその名前を指定すれば出力できるという認識で大丈夫でしょうか?

前回の説明をもう少し具体的に解説します。

例えば、あるPCにディスプレイセッションとプリンタセッションを1つずつ作成したとします。
ディスプレイセッションのワークステーション名を『DSP100』、プリンタセッションのワークステーション名を『PRT100』としたとします。この時、プリンタセッションを作成する際に、メッセージ待ち行列を『DSP100』と指定すれば、AS/400側に出来る『PRT100』という『装置記述』に、メッセージ待ち行列が『DSP100』と指定されるため、『PRT100』というプリンタに関するメッセージ(用紙交換とか、用紙切れとか...)は、デフォルトでは『DSP100』というメッセージ待ち行列(これはとりもなおさず、『DSP100』というディスプレイセッションの装置記述が持つメッセージ待ち行列です)にメッセージが届くことになります。(配布モードが『*BREAK』になっていなくても、SysReqの4番で確認できます。)

ただし、AS/400にサイン・オンした際に実行される(と思われる)初期プログラムによってその設定を変更されるケースもありえますので、『絶対』だとは言えません。



使用するプリンタがCANON LBP-750ということですが、既に販売が終了されている製品です。
このプリンタでの5577エミュレーションモードについてですが、デフォルトでは持っていません。コントロールカード(別売)を追加することによってサポートされることになります。
http://cweb.canon.jp/e-support/qasearch/answer/lasershotprinters/q001000010862.html
コントロールカードを使わない場合であれば、ESC/Pがサポートされていますが、ESC/Pの場合、AS/400側のアプリケーションの作成仕様にもよりますが、制約を受けることが多々あると思って下さい。
一例としてですが、例えば、プリンタファイルを使用した帳票設計で、15CPI(198文字)はサポートされません。(通常では158文字=12CPIまでが限界)


...と、ここまでいろいろ書いてしまいましたが、私もAS/400関連を離れてかなり時間がたっていますので、最新の情報(正しい情報)については、出入りされているベンダーさんに確認していただくのがよいでしょう。(特に5577エミュレーションあたりについては、アプリケーション側の作り込みの仕様との兼ね合いがかなり大きいですから、ベンダーさんだけでなく、SIerさんにも確認する必要があるでしょう。)

#1の続きです。

>>WinXPではサポート外なのですね。
Pcomm(途中のバージョンからは、製品名としては『HACP』と呼ぶようになりましたが)の各バージョンのOS対応について、以下のURLにリストがありますので参照して下さい。
http://www-06.ibm.com/jp/software/network/pcomm/version.html

昔のバージョンでは『シュリンクラップ』という、パッケージを単体で購入できるものがありましたが、今のPcomm(正確には『HACP』ですが)は確か、『パスポート・アドバンテージ』製品になっているはずですの...続きを読む

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

QRPGプログラムの*HIVALについて

0001.00 READ PGM 91
0002.00 91 EXSR @shori

0050.00 MOVEL*HIVAL #KF01

っというような流れがあります。
#KF01というのはKFLDで指定してある、
キーフィールドのうちのひとつです。

この場合MOVEL*HIVALというのは何を意味しているのでしょうか?

Aベストアンサー

RPGの場合は MOVE *HIVAL #KF01
だけではキーの中に最高値を入れているだけですので
それだけでは意味をなしません。
その後にキーによるSETLLやSETGTがあると思います。
そこで初めて次処理を何処からするか読み始める位置を
移動のみします。また、その後のREADから実際の処理が
始まります。
ファイルの並び順(降順・昇順)とSET○○と
READの種類により処理も変わってきます。
これらは余計な処理をしなくても良いように必要ない
データは読まないという処理に使用したり、READ
の場合一度ファイルを読むとそのまま同じファイルを
読もうとしても最後まで読まれているため1件も
読まれないということがあるためちゃんとファイルが
読めるようにというときに使用されます。
*LOVAL(最小値)も同じようなときに使用されます。

QAS400 印刷用ファイルからCSVに変換する方法

AS400に無知な者です。
今現在使用しているASのバージョンすら
わかっていません。


実行すると自動的にデータが集計され
印刷用ファイルができるプログラムがあります。
データ形式で作成することは選択できません。

現在はASから印刷された帳票をみながら
エクセルに入力したりと、
かなりお馬鹿なことをしています。

わざわざ印刷しなくても
スプールにおちた印刷用ファイルを
CSVなどPC上で処理できるデータにかえる
コマンド等はないものでしょうか?

最初からデータ形式でおとせという
つっこみがきそうですが
どのファイルにアクセスして
どういう処理をしてるのか全く持って不明のため
現在の実力では不可能です。

誰かたすけてくださいまし。

Aベストアンサー

CPYSPLFコマンドでスプールファイルを物理ファイルへ変換できます。
その物理ファイルをPCへ転送すればできます。

参考URL:http://www.onbedo.com/forCOMP/AS400/qa_os.html

Q出力待ち行列のデータをエクセルに落としたい(iSeries,AS400)

会社のホストでAS400を使用しています。
CLやRPGのソース内を検索するコマンドがあり、
それを使用すると検索結果がスプールに一覧として格納されます。

現在は画面で表示してコピーして、エクセルに転記しています。
これが凄く面倒なのですが、スプールにたまったデータを、
直接エクセルに落とし込むようなやり方などあるのでしょうか?

Aベストアンサー

PcommであればインストールフォルダにSPL2Fileというものがあります
(フルインストールのみ)
これをつかってスプールファイルをテキストファイルに出力できます

クライアントアクセス(iseries ACCESS)のばあい
インストールフォルダにwrkprt.exeやwrksplf.exeがありますので
そこで該当のスプールファイルを表示して
デスクトップなどにドラッグアンドドロップすることで
テキストファイル化できます

CPYSPLFというASのコマンドを使って1回物理ファイルにした上で
データ転送で取得という方法もあります


人気Q&Aランキング

おすすめ情報