バージョン 4.2.5
 —  エディタ  —

ルール処理

このセクションでは、存在する処理ルールのタイプおよびその編集方法について説明します。


フィールド関連の処理ルール

3 つのタイプのフィールド関連の処理ルールを定義できます。

インライン処理ルールはマップソース内で定義され、名前は割り当てられません。 インラインルールでは、Predict を使用できなくても構いません。

Predict フリールールには名前が割り当てられ、Predict に格納されます。

フリールールを編集するには、マップ作成時にルールを入力し、そのルールに名前を割り当てます。 ルール名を割り当てると、インラインルールを Predict ルールにできます。削除すると Predict ルールをインラインルールにできます。

Predict の自動ルールはデータベースフィールドに適用され、Predict 管理者によって定義されます。 他の Natural オブジェクトのデータ定義からフィールドを選択すると、そのフィールドのすべての自動ルールがマップ定義にリンクされます。 すべての自動ルールは連結され、単一のマップルールとして処理されます。

自動ルールのランクはマップ設定に定義されています(デフォルトは 1)。

自動ルールは、マップエディタを使用して変更することはできません。 ただし、コマンド P=n を使用するか、または古いランクを上書きして、異なるランクを割り当てることができます。

注意:
リンクされた Predict 処理ルールを持つフィールドの名前を変更すると、そのルールは失われるため再度リンクする必要があります。

処理ルールのソースコード内のアンパサンド(&)は、そのルールを定義したフィールドの完全修飾名によって、ダイナミックに置き換えられます。 配列の添字はこの置き換えの影響を受けません。次の例に示すように、アンパサンド(&)の後に明示的に添字表記を指定する必要があります。

例:

IF &    = ' ' THEN REINPUT 'ENTER NAME' MARK *&   /* For a scalar field
IF &(1) = ' ' THEN MOVE 'X' TO &(*)               /* For an array field

処理ルールのソースコード内でフィールド名表記 &.field-name を使用すると、ビュー名を持つフィールドを明示的に指定することなく、データベースフィールド間の値の完全性を照合する DDM 固有のルールを定義できます。 field-name として、DDM に定義されたデータベースフィールドの名前を指定します。コンパイル時には、対応するビュー名でアンパサンド(&)が置き換えられ、フィールドがダイナミックに指定されます。 これにより、フィールドを取得するビューに関係なく、特定のフィールドに同じ処理ルールを使用できます。

Top of page

ファンクションキー関連の処理ルール

次の 2 種類のファンクションキー関連の処理ルールを定義できます。

ファンクションキー関連の処理ルールを使用すると、プログラム依存のファンクションキー(PF キー)にマップ処理中の処理を割り当てることができます。 すでにプログラムでコマンドが割り当てられている PF キーの場合、ルールは処理されずにこのコマンドが実行されます。

例:

IF *PF-KEY = 'PF3'
   ESCAPE ROUTINE
END-IF

このルールが実行されると、それ以上ルール処理が行われずに、マップ処理が終了します。

Top of page

処理ルールの編集

処理ルールの編集は、フィールドコマンド .P を入力するか、または行コマンド ..E を発行してから処理ルールの編集を実行するフィールドの横にファンクションコード P を配置して呼び出します。 PF キー処理ルールの編集は、コマンド ..P で呼び出します。

パラメータ(.Prr)を使用すると、定義/編集する処理ルールのランク(プライオリティ)を指定できます。 1 つのフィールドには、最大で 100 の処理ルール(ランク 0~99)を定義できます。 マップ実行時に、処理ルールはフィールドのランクおよび画面位置によって昇順に実行されます。 PF キー処理ルールは、常に最初の画面位置にあるものとみなされます。

最適なパフォーマンスを得るために、処理ルールにランクを割り当てるときは、次の割り当てをお勧めします。

ランク 処理ルール
0 終了ルール
1 - 4 自動ルール
5 - 24 フォーマットチェック
25 - 44 個別フィールドの値チェック
45 - 64 フィールド間での値の照合
65 - 84 データベースアクセス
85 - 99 特殊な用途

注意:
処理ルールを変更または追加する場合は、変更内容を有効にするために、そのルールを参照しているマップを再カタログする必要があります。

これ以降のセクションでは、次の項目について説明します。

編集するルールの選択

マップフィールドでフィールドコマンド .P* を入力すると、そのフィールドに定義されたすべての処理ルールのリストが表示されます。

任意のマップの行で行コマンド .P* を入力すると、そのマップに定義されたすべてのファンクションキー関連の処理ルールのリストが表示されます。

各リスト上で、Predict ルールは名前によって、インラインルールは最初の 3 行のソースコードによって識別されます。 ランクを入力すると、編集するルールを各リストから選択できます。

処理ルールの編集画面および処理ルールの例を次に示します。

  Variables used in current map                                             MOD  
  MODTXT(A3)                                                                  U  
  FVAR(A75/1:6)                                                               U  
  FTYP(A1/1:6)                                                                U  
  RULEMODE(A6)                                                                U  
  RULE-NAME(A32)                                                              D  
  FIELDAN(A5)                                                                 D  
                                                                                 
  Rule ________________________________ Field FULCB3.CBCOM                       
  >                                      > + Rank 0     S 1   L 1    Struct Mode 
  ALL   ....+....10...+....20...+....30...+....40...+....50...+....60...+....70..
    0010 *                                                                       
    0020 IF & EQ MASK('?')                                                       
    0030  REINPUT USING HELP                                                     
    0040 END-IF                                                                  
    0050 *                                                                       
    0060                                                                         
    0070                                                                         
    0080                                                                         
    0090                                                                         
    0100                                                                         
  Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
        Help  Mset  Exit  Test        --    -     +     Full  Sc=         Let

処理ルールの編集中は、PF9 キーまたは SPLIT/SPLIT E コマンドを使用して、画面分割モードと全画面モードを切り替えることができます。 分割された画面の上半分には、システム変数を除く、すべてのマップフィールドの定義が表示されます。 この画面は、画面分割コマンドで配置できます。

処理ルールの定義に使用するソースコードは、Natural プログラムエディタを使用する場合と同じように入力/編集します。

ダイレクトコマンド

処理ルールエディタで作業している場合は、エディタコマンド行(>)で次のいずれかのコマンドを入力すると、処理ルールを編集できます。 次の表で、キーワードの下線部分は入力可能な省略形を表しています。 この表で使用されている構文記号の詳細については、『システムコマンド』ドキュメントの「システムコマンド構文」を参照してください。

コマンド 説明
ADD[(n)] ソースコードに空行を n 行追加します。

ADD コマンドの詳細については、『プログラムエディタ』ドキュメントの「エディタコマンド」を参照してください。

CHANGE 'string1'string2' 入力値 string1 をスキャンし、検出されたそれぞれの値を入力値 string2 で置換します。
CHECK ルールをチェックします。
CLEAR 編集エリアと行マーカー X および Y をクリアします。
DX

または

DY

または

DX-Y
X でマークされた行、Y でマークされた行、または X および Y で区切られた行のブロックを削除します。
EX

または

EY

または

EX-Y
ソースエリアの最上部から X でマークされた行の前の行までのソース行、Y でマークされた行の次のソース行からソースエリアの最下部までのソース行、または X および Y で区切られた行のブロックを除くソースエリアのすべてのソース行を削除します。
EXIT ルール編集機能を終了してマップ編集に戻ります。
.
P フィールドに定義された次のルールに移動します。
P* 選択メニューでルールを選択します。
Prr ランクが rr のルールを選択します。
P=rr 処理ルールのランクをランク rr に変更します。
POINT 行コマンド .N が入力された行を現在の画面の最上部に配置します。
RESET 現在の X 行マーカーか Y 行マーカー、またはその両方、および行コマンド .N を使用して以前設定されたマーカーを削除します。
SAVE name 名前が name のコピーコードとしてルールを保存します。
SCAN ['scan-value'] ソースエリアのデータをスキャンします。 パラメータを指定しないで SCAN を入力すると、[SCAN/REPLACE]メニューが表示されます。 SCAN 'scan-value' と入力すると、scan-value を検索するスキャンとなります。
SCAN = [+|-] スキャンを実行して、スキャン値の次のオカレンスを探します。 スキャン操作の方向は、方向インジケータの設定によって決定されます。

SCAN コマンドの詳細については、「プログラムエディタ」セクションの「エディタコマンド」を参照してください。

SHIFT [-|+nn] X および Y マーカーで区切られた各ソース行を左または右に移動します。 nn はソース行を移動する文字数です。 コメント行は移動されません。
SHIFT -- X および Y マーカーで区切られた各ソース行を左端に移動します。 コメント行は移動されません。
SHIFT ++ X および Y マーカーで区切られた各ソース行を右端に移動します(最大 99 桁)。 コメント行は移動されません。
SPLIT [E] 画面分割モードと全画面モードを切り替えます。 「配置のためのエディタコマンド」の SPLIT を参照してください。
TEST マップをテストします。
UNLINK フィールドからインラインルールまたは Predict フリールールのリンクを解除します。

注意:
すべての Predict フリールールの中からルールを 1 つ選択するには、処理ルール編集画面のルール名フィールドに疑問符(?)を入力します。

配置のためのエディタコマンド

配置のためのエディタコマンドは、ルールエディタのコマンド行(>)で入力します。 次の表に、使用できるコマンドを示します。キーワードの下線部分は入力可能な省略形を表しています。

コマンド 説明
+P  1 ページ前方に移動します。
+
-P  1 ページ後方に移動します。
-
+H 半ページ前方に移動します。
-H 半ページ後方に移動します。
TOP  ルールの最上部に移動します。
--
BOTTOM  ルールの最下部に移動します。
++
+nnnn nnnn 行前に移動します(最大 4 桁)。
-nnnn nnnn 行後に移動します(最大 4 桁)。
nnnn nnnn に移動します。
X X でマークされた行に移動します。
Y Y でマークされた行に移動します。
SPLIT[-|--|+|++] 分割された画面で後方(- または --)または前方(+ または ++)に移動します。

行コマンド

処理ルールの編集時には、エディタコマンドだけでなく次の行コマンドも使用できます。

コマンド 説明
.C(nnnn) コマンドが入力された行をコピーします。
.CX(nnnn)

または

.CY(nnnn)

X または Y でマークされた行をコピーします。 次のセクションのコマンド .X および .Y を参照してください。
.CX-Y(nnnn) X および Y のマーカーで区切られている行のブロックをコピーします。

方向インジケータがプラス記号(+)の場合、コピーされた行はコマンドが入力された行の後に配置されます。 方向インジケータがマイナス記号(-)の場合、コピーされた行はコマンドが入力された行の前に配置されます。

.D(nnnn) 行(1 行または複数行)を削除します。 デフォルトは 1 行です。
.I(n) n 行の空行を挿入します。 次に Enter キーを押すと、空行が再び削除されます。
.I(obj,ssss,nnnn) 現在のライブラリ、または STEPLIB に格納されているオブジェクトをソースに挿入します。

ssss エントリを使用すると、挿入処理を開始する行番号を指定できます。

nnnn エントリを使用すると、挿入される行の数を指定できます。

.I 行コマンドの詳細については、「マップの編集」セクションの「行コマンド」を参照してください。

.J 現在の行を次の行と連結します。

生成される行の長さが編集画面の行の長さより長い場合、その行は L でマークされます。この行は、変更する前に .S コマンド(下記参照)を使用して再度区切る必要があります。

.L 最後に Enter キーが押された時以降に行に行われた変更をすべて無視します。
.MX

または

.MY
X または Y でマークされた行を移動します。 下記のコマンド .X および .Y を参照してください。
.MX-Y X および Y のマーカーで区切られている行のブロックを移動します。

方向インジケータがプラス記号(+)に設定されている場合、移動された行はコマンドが入力された行の後に配置されます。 方向インジケータがマイナス記号(-)に設定されている場合、移動された行はコマンドが入力された行の前に配置されます。

.P このコマンドでマークした行を画面上部に配置します。
.S カーソルでマークした位置で行を分割します。
.W n 行の空行を挿入します。

次に Enter キーを押すと、空行が再び削除されます。

.X 処理する行、または行ブロックの先頭をマークします。
.Y 処理する行、または行ブロックの最後をマークします。

注意:
コマンド .X.Y の両方を 1 つの行に適用すると、その行は X および Y でマークされているものとして処理されます。この状態は、実際には行マーカー Z で表示されます。

Top of page