このドキュメントでは、Natural をバッチモードで実行する場合の特別な考慮事項について説明します。 次のトピックについて説明します。
Natural では、次の 2 つの処理モードが区別されます。
対話式モード(Natural スタジオで実行)
バッチモード
2 つのモードの主な違いは、次のとおりです。対話式モードでは、コマンドとデータはユーザーがキーボードから入力し、出力は画面に表示されます。 バッチモードでは、ユーザーの操作なしに、入力はファイルから読み取られ、出力はファイルに書き込まれます。
Natural をバッチジョブとして実行する場合は、バッチジョブをサブミットしたユーザーと Natural との対話は不要です。 バッチジョブは、順番の決まった入力データを受け取って順番に実行されるプログラムで構成されます。
バッチモードは、大量のデータ処理を定期的に行う場合に便利です。
バッチモードをアクティブにするには、パラメータ BATCHMODE
を使用します。
Natural セッションをバッチモードで開始するには
次のようにダイナミックパラメータ
BATCHMODE
を使用して、Natural を起動します。
natural BATCHMODE
上記の呼び出し(BATCHMODE
パラメータのみの指定)は、必要な入力および出力チャネルがコンフィグレーションユーティリティですでに定義されていることを前提にしています。
入力および出力チャネルの詳細については、このセクションで後述する「バッチモードでの Natural
の使用」を参照してください。
パラメータファイル内のバッチモード関連プロファイルパラメータの詳細については、『コンフィグレーションユーティリティ』ドキュメントの「バッチモード」を参照してください。
必要な入力および出力チャネルをダイナミックパラメータとして上記の呼び出しに追加することもできます。 これについては、このセクションで後述する「バッチモードのサンプルセッション」で示します。 上記の呼び出しでダイナミックパラメータとして指定された入力および出力チャネルは、パラメータファイル内のチャネル定義を上書きします。
出力チャネルとして定義されているファイルを確認します。 このファイルの末尾に、セッションが正常に終了したことを示すメッセージが含まれている必要があります。
バッチモードの Natural セッションは、セッション中に次のいずれかを検出すると終了します。
注意:
バッチ入力ファイルで入力終了条件が発生した場合も、バッチセッションは終了します。
この場合は、出力チャネルとして定義されているファイルに、予期しない終了を示すメッセージが含まれます。
Natural セッションをバッチモードで開始するには、ダイナミックパラメータ
BATCHMODE
を指定する必要があります。
さらに、入力および出力チャネルを定義する必要があります(下記参照)。
重要:
入力チャネル CMSYNIN
または
CMOBJIN
と出力チャネル CMPRINT
は、バッチモードに常に必要です。
以下では次のトピックについて説明します。
バッチモードでは、次のパラメータを使用できます。
パラメータ | 説明 |
---|---|
CMSYNIN |
Natural コマンドを含むバッチ入力ファイル(およびオプションで Natural
プログラムの実行中に INPUT
ステートメントによって読み込まれるデータ)を定義します。
|
CMOBJIN |
INPUT
ステートメントによって読み込まれるデータを含むバッチ入力ファイルを定義します。 このデータは、関連する
RUN または
EXECUTE
コマンドの直後に、パラメータ CMSYNIN で定義されたファイルに配置することもできます。
|
CMPRINT |
Natural プログラムの
DISPLAY 、PRINT 、および
WRITE
ステートメントから生成される出力用のバッチ出力ファイルを定義します。
|
CMPRTnn |
セッション中に実行される Natural
プログラムによって参照される追加のレポート用の出力ファイルを定義します。 nn は、DISPLAY 、PRINT 、または
WRITE
ステートメントで使用されるレポート番号に対応する 01~31 の 2 桁の 10 進数です。
|
CMWRKnn |
セッション中に実行される Natural
プログラムによって参照されるワークファイルを定義します。 nn は、READ WORK FILE または
WRITE WORK FILE
ステートメントで使用される番号に対応する 01~32 の 2 桁の 10 進数です。
|
NATLOG |
パラメータ CMPRINT
で定義されたバッチ出力ファイルに書き込めなかったメッセージをログに記録します。 バッチモードでは NATLOG
を有効にすることをお勧めします。
|
次のパラメータは、入力ファイルがエンコードされるコードページと出力ファイルがエンコードされるコードページを指定します。
パラメータ | 説明 |
---|---|
CPSYNIN |
コマンドのバッチ入力ファイルのエンコードに使用するコードページを指定します。
このファイルは、パラメータ CMSYNIN で定義されます。
|
CPOBJIN |
データのバッチ入力ファイルのエンコードに使用するコードページを指定します。
このファイルは、パラメータ CMOBJIN で定義されます。
|
CPPRINT |
バッチ出力ファイルのエンコードに使用するコードページを指定します。 このファイルは、パラメータ
CMPRINT
で定義されます。
|
CMSYNIN
および CMOBJIN
のエンコード:
コードページが入力ファイル CMSYNIN
または
CMOBJIN
のいずれかに指定されている場合は、入力ファイル内のデータはコードページを使用してエンコードされているとみなされます。
コードページが入力ファイル CMSYNIN
または
CMOBJIN
のいずれにも指定されていない場合は、入力ファイル内のデータは Natural パラメータ
CP
で指定されたデフォルトのコードページを使用してエンコードされているとみなされます。
コードページが Natural パラメータ CP
で指定されていない場合は、入力ファイル内のデータは現在のシステムコードページを使用してエンコードされているとみなされます。
CMPRINT
のエンコード:
コードページが出力ファイル CMPRINT
に指定されている場合は、出力データはこのコードページを使用してエンコードされます。
コードページが出力ファイル CMPRINT
に指定されていない場合は、Natural
パラメータ CP
で指定されたデフォルトのコードページを使用してエンコードされます。
コードページが Natural パラメータ CP
で指定されていない場合は、出力データは現在のシステムコードページを使用してエンコードされます。
エンコード/デコードに失敗すると(例えば、ファイルのエンコードに使用されたコードページに含まれていない
CMPRINT
に文字が書き込まれる場合)、バッチジョブはエンコード/デコードエラーが発生したファイルを示すスタートアップエラー
42(バッチモードドライバエラー)で終了します。
これらの各パラメータで、特に、UTF-8 をコードページとして指定することができます。 これにより、UTF-8 でエンコードされた Unicode データの読み書きが可能になります。
この例は、Natural をバッチモードで開始する方法を示します。 簡単な Natural
プログラムが実行され、データ項目がバッチ入力ファイルから取得されます。 項目が INPUT
ステートメントで処理されると、続けて
DISPLAY
ステートメントによってデータがバッチ出力ファイルに書き込まれます。 その後、Natural が終了します。
この例では、ライブラリ SYSEXBAT
に保存されているプログラム RECCONT
を使用します。
注意:
このライブラリに保存されているオブジェクトについては、ライブラリ SYSEXBAT
のテキスト
A-README
を参照してください。
以下の呼び出しによって、サンプルセッションが呼び出されます。
natural BATCHMODE CMSYNIN=cmd.txt CMOBJIN=data.txt CMPRINT=out.txt NATLOG=ALL
注意:
この呼び出しでは、すべてのファイルが現在のディレクトリにあり出力がこのディレクトリに書き込まれることを前提としています。
ファイルが別のディレクトリにあるか、出力が別のディレクトリに書き込まれる場合は、パスを指定する必要があります。
上記の呼び出しのパラメータについて、以下で説明します。
BATCHMODE
パラメータ BATCHMODE
は、バッチモードを有効にし、システム変数
*DEVICE
の値を "BATCH" に設定します。
CMSYNIN=cmd.txt
バッチ入力ファイル cmd.txt は、ファイルシステムに保存されるテキストファイルです。
このファイルの内容を以下に示します。 これには、ライブラリ SYSEXBAT
へのログイン用、Natural プログラム
RECCONT
の実行用、および Natural セッションの終了用の Natural システムコマンドが含まれます。
LOGON SYSEXBAT EXECUTE RECCONT FIN
Natural プログラム RECCONT
には、以下の内容が含まれます。
DEFINE DATA LOCAL 1 #firstname (A10) 1 #lastname (A10) END-DEFINE INPUT (IP=OFF AD=M) #firstname #lastname DISPLAY #firstname #lastname END
CMOBJIN=data.txt
プログラム RECCONT
の INPUT
ステートメントは、バッチ入力ファイル
data.txt で定義されたデータを使用します。 これは、ファイルシステムに保存されるテキストファイルです。
このファイルの内容を以下に示します。
Ben % Smith
注意:
文字 "%" は、情報が次の行に続くことを示します。
CMPRINT=out.txt
プログラム RECCONT
の DISPLAY
ステートメントは、ファイルシステムに作成されたバッチ出力ファイル out.txt にデータを書き込みます。
このファイルの内容を以下に示します。
NEXT LOGON SYSEXBAT Logon accepted to library SYSEXBAT. NEXT EXECUTE RECCONT DATA Ben % DATA Smith Page 1 25.04.05 13:39:09 #FIRSTNAME #LASTNAME ---------- ---------- Ben Smith NEXT FIN NAT9995 Natural session terminated normally.
NATLOG=ALL
上記の呼び出しでサンプルセッションを呼び出すと、すべてのタイプのメッセージが含まれるログファイルが作成されます(これには、バッチ入力および出力ファイルの名前も含まれます)。
ログファイルは通常、ローカルコンフィグレーションファイルで定義される Natural の一時ディレクトリに作成されます。
NATLOG
パラメータの説明も参照してください。
以下の図は、Natural がバッチモードで入力の読み取りおよび出力の書き込みを行うさまざまな方法を示しています。
上の図に示されているように、以下のいずれかの方法で続行できます。
CMOBJIN および
CMSYNIN
異なるファイルがバッチ入力に使用されます。 1 つのファイルには Natural
コマンドが含まれ、他のファイルにはデータが含まれます。
natural BATCHMODE CMSYNIN=cmd.txt CMOBJIN=data.txt CMPRINT=out.txt
CMSYNIN
1 つのファイルがバッチ入力に使用されます。 これには Natural コマンドとデータの両方が含まれます。
natural BATCHMODE CMSYNIN=data.txt CMOBJIN=data.txt CMPRINT=out.txt
注意:
バッチ入力ファイルを 1 つだけ使用する場合でも、パラメータ CMSYNIN
および
CMOBJIN
の両方を指定する必要があります。
両方のパラメータは同じファイルを参照する必要があります。
CMOBJIN および
STACK
1 つのファイルがバッチ入力に使用されます。 これにはデータが含まれます。 Natural コマンドは、プロファイルパラメータ
STACK
で指定されます。
natural BATCHMODE CMOBJIN=data.txt STACK="(LOGON SYSEXBAT; RECCONT;FIN)"
システム変数 *DEVICE
は、Natural がバッチモードまたは対話式モードのどちらで実行されているかを示します。
モード | 説明 |
---|---|
バッチモード | *DEVICE には、値
"BATCH" が含まれます。 この値は、パラメータ
BATCHMODE
で設定されます。
|
対話式モード | *DEVICE
には、"BATCH" 以外の値が含まれます。 ほとんどの場合は、値
"VIDEO" が含まれます。
|
例:
IF *DEVICE = "BATCH" THEN WRITE 'This is the background task' ELSE WRITE 'This is the interactive session' END-IF
Natural をバッチモードで実行している場合は、以下のような制限があります。
対話式の入力または出力はできません。
マウスサポートはありません。
異なる文字フォントは使用できません。
INPUT
ステートメントに対するデータのみが処理可能です。 ダイアログ入力は条件付きでのみサポートされます(「バッチモードで Natural
マップおよびダイアログを使用するためのヒント」を参照)。
出力表示は GUI 形式ではありません(文字ベースの出力です)。
色およびビデオ属性は、CMPRINT
で定義されるバッチ出力ファイルに書き込まれます。
充填文字は INPUT
ステートメント内に表示されません。
特定の Natural システムコマンドはバッチモードでは実行できず、無視されます。 この制限が適用される各システムコマンドの注意事項については、『システムコマンド』ドキュメントを参照してください。
アプリケーションがバッチモードでも対話式モードでも実行できるように設計されている場合は、以下の点を考慮する必要があります。
Natural 内では、入力データを読み込む方法が 2 つあります。
マップ(INPUT
ステートメントまたは Natural オブジェクトのマップ)を使用
ダイアログ(Natural オブジェクトのダイアログ)を使用
バッチモードでは、INPUT
ステートメントを使用してデータを処理する必要があります。ダイアログではバッチモードでデータを処理できません。
ダイアログではデータを移動したり制御したりする端末コマンドもサポートされません。 それでも、ダイアログをバッチモードで実行できます。
ただしこの場合は、ダイアログを以下の方法で変更する必要があります。
ダイアログ属性 VISIBLE
を
"FALSE" に設定する必要があります。
AFTER-OPEN
イベント内に、バッチモード処理中にデータを読み込むためのコードを挿入する必要があります。
Natural をバッチモードで実行する場合は、入力データを取得するために INPUT
ステートメントをコード化します。
対話式モードでダイアログが表示されるように、ダイアログ属性 VISIBLE
を
"TRUE" に設定する必要があります。
AFTER-OPEN
イベントの例:
IF *DEVICE EQ "BATCH" THEN /* Batch mode processing: call a map */ INPUT USING MAP "BATCHINP" #p1 #p2 #p3 /* ... further data processing ... */ /* Close dialog immediately */ CLOSE DIALOG *DIALOG-ID ELSE /* Interactive mode processing: make dialog visible */ #DLG$WINDOW.VISIBLE = TRUE END-IF
CLOSE
イベントがある場合は、バッチモードで該当のコードに GUI
アクションが含まれていないことを確認します。
CLOSE
イベントの例:
IF *DEVICE NE "BATCH" THEN /* ... GUI actions ... */ END-IF