2

私は、IBM i (as400) の rpgle シーン全体にかなり慣れていません。

一部の情報を XML 形式にエクスポートするタスクが与えられました。

CPYTOPCD を使用して情報を XML ファイルにコピーしたときに問題が発生しました。

なんらかの理由で、CPYTOPCD をプログラム内から使用する場合、CPYTOPCD はデータの一部しかコピーしません。ただし、as400 コマンド ラインに移動すると、問題なくデータ全体がコピーされます。

これを行ったときにわかる唯一の違いは、コマンドラインでは CPYTOPCD コマンドがすべて 1 つの行に収まるのに対し、プログラムでは「+」を使用して次の行に移動してコマンドを終了する必要があることです。

いろいろなサイトを見ましたが、同様の問題は見つかりませんでした。おそらく、私は問題を正しく表現していません。それが私の最大の問題でした。

状況を十分に説明できていない場合は申し訳ありませんが、わかりやすくするために他にどのような情報を提供できるかお知らせください。

何卒よろしくお願い申し上げます。

編集:これが問題の一部であるかどうかはわかりませんが、念のため追加した方がよいと思いました。出力された XML を確認すると、以前に問題なく記述されたタグの途中で終了し、小さなボックスが配置されます。オンラインで見つけたものから、空白文字だと思いますが、よくわかりません。

edit2: CLP は、異なるファイルに対してこれを複数回実行します。

CLRPFMファイル(SDIXW4)

CALL PGM(SDI812)

CPYTOPCD FROMFILE(SDIXW4) TOFLR('AUDIT') +
TODOC(RELLOC.XML) REPLACE(*YES) + TRNFMT(*NOTEXT)

edit3: Charles の提案を試してみます。うまくいけば、これで CPYTOPCD で発生している問題が回避されます。新しいフォームをテストした後、これを更新します。あなたのご親切に感謝します。

4

4 に答える 4

2

どのバージョンとリリースを使用していますか?

Buck が述べたように、CPYTOPCD は長い間減価償却されてきました。CPYTOSTMF と CPYTOIMPF の方が適しています。

XML タグを自分で追加することについて言及しているため、CPYxxx コマンドよりも適切な選択はwrite()、C ランタイム ライブラリで利用可能な関数を使用して IFS ストリーム ファイルに直接書き込むことです。この機能は、ILE C または ILE RPG プログラムから使用できます。( Scott Klement の XML from RPG プレゼンテーションのコード例

fd = open('/home/scottk/xml/test.xml'
: O_WRONLY+O_CREAT+O_TRUNC+O_CCSID
: M_RDWR
: 819);
xml =
'<?xml version="1.0">'
+ '<CustFile>'
+ ' <CustRec custno="' + %trim(CustNo) + '">'
+ ' <Name>' + %trim(Name) + '</Name>'
+ ' <Address>'
... And so forth ...
callp write(fd: %addr(xml)+2: %len(xml));
callp close(fd);
/end-free

IBM i の最近のリリース (7.1 または 7.2) を使用している場合は、おそらくDB2 for IBM i に追加された XML 関数を使用できます。

于 2015-07-28T15:08:46.690 に答える
0

ある種のソース編集セッションにいると思います。そのため、プラス記号を入力して次の行に移動してコマンドを完了するのではなく、CPYTOPCD と入力し、F4 を押してから F10 を押し、プロンプトに従ってコマンドを完了することをお勧めします。(ページ キーを使用して、コマンド パラメーターとオプションの一覧全体を表示します。) 以前に見逃していたものが表示されるかもしれません。このアプローチのもう 1 つの利点は、F1 を使用して、コマンドの任意のパラメーターのヘルプを取得できることです。

于 2015-07-28T13:37:58.830 に答える