このセクションでは、存在する処理ルールのタイプおよびその編集方法について説明します。
3 つのタイプのフィールド関連の処理ルールを定義できます。
インライン処理ルール
Predict フリールール
Predict 自動ルール
インライン処理ルールはマップソース内で定義され、名前は割り当てられません。 インラインルールでは、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 に定義されたデータベースフィールドの名前を指定します。コンパイル時には、対応するビュー名でアンパサンド(&)が置き換えられ、フィールドがダイナミックに指定されます。 これにより、フィールドを取得するビューに関係なく、特定のフィールドに同じ処理ルールを使用できます。
次の 2 種類のファンクションキー関連の処理ルールを定義できます。
インライン処理ルール
Predict フリールール
ファンクションキー関連の処理ルールを使用すると、プログラム依存のファンクションキー(PF キー)にマップ処理中の処理を割り当てることができます。 すでにプログラムでコマンドが割り当てられている PF キーの場合、ルールは処理されずにこのコマンドが実行されます。
IF *PF-KEY = 'PF3' ESCAPE ROUTINE END-IF
このルールが実行されると、それ以上ルール処理が行われずに、マップ処理が終了します。
処理ルールの編集は、フィールドコマンド .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 行追加します。
|
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 = [+|-] |
スキャンを実行して、スキャン値の次のオカレンスを探します。 スキャン操作の方向は、方向インジケータの設定によって決定されます。
|
SHIFT [-|+nn] |
X および Y マーカーで区切られた各ソース行を左または右に移動します。 nn はソース行を移動する文字数です。 コメント行は移動されません。 |
SHIFT -- |
X および Y マーカーで区切られた各ソース行を左端に移動します。 コメント行は移動されません。 |
SHIFT ++ |
X および Y マーカーで区切られた各ソース行を右端に移動します(最大 99 桁)。 コメント行は移動されません。 |
SPLIT [E] |
画面分割モードと全画面モードを切り替えます。 「配置のためのエディタコマンド」の SPLIT を参照してください。
|
TEST |
マップをテストします。 |
UNLINK |
フィールドからインラインルールまたは Predict フリールールのリンクを解除します。 |
注意:
すべての Predict フリールールの中からルールを 1 つ選択するには、処理ルール編集画面のルール名フィールドに疑問符(?)を入力します。
配置のためのエディタコマンドは、ルールエディタのコマンド行(>)で入力します。 次の表に、使用できるコマンドを示します。キーワードの下線部分は入力可能な省略形を表しています。
処理ルールの編集時には、エディタコマンドだけでなく次の行コマンドも使用できます。
コマンド | 説明 |
---|---|
.C(nnnn) |
コマンドが入力された行をコピーします。 |
.CX(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 エントリを使用すると、挿入される行の数を指定できます。
|
.J |
現在の行を次の行と連結します。
生成される行の長さが編集画面の行の長さより長い場合、その行は |
.L |
最後に Enter キーが押された時以降に行に行われた変更をすべて無視します。 |
.MX
または .MY |
X または Y でマークされた行を移動します。 下記のコマンド .X および .Y を参照してください。
|
.MX-Y |
X および Y のマーカーで区切られている行のブロックを移動します。
方向インジケータがプラス記号(+)に設定されている場合、移動された行はコマンドが入力された行の後に配置されます。 方向インジケータがマイナス記号(-)に設定されている場合、移動された行はコマンドが入力された行の前に配置されます。 |
.P |
このコマンドでマークした行を画面上部に配置します。 |
.S |
カーソルでマークした位置で行を分割します。 |
.W |
n 行の空行を挿入します。
次に Enter キーを押すと、空行が再び削除されます。 |
.X |
処理する行、または行ブロックの先頭をマークします。 |
.Y |
処理する行、または行ブロックの最後をマークします。
注意: |