• 検索結果がありません。

Microsoft PowerPoint 年2月Power Systems テクニカル・セミナー_RPG.ppt [互換モード]

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint 年2月Power Systems テクニカル・セミナー_RPG.ppt [互換モード]"

Copied!
82
0
0

読み込み中.... (全文を見る)

全文

(1)

IBM i Free Format RPG 入門

日本アイ・ビー・エム株式会社

IBM Systems.ハードウェア事業本部

Power Systems テクニカルセールス

2015年2月26 日 rev 1.0

2015年2月 Power Systems テクニカル・セミナー

(2)

© 2015 IBM Corporation 2

© IBM Corporation 2015. All Rights Reserved.

■ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報提 供の目的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むものでも ありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗⽰にかかわ らずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害が⽣じた場合も 、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる保証または表明を 引きだすことを意図したものでも、IBMソフトウェアの使⽤を規定する適⽤ライセンス契約の条項を変更することを意図したものでもなく、またそのような 結果を⽣むものでもありません。 ■本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰する ものではありません。本講演資料で⾔及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっていつで も変更できるものとし、いかなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講演資料に含ま れている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が⽣じると述べる、または暗⽰することを意図したもので も、またそのような結果を⽣むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤した測定と予測に基づい ています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、⼊出⼒構成、 ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられ ているものと同様の結果を得られると確約するものではありません。 ■記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰されたも のです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 ■IBM、IBM ロゴ、ibm.com、[当該情報に関連し商標リスト中に掲載されたIBMブランド、製品名称があれば追加する]は、世界の多くの国で登録された International Business Machines Corporationの商標です。

■他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。

■現時点での IBM の商標リストについては、www.ibm.com/legal/copytrade.shtmlをご覧ください。

Adobe, Adobeロゴ, PostScript, PostScriptロゴは、Adobe Systems Incorporatedの米国およびその他の国における登録商標または商標です。

IT Infrastructure Libraryは英国Office of Government Commerceの一部であるthe Central Computer and Telecommunications Agencyの登録商標で す。

インテル, Intel, Intelロゴ, Intel Inside, Intel Insideロゴ, Intel Centrino, Intel Centrinoロゴ, Celeron, Intel Xeon, Intel SpeedStep, Itanium, および Pentium は Intel Corporationまたは子会社の米国およびその他の国における商標または登録商標です。

■Linuxは、Linus Torvaldsの米国およびその他の国における登録商標です。

■Microsoft, Windows, Windows NT および Windowsロゴは Microsoft Corporationの米国およびその他の国における商標です。 ■ITILは英国The Minister for the Cabinet Officeの登録商標および共同体登録商標であって、米国特許商標庁にて登録されています。 ■UNIXはThe Open Groupの米国およびその他の国における登録商標です。

Cell Broadband Engineは、Sony Computer Entertainment, Inc.の米国およびその他の国における商標であり、同社の許諾を受けて使⽤しています。 ■JavaおよびすべてのJava関連の商標およびロゴは Oracleやその関連会社の米国およびその他の国における商標または登録商標です。

(3)

© 2015 IBM Corporation 3

更新履歴

(4)

© 2015 IBM Corporation 4

概要

RPGⅢからの既存プログラマー、および、これからRPG

を始められる皆様向けにFree Format RPGの最新情報を

提供します。

IBM i をご使⽤のお客様環境では、RPGプログラムが基

幹システムとして稼動し、OSのバージョン上位互換性や

アプリケーション開発・運⽤の容易さのメリットを提供

し続けています。

このセッションでは、Eclipseベースの開発ツールRDiの

エディターを使ったFree Format RPGのコーディング・

サンプルも交えてご紹介します。

(5)

© 2015 IBM Corporation 5

目次

1. IBM i におけるアプリケーション開発

2. RPGⅣとは

1. RPGⅣの特徴

2. ILE RPG

3. Free Format RPG とは

4. Free Format RPG コーディング・サンプル

1. 事前準備

Rational Developer for i のインストール

2. 初心者向けチュートリアル

(6)

© 2015 IBM Corporation 6

(7)

© 2015 IBM Corporation 7

VIOS

Power Hypervisor ファームウェアによる仮想化

I/O 仮想化

サーバー統合

アプリ資産継承

•RPG

• COBOL

• C/C++

TIMI 仮想マシン

SLIC マイクロコード

相互連携

オープン性

• Java(WAS)

• PHP

• Ruby on Rails

• OSS 環境

IBM i アプリケーション環境

(8)

© 2015 IBM Corporation 8

基幹業務系

⽣産管理、販売管理、⼈事

・給与・経理

業務変革がない限り変化を

求めない

⻑期間にわたり安定して使

⽤できる事が重要

周辺系

GUI 情報発信、

モバイル端末サポート

積極的に変化を求める

改修を前提とするスクラッ

チ文化

RPG, COBOL, C/C++

Java, PHP, Ruby

相互連携

IBM i 独自環境

アプリケーション資

産の継承

オープン性重視

新しいインターフェ

ースへの対応

アプリケーションのタイプと IBM i のプログラム言語

(9)

© 2015 IBM Corporation 9

IBM i アプリケーション開発ロードマップ

ユーザー・ エクスペリエ ンスの拡張 モジュール化 アプリケーシ ョン統合 ビジネス プロセス の統合 開発ツール の改善 既存環境 RPG/COBOL 5250 5250 RPG/COBOL

ILE and Java

HTML/JSP DB2 and SQL Connectors Process Choreography RPG/COBOL XML XML Portlets GUI GUI 5250 GUI ILE/Java Java/EJB

ILE (e.g. RPG, COBOL, …)

GUI Portlets HTML/JSP HTML/JSP HTML/JSP 5250 5250 5250 Servlets Servlets Servlets

Servlets Portlets Portlets

XML

XML

DB2 and SQL

Web Services Web Services

Remote System Explorer WebFacing/HATS Remote System Explorer WebFacing/HATS Remote System Explorer iSeries Web tools

ユーザー・インターフェース

アプリケーション技術

RPGは25年以上に渡り、技術の変化に対応しながら

利用し続けられています

(10)

© 2015 IBM Corporation 10

RPG文法の変遷

(11)

© 2015 IBM Corporation 11

RPGⅢ(OPM RPG) System/38 – V2R3

FCUSTFILEIF E DISK FREPORT O E PRINTER ICUSTDS E DSCUSTFILE /COPY GETCURDAT /COPY INVOICE C READ CUSTFILE LR

C *INLR DOWNE*ON

C DUEDAT IFGT CURDAT

C EXSR SNOVDU

C WRITEREPORTFM

C/EXEC SQL INSERT :NAME, :DUEDATE INTO

C+ MYLIB/MYFILE C/END-EXEC C ENDIF C READ CUSTFILE LR C ENDDO C* C SNOVDU BEGSR C CALL 'SNDINVCE' C PARM CUSTDS

C PARM ISOVDU OVERDU 10

C ENDSR

変数名には6文字の制限

"Send overdue notice" =

SNOVDU

構文は全て大文字

変数名には6文字の制限

"Send overdue notice" =

SNOVDU

(12)

© 2015 IBM Corporation 12

V3R1

H bnddir('ACCRCV') dftactgrp(*no) Fcustfile uf e disk Freport o e printer D custDs e ds extname(custfile) D today s d datfmt(*iso) /copy invoices C time today C read custfile

C dow not %eof C if dueDate > today

C exsr sendOvrNtc

C read custfile

C write reportFmt

C/exec sql insert :name, :duedate into

C+ mylib/myfile C/end-exec C endif C enddo C eval *inlr = '1' C sndOvrNtc begsr C call 'SNDINVCE' C parm custDs

C parm IS_OVERDUE overdue 10

C endsr

大文字小文字の混在

10文字までの変数名

"Send overdue

notice" =

SendOvrNtc

日付と時間のサポート

大文字小文字の混在

10文字までの変数名

"Send overdue

notice" =

SendOvrNtc

日付と時間のサポート

(13)

© 2015 IBM Corporation 13

V3R2 – V4R4

H bnddir('ACCRCV') dftactgrp(*no) Fcustfile uf e disk Freport o e printer D custDs e ds extname(custfile) D today s d datfmt(*iso) D sendOverdueNotice... D pr C time today C read custfile

C dow not %eof C if dueDate > today

C callp sendOverdueNotice (custDs)

C write reportFmt

C/exec sql insert :name, :duedate into

C+ mylib/myfile C/end-exec C endif C read custfile C enddo C eval *inlr = '1' P sendOverdueNotice... P b ...

サブ・プロシージャー

⻑いプロシージャー名が可能

(例)“Send overdue notice”を実⾏

するプロシージャー名:

SendOverdueNotice

サブ・プロシージャー

⻑いプロシージャー名が可能

(例)“Send overdue notice”を実⾏

するプロシージャー名:

(14)

© 2015 IBM Corporation 14

V5R1 – V5R2

H bnddir('ACCRCV') dftactgrp(*no) Fcustfile uf e disk Freport o e printer D custDs ds extname(custfile) D sendOverdueNotice... D pr /free

read custfile custDs; dow not %eof;

if dueDate > %date(); // overdue?

sendOverdueNotice (); write reportFmt;

/end-free

C/exec sql insert :name, :duedate into

C+ mylib/myfile

C/end-exec /free

endif;

read custfile custDs; enddo; *inlr = '1'; /end-free ...

C仕様書のFree Format対応

インデント表記可能

多数の組み込み関数

C仕様書のFree Format対応

インデント表記可能

多数の組み込み関数

(15)

© 2015 IBM Corporation 15

V5R3 – 7.1

H bnddir('ACCRCV') dftactgrp(*no) Fcustfile uf e disk Freport o e printer D custDs e ds extname(custfile) D sendOverdueNotice... D pr /free

read custfile custDs; dow not %eof;

if dueDate > %date(); // overdue?

sendOverdueNotice (); write reportFmt;

exec sql insert :name, :duedate into

mylib/myfile; endif;

read custfile custDs; enddo; *inlr = '1'; /end-free P sendOverdueNotice... P b /copy invoices ...

Free FormatのSQL

Free FormatのSQL

(16)

© 2015 IBM Corporation 16

7.1 TR7

ctl-opt bnddir('ACCRCV');

dcl-f custfile usage(*update);

dcl-ds custDs likerec(custRec); dcl-f report printer;

read custfile custDs;

dow not %eof;

if dueDate > %date(); // overdue?

sendOverdueNotice ();

write reportFmt;

exec sql insert :name, :duedate into

mylib/myfile;

endif;

read custfile custDs;

enddo;

inlr = '1';

dcl-proc sendOverdueNotice; /copy invoices

sendInvoice (custDs : IS_OVERDUE);

end-proc;

/FREE, /END-FREE 不要

C 仕様書以外に、H ・ F ・

D ・ P の各仕様書もfree

fomat対象に

/FREE, /END-FREE 不要

C 仕様書以外に、H ・ F ・

D ・ P の各仕様書もfree

fomat対象に

(17)

© 2015 IBM Corporation 17

文字ベースのADT(開発支援ツール)

SEU画面例

PDM画面例

初期のRPG開発環境

(18)

© 2015 IBM Corporation 18

Remote System Explorer(RSE):従来の5250開発環境

をEclipse上に移植

Rational Developer for i を使用したRPG開発環境

PDMのように IBM i上のオブ ジェクトを操作 SEUのようにソースを 表示・編集・操作でき るLPEXエディター ファイルのフィールドや データをテーブル形式で 表示

(19)

© 2015 IBM Corporation 19

【ご参考】Eclipseを使用したJava開発環境

RPG開発環境もJava開発環境と同様のインターフェース

(20)

© 2015 IBM Corporation 20

【ご参考】RDiを使用したFree Formatへの変換例

H DATEDIT(*YMD) F*BCH110得意先マスター一覧表の印刷 FTOKMSL03 IF E K DISK

FQPRINT O F 132 PRINTER OFLIND(*INOF) C*見出し印刷 C EXCEPT MIDASI C *IN99 DOWEQ '0' C*得意先マスターの読み込み C READ TOKMSL03 99 C *IN99 IFEQ '0' C*利用可能額の計算

C TKGEND SUB TKUZAN WKRIYO 9 0

C*頁変えの確認 C OF EXCEPT MIDASI C OF SETOFF OF C*明細の印刷 C EXCEPT MEISAI C END C END C*終了処理 C SETON LR C RETURN OQPRINT E MIDASI 2 02 ・・・・・・ H DATEDIT(*YMD) //BCH110得意先マスター一覧表の印刷 FTOKMSL03 IF E K DISK

FQPRINT O F 132 PRINTER OFLIND(*INOF)

//見出し印刷 /FREE EXCEPT MIDASI; DOW *IN99 = '0'; //得意先マスターの読み込み READ TOKMSL03; *IN99 = %EOF; IF *IN99 = '0'; //利用可能額の計算 /END-FREE

C TKGEND SUB TKUZAN WKRIYO

//頁変えの確認 C OF EXCEPT MIDASI C OF SETOFF //明細の印刷 /FREE EXCEPT MEISAI; ENDIF; ENDDO; //終了処理 *INLR = *ON; RETURN; /END-FREE OQPRINT E MIDASI 2 02 ・・・・・・

H F D P 仕様書、一部のC仕様書は変換され

ない(I O 仕様書はFree Format非対象)

/FREE, /END-FREEが入る

H F D P 仕様書、一部のC仕様書は変換され

ない(I O 仕様書はFree Format非対象)

/FREE, /END-FREEが入る

(21)

© 2015 IBM Corporation 21

(22)

© 2015 IBM Corporation 22

RPGⅣとは

RPGはReport Program Generatorの略称です

RPGⅣが最新版であり、ILE(Integrated Language Environment:

統合化⾔語環境)に対応しているため、「ILE RPG」としても知られ

ています

RPGは、IBM i の専⽤のプログラム⾔語であり、本来、報告書を作

成するための簡易⾔語として発表された⾔語であるが、現在では、

拡張され、一般のプログラム⾔語と同様の機能を持っています

FCUSTFILEIF E DISK FREPORT O E PRINTER ICUSTDS E DS /COPY GETCURDAT /COPY INVOICE C READ CUSTFILE LR C *INLR DOWNE*ON C DUEDAT IFGT CURDAT

C EXSR SNOVDU

C WRITEREPORTFM

C/EXEC SQL INSERT :NAME, :DUEDATE INTO C+ MYLIB/MYFILE

C/END-EXEC

C ENDIF

C READ CUSTFILE LR

(23)

© 2015 IBM Corporation 23

(24)

© 2015 IBM Corporation 24

RPGⅣの特徴

RPGⅣの主な特徴

① 仕様書

RPG⾔語はプログラムの処理内容に応じて、最⼤7種類の仕様書を

使⽤してプログラムを書きます

② プログラム・サイクル(RPGサイクル)

プログラム・サイクルとは、ファイル終了状態に達するまで、プ

ログラムが 反復する一連のステップのことです

③ 標識

標識は、オン (‘1’) またはオフ (‘0’) のいずれかが⼊る 1 バイ ト

の文字フィールドです。演算処理の条件付け、または、RPG内部

論理のセットのために 使⽤されます

(25)

© 2015 IBM Corporation 25

①仕様書(1/2)

メイン・ソース・セクション

制御仕様書(H)

プログラムの⽣成および実⾏についての情報をコンパイラーに提供します。その中に は、プログラム名、日付の形式、および 代替照合順序またはファイル変換の使⽤な どが含まれます

ファイル仕様書(F)

プログラムで使⽤するすべてのファイルを記述します

定義仕様書(D)

プログラムで使⽤されるデータを記述します

入⼒仕様書(I)

プログラムで使⽤される⼊⼒レコードおよびフ ィールドについて記述します外部記述ファイル(※1)を使⽤する場合は⼊⼒仕様書は使⽤しません

演算仕様書(C)

データに対して実⾏される演算および演算の順 序を記述します。 演算仕様書では、 特定の⼊⼒および出⼒操作を制御することも できます

出⼒仕様書(O)

プログラムで使⽤される出⼒レコードおよびフ ィールドを記述します。外部記述ファイル(※1)を使⽤する場合は出⼒仕様書は使⽤しません。

RPG IV 仕様書には 7 つのタイプがあります。

各仕様書タイプはオプションです。各仕様書

は、以下に示される順番でソース・プログラム

に入力されなければ なりません。

(26)

© 2015 IBM Corporation 26

①仕様書(2/2)

サブプロシージャー・セクション

プロシージャー仕様書(P)

サブプロシージャー※2の始めと終わりにマークを付け、サブプロシージャー名 およ びエクスポートするかどうかを指⽰します

定義仕様書(D)

サブプロシージャーで使⽤される内部データ を記述します

演算仕様書(C)

グローバル・データおよび内部データの両⽅に対して実⾏される演算 および演算の 順序を記述します

※1 外部記述ファイル

ファイル⾃身が、フィールド名/属性/フィールド⻑を持っているため、プログラム内 でレコードおよびフィールドを記述する必要のないファイルです。 − これに対して、プログラム内でレコードおよびフィールドを記述するファイルをプロ グラム記述ファイルと呼びます

※2 サブプロシージャー

メイン・プロシージャーに対する補助的な処理または関数をサブプロシージャーとし て分けてコーディングします

(27)

© 2015 IBM Corporation 27

②プログラム・サイクル(RPGサイクル)

RPGサイクルとは

読み取った各レコードを処理していく一連のステップ

見出しおよび

明細行の出力

入力レコード

読み取り

合計演算

実行

合計出力

書出し

フィールド

転送

明細演算

実行

スター

LRがオン

なら終了

※LR:最終レコード標識

RPGは当初、報告書を作成す

るための簡易⾔語

レコードの読み取り、書き出

しを仕様書に明⽰的にコーデ

ィングするのではなく、コン

パイラーによって論理順序を

得る

一般的なRPGサイクルの例

1. ⾒出しを印刷

2. 得意先マスターを読み取り

3. 明細を得意先番号順に印刷

4. 最後に「レコード件数」と「

売掛⾦残高の合計」を印刷

(28)

© 2015 IBM Corporation 28

③標識

'1' (オン) または '0' (オフ) のいずれかが⼊れられる1バイトの文字

当初、命令の結果を⽰すか、あるいは命令の処理を条件付け (制御)

するために使⽤

【参考】よく使われる標識

LR(Last Record)標識:最終レコード標識

プログラムを終了させる場合に使⽤

LR標識をオンにセットすることにより、内部的に以下が⾏なわれる

1. 変数の初期設定

– 文字変数:ブランク

– 数字変数:ゼロ

– 標識:オフ

2. データベース・ファイルの読み取り開始位置のセット

– 最初のレコードが読み取られるようにセット

(29)

© 2015 IBM Corporation 29

(30)

© 2015 IBM Corporation 30

IBM i のプログラミング環境

オリジナル・プログラミング・モデル(OPM)

AS/400が登場時からのプログラミング環境

ソース・コードをコンパイルし、実⾏可能なプログラム・オブジ

ェクトを⽣成

プログラムは開始点(⼊口点)を1つだけ持つ

実⾏時に他のプログラムを呼び出すことが可能(動的プログラム

呼び出し)

OPMのコンパイラー

RPG, COBOL, CL, BASIC, PL/I

(31)

© 2015 IBM Corporation 31

ILEとは

Integrated Language Environment(統合化⾔語環境)

IBM i におけるプログラミング環境

ILEコンパイラーによって⽣成されたプログラムに共通の環境

提供されているILEコンパイラー

ILE RPG

ILE COBOL

ILE C

ILE C++

ILE CL

(32)

© 2015 IBM Corporation 32

ILEとOPMの比較

ILE

OPM

プログラムの形態 プログラム、

サービス・プログラム

プログラム

コンパイラー

コンパイルによりモジュー

ル・オブジェクトを⽣成(直

接実⾏不可)

コンパイルによりプログラム

を⽣成

プログラム⽣成

コンパイル、バインド

コンパイル

プログラム実⾏

活動化グループ

各⾔語ごとの実⾏単位

他のプログラムの

呼び出し

動的プログラム呼び出し

静的プロシージャー呼び出し

動的プログラム呼び出し

複数⾔語

複数⾔語の混在に対応

単一⾔語の使⽤にフォーカス

エラー処理

共通エラー処理

⾔語固有エラー処理

⾔語固有エラー処理

(33)

© 2015 IBM Corporation 33

ILEのプログラム構造

ILEのプログラム構造

1つまたは複数のモジュールから成り⽴つ

モジュールは、1つまたは複数のプロシージャーからなる

プログラム

モジュール1 モジュール2 プロシージャー1 プロシージャー2

プログラム

モジュール プロシージャー プロシージャー

(34)

© 2015 IBM Corporation 34

モジュール

ILEコンパイラーによって⽣成されるオブジェクト

オブジェクト・タイプ *MODULE

ILEオブジェクトの基本

単独では実⾏不能なオブジェクト

モジュールをバインドすることで実⾏可能なプログラムを⽣成

1つまたは複数のプロシージャーとデータ項目より構成

モジュール内のプロシージャーやデータ項目に、他のILEプログラムから

直接アクセスすることが可能

ILEの⾔語であれば、モジュールはすべて同じ概念

ILEプログラムでは、⾔語の異なる

モジュールを含めることが可能

再利⽤性と保守性の向上

コンパイル単位を小さくする

モジュール1 RPG プログラム1 プログラム2 モジュール3 C++ モジュール4 COBOL モジュール2 RPG

(35)

© 2015 IBM Corporation 35

プロシージャー

特定の処理を実⾏して呼び出し元に戻る

⾃己完結型の一連の高水準⾔語ステートメント

ILEはプロシージャー・ベースの⾔語のサポートを提供

プロシージャー・ベースの⾔語の特徴

ローカル変数の使⽤

プロシージャーに⼊るたびに作成される⾃動変数

プログラム間でデータを共有するための外部変数の使⽤

複数の⼊口点を持てる

モジュールのバインディングによる、呼び出しオーバーヘッド

の低減(静的プロシージャー呼び出し)

(36)

© 2015 IBM Corporation 36

ILEプログラム

ILEプログラム

1つ以上のコピーされたモジュールから⽣成

動的プログラム呼び出しにより制御を渡される

プログラムへの⼊り口点は一つ

コピーされた1つ以上のモジュールは、1つのプログラム⼊り口

プロシージャー(PEP)を含むことができる

ILEプログラムのPEPとして、どのモジュールのPEPを使⽤する

か制御できる

CRTPGMコマンドのENTMODパラメーターによって、どのモジュ

ールのPEPをプログラムの⼊り口点にするか選択

ENTMODに指定されなかったモジュールのPEPは無視される

(37)

© 2015 IBM Corporation 37

サービス・プログラム

サービス・プログラムとは

ILEプログラムまたはサービス・プログラムから直接アクセスされる、

実⾏可能なプロシージャーとデータ項目の集まり

アプリケーションで頻繁に呼び出される共通機能として使⽤される

サービス・プログラムの特徴

1つまたは複数のモジュール、他のサービス・プログラムから作成され

オブジェクト・タイプ *SRVPGM

モジュールのPEPは無視される

動的プログラム呼び出しによる

サービス・プログラムの実⾏はできない

サービスプログラム Proc1 Proc2 モジュール CALLP Proc1 モジュール CALLP Proc1 CALLP Proc2

(38)

© 2015 IBM Corporation 38

プログラムおよびプロシージャーの呼び出し

動的プログラム呼び出し

ILEプログラムまたはOPMプログラムに制御を渡す

他のOPMプログラムまたはILEプログラムを呼び出すことが可能

サービス・プログラムを呼び出すことはできない

静的プロシージャー呼び出し

ILEプロシージャーに制御を渡す

ILE⾔語のみで可能

以下のプロシージャー呼び出しが可能

同じモジュール内にあるプロシージャー

同じILEプログラムまたはサービス・プログラム内にある別のモジ

ュールのプロシージャー

他のILEサービス・プログラム内のプロシージャー

(39)

© 2015 IBM Corporation 39

ジョブ

B

ジョブ

A

活動化

活動化

ILEプログラムまたはサービス・プログラムを実⾏可能にするプロセス

プログラムが呼び出されると、システムにより活動化される

必要な静的データを割振る

サービス・プログラムへのプログラムのバインディングを完了する

活動化グループ

ILEプログラムやサービス・プログラムは

活動化グループ内で活動化される

プログラムの実⾏に必要な

リソースが含まれる

リソースが、活動化グループ

によって分離される

活動化グループプログラム 変数 A = 10 活動化グループ プログラム 変数 A = 20 プログラム プログラム命令

(40)

© 2015 IBM Corporation 40

活動化グループ

活動化グループの作成

• CRTPGM, CRTSRVPGMコマンドのACTGRPパラメーターで指定 − ACTGRP(活動化グループ名) – ユーザー指定活動化グループ – 同じ活動化グループ名を指定するプログラムで使⽤される − ACTGRP(*NEW) – システム指定活動化グループ – プログラム呼び出し時に新しい活動化グループを⽣成 − ACTGRP(*CALLER) – 呼び出し元プログラムの活動化グループを使⽤ » サービス・プログラム作成(CRTSRVPGM)のデフォルト − ACTGRP(*ENTMOD) – プログラム⾔語とストレージ・モデルにより活動化グループを⽣成 » プログラム作成(CRTPGM)のデフォルト – プログラムのエントリー・モジュールの属性を検索 – モジュール属性がRPGLE, CBLLE, CLLEの場合

» STGMDL(*SNGLVL) :活動化グループQILE

» STGMDL(*TERASPACE) :活動化グループQILETS – モジュール属性がRPGLE, CBLLE, CLLE以外の場合

(41)

© 2015 IBM Corporation 41

デフォルト活動化グループ

OPMデフォルト活動化グループ

OPMプログラムが使⽤する活動化グループ

ジョブ開始時にシステムによって⾃動的に作成される

ジョブ終了時にシステムによって削除される

– ユーザーが削除することはできない

ILEプログラムもデフォルト活動化グループを使⽤可能

ILEプログラムがDFTACTGRP(*YES)で作成された場合

ILEプログラムの呼び出しがOPMデフォルト活動化グループから

⾏われた場合

(42)

© 2015 IBM Corporation 42

活動化グループの管理

デフォルト以外の活動化グループの削除

ACTGRP(*NEW)

プログラムの終了で⾃動的に削除される

その他の活動化グループ

プログラムが終了しても削除されない

RCLACTGRPコマンドで使⽤されていない活動化グループを削除

ジョブの活動化グループの確認

WRKJOB オプション18

(43)

© 2015 IBM Corporation 43

ストレージ・モデル

ILEで使⽤するストレージ・モデル

• テラスペース・ストレージ • 単一レベル・ストレージ

テラスペースと単一レベル・ストレージの比較

• テラスペース・ストレージ・モデルの使⽤ − 単一割り振りで16MBより⼤きな動的ストレージを使⽤⼤きなバイト・ストリーム・ファイルへの効率的なアクセスなど テラスペース 単一レベル 局所性 通常は通常は所有しているジョ ブのみアクセス ポインターを持っている全てのジョブでアクセス可能 サイズ 合計100TB 16MB単位のものが多数 メモリー・マッピング のサポート 可能 不可 8バイト・ポインター によるアドレッシング 可能 不可 ジョブ間の共⽤ 共⽤メモリーAPIを使⽤して実 ⾏ 他のジョブへポインターを渡すことに よって、または共⽤メモリーAPI を 使⽤することによって実⾏

(44)

© 2015 IBM Corporation 44

プログラムの作成

ILEプログラムの作成

ソースコードをコンパイルしてモジュールを作成

CRTxxxMOD

モジュールをバインディングして、プログラムまたはサービス

・プログラムを作成

CRTPGM

:プログラム作成

– ⼊口モジュールを指定する

CRTSRVPGM:サービス・プログラム作成

バインディングの指定

– MODULEパラメーター

– BNDSRVPGMパラメーター

– BNDDIR BNDSRVPGMパラメーター

(45)

© 2015 IBM Corporation 45

バインディング・ディレクトリー

バインディング・ディレクトリー とは

モジュールまたはサービス・プログラムのリストを提供するオブジェク

オブジェクト・タイプ *BNDDIR

ILEプログラムまたはサービス・プログラムの作成に必要なモジュール

やサービス・プログラムを参照するために使⽤

ディレクトリーの項目にモジュールやサービス・プログラムの名前を指定

– 実際のオブジェクトの存在は確認しない

特定の機能や目的を持つモジュールやサービス・プログラムをパッケー

ジ化

個々のモジュールを指定せずに必要な機能を使⽤することが可能

– 例:数値計算⽤のバインド・ディレクトリー

(46)

© 2015 IBM Corporation 46

プログラムの作成例

CRTPGM PGM(TESTLIB/TEST)

MODULE(MOD01 MOD02)

ENTMOD(MOD01)

BNDSRVPGM(TESTLIB1/SRV01)

BNDDIR(TESTLIB1/BNDDIR01)

MOD02 Proc11 Proc12

MOD01

Srv02 Proc21 Proc22 Srv01 Proc02 Proc01 バインド・ディレクトリー BNDDIR01 ディレクトリー項目 SRV02, SRV03 Srv03 Proc31 Proc32 モジュールMOD01とMOD02を組み込む プログラムの入口モジュールはMOD01 プログラム TESTの作成 サービス・プログラムSRV01を組み込む バインド・ディレクトリーBNDDIR01の項目を組み込む

プログラム

TEST

(47)

© 2015 IBM Corporation 47

参考資料

IBM Knowledge Center IBM i 7.2

ILE概念

• http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/ilec/ilecmain.htm?lang=ja

ILE RPG解説書

• http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasd/rzasdmain.htm?lang=j a

ILE RPGプログラマーの手引き

• http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzasc/rzascmain.htm?lang=ja

IBM i インターネットセミナー

IBM i 6.1 (i5/OS V6R1) 開発⾔語としてILE –RPG(PDF)

(48)

© 2015 IBM Corporation 48

(49)

© 2015 IBM Corporation 49

Free Format RPG

ctl-opt bnddir

(

'ACCRCV'

)

;

dcl-f

custfile

usage

(

*update

)

;

dcl-ds

custDs

likerec

(

custRec

)

;

dcl-f

report

printer

;

read

custfile custDs;

dow

not

%eof

;

if

dueDate

>

%date

()

; // overdue?

sendOverdueNotice

()

;

write

reportFmt;

exec sql

insert

:name, :duedate

into

mylib/myfile;

endif

;

read

custfile custDs;

enddo

;

*inlr

=

'1';

dcl-proc

sendOverdueNotice;

sendInvoice

(

custDs : %date

())

;

end-proc

;

既存のRPGプログラマーは、

新しい文法を簡単に学べる

RPG以外のプログラマーにと

ても、固定形式より学びや

すい

既存のRPGプログラマーは、

新しい文法を簡単に学べる

RPG以外のプログラマーにと

ても、固定形式より学びや

すい

H仕様書 H仕様書 F仕様書 F仕様書 D仕様書 D仕様書 C仕様書 C仕様書

(50)

© 2015 IBM Corporation 50

既存RPGプログラマーにとっての

Free Formatのメリット

構文のインデントによりメンテナンス性向上

if, for, dowなどプログラムの構造が分かりやすい

多くのフラストレーションの解消

/FREE と /END-FREE が不要

固定形式での2⾏にわたる宣⾔を1⾏に

D getNextCustomer... D pr vs dcl-pr getNextCustomer;

⻑い文字列キーワードに対するコーディング・スペースの不⾜

の解消

D HSSFCellStyle c D 'org.apache.poi.hssf.-D usermodel.HSSFCellStyle' vs dcl-c HSSFCellStyle 'org.apache.poi.hssf.usermodel.HSSFCellStyle';

(51)

© 2015 IBM Corporation 51

新しくRPGを始めるプログラマーにとっての

Free Formatのメリット

固定形式と比べると、RPGの学習がとても容易

RDiエディターの色付け機能が改善されたことで、JavaやPHPな

どと同じようなルック・アンド・フィールでRPGのコードを扱

える

桁位置などに⼾惑う必要はなく、RPGの命令コードやキーワー

ドなどを覚えるだけでよい

以下をRPGプログラムから学べる

ビジネス・プログラミング

メッセージの⾃動ロギング(ジョブログ)

(52)

© 2015 IBM Corporation 52

RPG は まだ100% フリーではない

Free Formatのコードは、8 – 80カラムに制限

I 仕様書と O 仕様書は、固定形式のみ

外部記述ファイルを使⽤する傾向がある

RPGサイクルに関連したコードは、固定形式を使⽤

(53)

© 2015 IBM Corporation 53

新しい

RPG(Free Format)になっても変わらないもの

全てのバージョンのRPGについて、以下は変わらない

以前のバージョンの上位互換

RPGコンパイラーによる固定形式のサポート

ビジネス・プログラミングにおいて重要な十進数演算に対する

サポート

システムとの優れた統合

データベースの統合による容易なレコード・レベルI/Oのコーディ

ング

データ域のサポート

組込みSQLにおけるレコードレベルI/OとSQL I/Oの混在

ILE RPG

– 全OPMと全ILE言語の間の呼び出し

– RPGとJava間の呼び出し

– XML文書の読み込み

(54)

© 2015 IBM Corporation 54

追加のサポート

組込みSQL

SQLプリコンパイラーも新しいFree Format文法をサポート

RDi

RDi9.0.1以降は、Free Format RPGをサポート

Free Formatへの変換機能

H F D P 仕様書をFree Formatに変換しない

(55)

© 2015 IBM Corporation 55

Free Format RPGの前提条件

IBM i

IBM i 7.1以降

IBM i 7.1の場合、下記PTFを適⽤

– RPGⅣ コンパイラー:PTF SI51640 (APAR SE56767 :

http://www-912.ibm.com/n_dir/nas4apar.nsf/ALLAPARS/SE56767 )

– SQL プリコンパイラー:DB2 PTF Group SF99701 レベル 26 以降

クライアントPC(Editor)

Rational Developer for i 9.0.1以降

※5250画面のSEUではFree Formatはサポートされません。

(56)

© 2015 IBM Corporation 56

参考資料

フリーフォームRPG紹介およびIBM Rational

Developer for i 9.0.1への更新ガイド

http://www.ibm.com/developerworks/jp/rational/library/e

m/cms/rdi90/freeformrpg/

目次

1. フリーフォームRPG

(57)

© 2015 IBM Corporation 57

4.Free Format RPG

コーディング・サンプル

(58)

© 2015 IBM Corporation 58

1. 事前準備

• Rational Developer for i のインストール

• このチュートリアルでは、開発ツールとして、Rational

Developer for i を使⽤しています。

• 事前準備として、Rational Developer for i を開発⽤PCにイン

ストールください。

• Rational Developer for i のインストール⽅法は下記リンク先を

ご参照ください。

• Rational Developer for i V9.0 インストール・ガイド

http://www.ibm.com/developerworks/jp/rational/library/em

/cms/rdi90/installationguide/

• Rational Developer for i V9.1 インストール・ガイド (社内リンク)

• iRAM資料ダウンロードリンク:

https://w3-

03.ibm.com/tools/cm/iram/oslc/assets/D16D43E3-D62A-9FE5-80D3-5E8E153791A4/1.0

(59)

© 2015 IBM Corporation 59

2.RPGⅣ初心者向けチュートリアル

Coding in Free-Form RPG IV - a beginner‘s tutorial

Chapter 1 Hello World

• ソースの編集、コンパイル⽅法

• コンパイル・エラー時のエラー・メッセージの⾒⽅ • プルグラムの実⾏

• プログラムのデバッグ

Chapter 2 General info about RPG

• RPG概要

Chapter 3 Variables and procedures

• 定数、変数定義 • プロシージャー

Chapter 4 Introduction to files

• データベース・ファイルの使⽤

Chapter 5 Display files

• 表⽰ファイルの資料

参考リンク:Coding in Free-Form RPG IV - a beginner‘s tutorial(英語)

• https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/We

13116a562db_467e_bcd4_882013aec57a/page/Coding%20in%20Free-Form%20RPG%20IV%20-%20a%20beginner%27s%20tutorial

(60)

© 2015 IBM Corporation 60

Chapter 1 Hello World

初期セットアップ

1. IBM Rational developer for i を起動

2. IBM i の接続を作成

3. ライブラリーを作成

4. ソースファイル「QRPGLESRC」を作成

5. ソールメンバー「HELLO.RPGLE」を作成

6. 作成したメンバーを編集

初期セットアップの詳細な手順については、下記リンク先を参照くだ

さい。

「さわってみよう Rational Developer for i V9.0 ―ILE RPGアプリケ

ーションの操作演習資料―」

http://www.ibm.com/developerworks/jp/rational/library/em/c

ms/rdi/rdi90handson/

(61)

© 2015 IBM Corporation 61

Chapter 1 Hello World

RPGプログラムの編集

1. 以下のコードを⼊⼒

※1-7列目までは使⽤できません。Free-formatで使⽤できる列は、8-80列のみです列の番号は、編集画面の上に記載されています。また、カーソルを合わせるとその列

番号が表⽰されます

dsply 'Hello World'; return;

RPGプログラムのコンパイル

1. ソースメンバー「HELLO.rpgle」を右クリックし、コンパイル(プロンプト) →CRTBNDRPGを選択 2. 「リソースの保存」画面が表⽰されたら − 「OK」をクリックし、保存 3. パラメータを指定し、「OK」をクリックし、 − コンパイルを実⾏ – ※パラメーターは特に指定がなければ デフォルトでOK

(62)

© 2015 IBM Corporation 62

Chapter 1 Hello World

RPGプログラムの実⾏

1. 5250エミュレーターを起動し、ログイン

2. 以下のコマンドを実⾏し、RPGプログラムを実⾏ − ===> CALL yourlibrary/HELLO

実⾏後、5250エミュレーターに「DSPLY Hello World」のメッセージが表⽰されます ※表⽰されない場合は、「F10」キー(詳細なメッセージの組み込み)を押してください。 [補⾜]RDiからRPGプログラムを実⾏するコマンドを発⾏することも可能です。

1. RPGプログラムを右クリック→「実⾏(プロンプト)」→「対話式」を選択 −実⾏後、5250エミュレーターに「DSPLY Hello World」のメッセージが表⽰されます

※RDiの接続を対話式ジョブに関連付けるために以下の 手順を事前に実施してください

1. 5250 エミュレーターを起動し、ログイン 2. 以下のコマンドを実行

3. STRRSESVR NAME(yourhost) ※yourhost: IBM i の接続名

(63)

© 2015 IBM Corporation 63

Chapter 1 Hello World

コンパイル・エラーの対処例 1/2

ここでは、コンパイラー・エラーの例を紹介します

1. HELLO.RPGLEのソースメンバーを以下のように編集

• ‘Hello World’をnameに変更 dsply name; return;

2. 再度、コンパイルを実⾏

• 重要度30のエラーによりコンパイルが失敗します • RDiのエラー・リストに「RNF7030: 名前または標識NAMEが定義されていない。」 が表⽰されます • RNF7030のエラーをダブルクリックすると「name」がハイライトされ、エラーの箇 所を確認できます • ※RPGIVでは、変数名は⼤文字、小文字を区別されません。そのため、エラー・リス トの「NAME」とソース内の「name」は同じであることに注意ください。

(64)

© 2015 IBM Corporation 64

Chapter 1 Hello World

コンパイル・エラーの対処例 2/2

3. エラー箇所の修正

• nameが定義されていないというエラーに対して、以下のように定義します。 1. プログラムの一番始めにdcl-sを使⽤し、nameを定義

−dcl-s name char(10) inz('Jim');

−dsply name; −return;

4. 再度、コンパイルを実⾏

• エラーなく、コンパイルが成功します

5. RPGプログラムを実⾏

• 実⾏後、5250エミュレーターに「DSPLY Jim」のメッセージが表⽰されます

DSPLY Hello World

DSPLY Jim

(65)

© 2015 IBM Corporation 65

Chapter 1 Hello World

プログラムのデバッグ 1/2

• デバッグの前にコンパイル時に「デバッグ⽤ビュー」のパラメーターを指定し、再度コンパ イルします。 1. ソースメンバー「HELLO.rpgle」を右クリックし、コンパイル(プロンプト)→CRTBNDRPGを選択 2. 「デバッグ⽤ビュー(DBGVIEW )」パラメータに「*LIST」指定し、「OK」をクリックし、 − コンパイルを実⾏ – ※ 「デバッグ⽤ビュー(DBGVIEW )」パラメータは、*NONEと*STMT以外を指 定します。

(66)

© 2015 IBM Corporation 66

Chapter 1 Hello World

プログラムのデバッグ 2/2

• デバッガーを開始し、プログラムを実⾏し、デバッグを⾏ないます

※ここでは、5250エミュレーターからの手順を紹介しています。RDiにもデバッグの機能が備わっ

ています。手順は、「さわってみよう Rational Developer for i V9.0 ―ILE RPGアプリケーショ ンの操作演習資料―」の「5 プログラムのデバッグ」をご参照ください。 1. 以下のコマンドを実⾏し、デバッガーを開始 −===> STRDBG PGM(yourlibrary/HELLO) 2. dsply name;の⾏にカーソルを合わせ、F6キーを押し、停止点を追加、F3キーを押し て、プログラムを終了 3. 以下のコマンドを実⾏し、プログラムを実⾏ −===> CALL yourlibrary/HELLO

4. 停止点であるdsply name;のnameにカーソルを合わせ、F11キーを押し、name変数の値

を表⽰ • Name返信に‘Jim’の値が⼊っていることが確認できます。 5. F3キーを押して、プログラムを終了 6. 以下のコマンドを実⾏し、デバッガーを終了 −===> ENDDBG

NAME = 'Jim '

(67)

© 2015 IBM Corporation 67

Chapter 2 General info about RPG

RPGプログラムでは、列ごとに以下の制限があります

8 – 80列:

Free Formatのコード

1-5列、81列以降:

コメント

7列、8列:

固定形式のコード

I仕様書とO仕様書、また、一部の記述は固定形式を使⽤します

このチュートリアルでは、Free Format のみを使⽤します

(68)

© 2015 IBM Corporation 68

Chapter 3 Variables and procedures

定義ステートメント:DCL-x

定数(constant):dcl-c

独⽴フィールド(standalone field):dcl-s

データ構造(data structure):dcl-ds

配列(array):dcl-s xxx dim(n)

プロトタイプ(prototype):dcl-pr , end-pr

プロシージャー(procedure):dcl-proc , end-proc

プロシージャー・インターフェース():dcl-pi , end-pi

(69)

© 2015 IBM Corporation 69

サンプル・プログラム

定数(constant):dcl-c

以下のコードをソースメンバーに貼り付け、コンパイル

し、実⾏します

dcl-c

MAX_ELEMS

100

;

dcl-c

default_city_name

'London';

dsply

max_elems

;

dsply

default_city_name

;

return;

定数を定義

MAX_ELEMS

に100を代⼊

実⾏結果

DSPLY 100

DSPLY London

定数を定義

Default_city_name

に’London‘を代⼊

(70)

© 2015 IBM Corporation 70

サンプル・プログラム

独⽴フィールド(standalone field):dcl-s

DSPLY i = 1

DSPLY i = 2

DSPLY i = 3

実⾏結果

dcl-s

num

int(

10

);

for

num

=

1

to

3

;

dsply

('i = '

+

%char

(

num

));

endfor;

return;

numという名前で独⽴フィールド

を定義

int(

10

)

:10digitsの整数

for loop

%char

:char型に変換

+

:文字列の連結

(71)

© 2015 IBM Corporation 71

サンプル・プログラム

データ構造(data structure):dcl-ds

dcl-ds

info

qualified

;

name

char

(

10

)

inz

(

'Sam'

);

salary

packed

(

9

:

2

)

inz

(

50000.25

);

end-ds

;

dcl-ds

otherInfo

likeds

(

info

)

inz

(

*likeds

);

dsply

(

info

.

name

+

' has a salary of'

+

%char

(

info

.

salary

));

otherInfo

.

name

=

'Joe'

;

otherInfo

.

salary

+=

10000

;

dsply

(

otherInfo

.

name

+

' has a salary of'

+

%char

(

otherInfo

.

salary

));

return;

infoという名前のデー

タ構造を定義

qualified

キーワー

ド:データ構造名の

後にピリオドとサブ

フィールド名を続け

て指定

likeds

キーワード:別のデータ構

造と同様に定義。サブフィールドは

、パラメーターに指定された親デー

タ構造のサブフィールドと同じ

inz(

*likeds

)

:親データ構造と同

じ⽅法でサブフィールドを初期化

実⾏結果

DSPLY Sam has a salary of50000.25

DSPLY Joe has a salary of60000.25

(72)

© 2015 IBM Corporation 72

サンプル・プログラム

配列(array):dcl-s xxx dim(n)

実⾏結果

DSPLY 2015-02-10 2015-02-11 2016-02-10

dcl-s

dates

date(

*iso

)

dim(

3

);

dates

(

1

) =

%date

();

// the current date

dates

(

2

) =

dates

(

1

) +

%days

(

1

);

// tomorrow

dates

(

3

) =

dates

(

1

) +

%years

(

1

);

// next year

dsply

(

%char

(

dates

(

1

)) +

' '

+

%char

(

dates

(

2

)) +

' '

+

%char

(

dates

(

3

)));

return;

datesという名前の配列

を定義

date(

*iso

)

:ISO 形式

(yyyy-mm-dd)の日付タ

イプ

dim

キーワード:要素の

数を指定

%date

()

:パラメータが指

定されない場合、現在の日

付を返す組み込み関数

%days

(

1

)

:パラメータの日

数を加算

%years

(

1

)

:パラメータの

年数を加算

(73)

© 2015 IBM Corporation 73

サンプル・プログラム

プロトタイプ(prototype):dcl-pr , end-pr

dcl-pr

qcmdexc

extpgm('QCMDEXC');

theCmd

char(

3000

)

const;

cmdLne

packed(

15

:

5

)

const;

dbcs

char(

3

)

const options(

*nopass

);

end-pr

;

dcl-s

cmd

varchar(

100

);

cmd

=

'DSPJOB OUTPUT(*PRINT)';

qcmdexc

(

cmd

:

%len

(

cmd

));

qcmdexc

('WRKSPLF'

:

7

);

return;

実⾏結果

→DSPJOB OUTPUT(*PRINT)コマンドを実⾏

→WRKSPLFコマンドの実⾏結果画面を表⽰

qcmdexcという

名前のプロトタ

イプを定義

パラメータ

の定義

※dcl-prでEXTPROC、EXTPGMキーワードを指定しない場合、デフォルトはEXTPROCキーワード EXTPROC:プロシージャー、Javaメソッドの呼び出し EXTPGM:プログラムの呼び出し

※コマンド実⾏ (QCMDEXC) API :1 つのコマンドを実⾏する IBM 提供のプログラム ※EXTPROC、EXTPGMキーワードのパラメーターは⼤文字と小文字を区別します

const

:読み取り専⽤参

照パラメーターを指定

options(

*nopass

)

パラメータの省略可

パラメータ・セ

パレーターは、

コロン(:)

※コンマでない

(74)

© 2015 IBM Corporation 74

サンプル・プログラム(1)

プロシージャー(procedure):dcl-proc , end-proc

プロシージャー・インターフェース():dcl-pi , end-pi

/if defined

(

*CRTBNDRPG

)

ctl-opt

dftactgrp(

*no

)

actgrp(

*new

);

/endif

ctl-opt

option(

*srcstmt

);

dcl-s

num

int(

10

)

inz(

25

);

print

('his message is much longer than the 52 '

+

'characters that DSPLY allows. '

+

'The value of variable "num" is '

+

%char

(

num

));

return;

DSPLY命令コードは最⼤値52byteという制限があります。ここでは、DSPLY

命令コードを使⽤しないprintのサンプル・プログラムをご紹介します。

CRTBNDRPGコマンドによって コンパイルする場合 活動化グループを指定 ACTGRPパラメーターによって指定された活動 化グループに関連付け、静的バインドを許可

Print

プロシー

ジャーの

呼び出し

次ページにつづく

コンパイル・リストにソース・ステー トメントと同じ⾏番号を使⽤すること を指定

(75)

© 2015 IBM Corporation 75

サンプル・プログラム(2)

プロシージャー(procedure):dcl-proc , end-proc

プロシージャー・インターフェース():dcl-pi , end-pi

dcl-proc

print

;

dcl-pi

*n

;

msg

varchar(

5000

)

const;

end-pi

;

dcl-pr

printf

extproc(

*dclcase

);

template

pointer value options(

*string

);

dummy

int(

10

)

value options(

*nopass

);

end-pr

;

dcl-c

NEWLINE

X'15';

printf

(

msg

+

NEWLINE

);

end-proc

print

;

前ページのつづき

printという名前のプロシージャーを定義

his message is much longer than the 52 characters that DSPLY allows. The valu

e of variable "num" is 25

実⾏結果

改⾏(

X‘15’

)をNEWLINE

という名前で定義

プロシージャ

ー・インター

フェースを指

定(名前は不

要)

extproc(

*dclcase

)

外部名が、「printf」と同

じ名前であることを⽰す

(76)

© 2015 IBM Corporation 76

Chapter 4 Introduction to files

ファイル・ステートメント:DCL-F

DCL-Fで開始

ファイル名

キーワード

DEVICEキーワードを最初のキーワードにする

– DISK, PRINTER, WORKSTN

– DEVICEキーワードのデフォルトは DISK

(77)

© 2015 IBM Corporation 77

サンプル・プログラム

ファイルのレコードの読み込み

事前準備:最初に以下のコマンドを実⾏し、ファイルを作成

===> DSPOBJD OBJ(QGPL/QRPG*) OBJTYPE(*FILE)

OUTPUT(*OUTFILE) OUTFILE(QTEMP/RPGTESTF)

dcl-f

rpgtestf

usropn;

open

rpgtestf

;

read

rpgtestf

;

dow not

%eof

;

dsply

ODOBNM

;

read

rpgtestf

;

enddo;

close

rpgtestf

;

return;

実⾏結果

DSPLY QRPGLESRC

DSPLY QRPGSRC

rpgtestfをファイルと

して定義

DEVICEキーワードのデフ

ォルトは DISK

=⼊⼒⽤

としてオープン

usropn

:ファイルの最

初のオープンはプログ

ラマーが制御

open

ファイルのオープン

read

ファイルの読み込み

close

ファイルのクローズ

ファイルの最初のレコー

ドから最後のレコードま

で一⾏ずつ読み込み

(78)

© 2015 IBM Corporation 78

サンプル・プログラム

プリンターファイルへの書き出し

dcl-c

QPRINT_LEN

132

;

dcl-f

qprint

printer(

QPRINT_LEN

);

dcl-ds

qprint_ds

len(

QPRINT_LEN

)

end-ds;

*inlr

=

‘1’;

qprint_ds

=

‘Hello’;

write

qprint qprint_ds

;

qprint_ds

=

'world';

write

qprint qprint_ds

;

スプール・ファイルの表示 ファイル . . . : QPRINT ページ/行 1/1 制御 . . . 桁 1 - 75 検索 . . . *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+ Hello world

printer

:プリンターへのアクセ

スを提供し、印刷出⼒の様式を記述

数値パラメータで⻑さを指定し、プ

ログラム記述ファイルを作成

132byteの

データ構造

を定義

Write

:プリンターファイル

「qprint」に「qprint_ds」

を書き出し

実⾏結果

(79)

© 2015 IBM Corporation 79

Chapter 5 Display files

表⽰装置ファイルの使⽤

DCL-Fで開始

ファイル名

キーワード

DEVICEキーワード:WORKSTN

セミコロンで終了

参照

関連したドキュメント

First three eigenfaces : 3 個で 90 %ぐらいの 累積寄与率になる.

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

・大都市に近接する立地特性から、高い県外就業者の割合。(県内2 県内2 県内2/ 県内2 / / /3、県外 3、県外 3、県外 3、県外1/3 1/3

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

※立入検査等はなし 自治事務 販売業

※ゴールドと、シルバーの「BLUEMORIS」ロゴを大きくあしらっ たパーカーです。ポリエステル

Azure Cloud Native Dojo Azure Light-Up.. ©Microsoft

Power Supply Ground Pins, Connected to Source of Internal LS FET 6 VR_RDY VR_RDY Indicates the Controller is Ready to Accept Intel proprietary interface Commands 7 VIN Input Voltage