ルールスクリプトは,アプリケーション開発に使用するプログラミング言語(COBOLやC言語など)の文法に従って記述します。これに加えて, ソースプログラムへの展開位置を指定する文や,業務ルールやデータ項目の情報を取り出せる予約キーワードなど,ルールスクリプトを記述するための独自の文法が用意されています。さらに,SEWB+/CONSTRUCTIONのテンプレート記述言語をルールスクリプトの記述に使用することもできます。
業務ルールの内容に応じた書き方については「2.6.5 システムで共用する業務ルールを登録する」および「2.6.6 特定業務で扱う業務ルールを登録する」を参照してください。
業務ルールで使用するデータ項目名は,必ずキーワードで記述します。キーワードは,SEWB+/CONSTRUCTIONでソースプログラムが生成されるときに,データ項目に定義されている言語別の名前に置換されます。
COBOLでルールスクリプトを記述するときの規則について説明します。SEWB+/CONSTRUCTIONで作成するアプリケーションのコーディング形式に固定形式(正書法)を採用している場合でも,ルールスクリプト中に一連番号(正書法1~6カラム目)を記述する必要はありません。7カラム目の標識領域から記述してください。一連番号は,SEWB+/CONSTRUCTIONでソースプログラムを生成したときに自動的に付加されます。
ルールスクリプトの記述には,ルールスクリプト独自の文法とプログラミング言語で記述する方法と,これにテンプレート記述言語を併用して記述する方法の2とおりがあります。
前者の記述方法は,データ項目と業務ルールが一対一に対応する業務ルール,またはデータ項目の属性や性質がそのまま下位のデータ項目に継承するドメインの業務ルールの記述に適しています。
これに対して,後者のテンプレート記述言語の展開制御文(可変記号に値を代入する@@set文や,可変記号の値によって条件判定する@@if文など)を併用する方法は,異なる複数のドメインやデータ項目に対応させる業務ルールの記述に適しています。汎用性が高い業務ルールを作成できるため,業務ルールの再利用性を向上できます。ただし,この場合は,辞書を設計する知識に加えて,テンプレートを作成する知識が必要になります。また,業務ルールとテンプレートの関係も複雑になります。
どちらの方法でルールスクリプトを記述すればよいかは,プロジェクトの状況や,どれだけ業務ルールに汎用性を持たせるかなどによって異なります。テンプレート作成者と十分検討した上で,最適な記述方法を採用するようにしてください。
ルールスクリプトには,手続きだけではなく,処理内容に応じてデータの作業領域(データ項目の内部構造を分割または統合するための領域,処理に使う一時領域,外部サブルーチンとのインタフェース領域など)を記述できます。作業領域の記述については,「2.6.3(5) ルールスクリプトを分割して展開する」,「2.6.3(6) 作業領域のデータ項目名の重複を回避する」および「2.6.3(7) 作業領域を1回だけ展開する」を参考にしてください。
ルールスクリプトは通常,SEWB+/CONSTRUCTIONのテンプレートの@@rule文で,業務ルールが挿入指示された位置にソースコードが展開されます。しかし,@@section文を利用すれば,ルールスクリプト中のコードの一部分を,指定した別の位置に展開できます。例えば,COBOLで記述する場合には,ルールスクリプト中の作業領域を,手続きとは別の位置(WORKING-STORAGE SECTIONやLINKAGE SECTIONなど)へ展開する必要があります。このようなときに「@@section文」を使用します。
なお,分割展開の必要がないときには@@section文を記述しなくてもかまいません。ルールスクリプト中に@@section文がない場合,テンプレートの@@rule文でその業務ルールが引き当てられた位置に展開されます。
@@section文で@@rule文以外の場所に展開先を指定されたルールスクリプトは,テンプレートの@@merge文の位置に展開されます。この関係を次の例で見てみましょう。
ルールスクリプトの作業領域「W-事業所コード」は,同一のコード名を持つ可変記号「@WORK」が指定された@@merge文の位置に展開されています。
このように,適切に分割展開するには,ルールスクリプトの「@@section コード名」とテンプレートの「@@merge文 可変記号」のコード名が一致している必要があります。したがって,辞書の作成者はテンプレート作成者の協力を得て,ルールスクリプトとテンプレートで,どのように分割展開し,どのようなコード名を使うかをあらかじめ決めておく必要があります。
@@merge文の詳細は,マニュアル「SEWB+/CONSTRUCTION アプリケーション開発ガイド」を参照してください。
作業領域を記述するときに予約キーワード「@rulecount」を使用すれば,ソースプログラム中に同じルールスクリプトが複数個展開されても,データ項目名の重複を回避できます。@rulecountは,ソースプログラムの生成時に,その業務ルールが展開された回数と置換されます。
作業領域のデータ項目名に記述します。回数は,通し番号(4けたの整数)で生成されます。
@rulecountを使った作業領域の展開例を次に示します。
ルールスクリプトにテンプレート記述言語の展開制御文を使用すれば,@@section文と同様の分割展開ができます。さらに,ソースプログラム中に同じルールスクリプトが複数個展開されるときに,作業領域を1回だけ展開するように記述できます。ただし,この記述では,テンプレートに,最初の業務ルールの展開かどうかを判断するための可変記号を定義する必要があります。
この例では,展開制御文の一つである@@put文を使用して分割展開しています。ソースプログラム中に最初に業務ルールが展開されたとき,@@put文で指定された作業領域が,テンプレート上の同じ可変記号「@WORK」が指定された@@merge文の位置に展開されます。同時に,可変記号@RULE_FLAG[時刻編集]に文字列「Y」がセットされます。以降にこの業務ルールが展開されても,@@if文の判定によって作業領域の展開が抑止されます。なお,ルールスクリプトに記述されている@@if文,@@put文,@@set文は,すべてテンプレート記述言語の展開制御文です。詳細は,マニュアル「SEWB+/CONSTRUCTION アプリケーション開発ガイド」を参照してください。
データ項目に定義されているけた数,タイプ,反復回数または修飾情報付データ項目名を,それぞれに対応した予約キーワードで取り出せます。取得した値を比較条件に利用したり,処理に渡したりすることで,汎用性の高い業務ルールを作成できます。例えば,同じドメインを継承するデータ項目であっても,けた数,タイプなどが異なる場合があります。このようなとき,定義情報が異なる部分を予約キーワードを使って記述すれば,ドメインに関連する共通の業務ルールを作成できます。
データ項目に定義されているけた数を取り出します。
データ項目に定義されているタイプを取り出します。
表2-17 タイプと@typeの値の対応(COBOL又はOOCOBOL)
タイプ | @typeの値 |
---|---|
X 英数字項目 | X |
Z 数字編集項目 | Z |
N 漢字項目 | N |
9 符号なし外部10進項目 | 9 |
S 符号付き外部10進項目 | S |
U 符号なし内部10進項目 | U |
P 符号付き内部10進項目 | P |
BU 符号なし2進項目 | BU |
B 符号付き2進項目 | B |
E 外部浮動小数点項目 | E |
D 内部浮動小数点項目 | D |
1 内部ブール項目 | 1 |
8 外部ブール項目 | 8 |
T アドレスデータ項目 | T |
フリー定義 | フリー定義の内容 |
表2-18 タイプと@typeの値の対応(C又はC++)
タイプ | @typeの値 |
---|---|
char 文字型 | char |
char* 文字型(ポインタ) | char* |
short 符号付き短整数型 | short |
unsigned short 符号なし短整数型 | unsigned short |
int 符号付き整数型 | int |
unsigned int 符号なし整数型 | unsigned int |
long 符号付き長整数型 | long |
unsigned long 符号なし長整数型 | unsigned long |
float 単精度浮動小数点型 | float |
double 倍精度浮動小数点型 | double |
long double 拡張精度浮動小数点型 | long double |
フリー定義 | フリー定義の内容 |
表2-19 タイプと@typeの値の対応(SQL)
タイプ | @typeの値 |
---|---|
CHAR 固定長文字列 | CHAR |
VARCHAR2 可変長文字列 | VARCHAR2 |
LONG 可変長長文字列 | LONG |
NUMBER 固定小数点数 | NUMBER |
NUMBERf 浮動小数点数 | NUMBERf |
DATE 日付 | DATE |
VARCHAR 可変長文字列 | VARCHAR |
NCHAR 固定長各国文字列 | NCHAR |
NVARCHAR 可変長各国文字列 | NVARCHAR |
MCHAR 固定長混在文字列 | MCHAR |
MVARCHAR 可変長混在文字列 | MVARCHAR |
SMALLINT 短整数 | SMALLINT |
INT 整数 | INT |
DEC 固定小数点数 | DEC |
SMALLFLT 単精度浮動小数点数 | SMALLFLT |
FLOAT 倍精度浮動小数点数 | FLOAT |
TIME 時刻 | TIME |
フリー定義 | フリー定義の内容 |
表2-20 タイプと@typeの値の対応(帳票定義)
タイプ | @typeの値 |
---|---|
C 文字データ | C |
I 数値データ | I |
B 集計対象外数値データ | B |
CY 年次データ | CY |
MO 月次データ | MO |
DA 日次データ | DA |
HS 日付・時刻データ | HS |
M 画像データ | M |
SP 特殊編集レベルデータ | SP |
フリー定義 | フリー定義の内容 |
表2-21 タイプと@typeの値の対応(Java)
タイプ | @typeの値 |
---|---|
char 文字型 | char |
short 符号付き単整数型 | short |
int 符号付き整数型 | int |
long 符号付き長整数型 | long |
float 単精度浮動小数点型 | float |
double 倍精度浮動小数点型 | double |
byte バイト型 | byte |
boolean 論理型 | boolean |
フリー定義 | フリー定義の内容 |
データ項目に定義されている反復回数を取り出します。
結合関係の最も上位に位置するデータ項目から,キーワードに対応するデータ項目までの,配列の次元数を取り出します。結合関係の最も上位にある結合項目からそのデータ項目までに反復回数が定義されていない場合は,0が展開されます。
キーワードに対応するデータ項目の反復回数,または結合関係の上位にあるデータ項目の反復回数を取り出します。主に@occurs_dimensionで取り出した次元数と組み合わせて使用します。
キーワードに対応するデータ項目名を修飾情報(全パスの項目名)付きで取り出します。
データの妥当性をチェックする処理での,チェック結果を受けたエラー処理の記述について説明します。エラー処理は一般に,アプリケーション間で共通化することが望ましいと考えられます。したがって,エラー処理の内容や,エラー処理に使うデータ項目は,SEWB+/CONSTRUCTIONのテンプレート上に記述することをお勧めします(さらに,エラー処理部分は複数のテンプレートから汎用的に使えるよう,部品テンプレートにしておくことをお勧めします)。
業務ルールのチェック処理とテンプレートのエラー処理を適切に連携するには,データ項目名や相互でやり取りする値を正しく記述することが重要です。このため,業務ルールやテンプレートを作成する前に,あらかじめエラー処理の仕様を検討して,そのインタフェース(エラー処理に使用するデータ項目,やり取りする値など)を決めておきます。辞書の作成者およびテンプレート作成者は,この仕様に基づいて,業務ルールやテンプレートを作成するようにしてください。
予約キーワード(「@type」,「@len」など)を記述する場合は,次の点に留意してください。