バージョン 8.1.3
 —  トリガとストアドプロシージャ  —

TRGMAIN: トリガを保守するための API

Adabas トリガとストアドプロシージャ機能には、ユーザー作成のプログラムからトリガ定義を保守するために呼び出し可能なルーチン TRGMAIN が用意されています。 TRGMAIN の機能は次のとおりです。

Start of instruction setトリガメンテナンスルーチンを呼び出す手順

ここで、function(機能)と calling-parameter(呼び出しパラメータ)について、次のセクションで説明します。

このドキュメントでは、次のトピックについて説明します。


機能(フォーマット A5)

FUNC パラメータは、トリガ定義で実行されるアクションを指定します。 正しい値は次のとおりです。

ADD 追加
MOD 修正
DEL 削除
DISP 表示
ACT アクティブ化
DEACT 非アクティブ化

Top of page

コールパラメータ(フォーマット A209)

CALLING-PARMS を構成するパラメータは、アクションの実行に必要な情報を指定します。 これらのパラメータは、オンライントリガメンテナンス機能で要求される情報と整合性があり、次のフィールドが含まれます(デフォルト値に下線付き)。

フィールド名 長さ 説明
TRG-DBNR N5 トリガファイル DBnr
FILE-NAME A32 FFT で定義されたファイル名
CMD-TYPE A1
トリガを起動するコマンドタイプ
D 削除
F 検索
I 挿入
R 読み込み
U 更新
* すべてのコマンド
FIELD-NAME A32 FFT で定義されたフィールド名
TRIGGER-PROG A8 Natural トリガプログラムの名前
PRIORITY N3 トリガのプライオリティ
PRE-CMD-SELECT A1
コマンドの実行に関するトリガのタイミング
N ポストコマンドトリガ
Y プレコマンドトリガ
PART-NON-FLAG A1
関与フラグ。 正しい値は次のとおりです。
A 非同期(デフォルト)
N 非関与
P 関与
CALLNAT-FLAG A1
CALLNAT パラメータ 正しい値は次のとおりです。
C ACB ありの制御パラメータとレスポンスコード(デフォルト)
E レスポンスコードのみ
N 渡されるパラメータなし
X ACBX ありの制御パラメータとレスポンスコード
RECBUFF-OPTION A1
レコードバッファアクセス。 正しい値は次のとおりです。
A アクセスオンリー
N レコードバッファへのアクセスなし(デフォルト)
U 更新を許可
ACT-TYPE A4
処理されるアクティブ化/非アクティブ化のタイプ
PERM 永続的
TEMP 一時的
TRG-RSV A39 予約済み(将来的に使用される予定)
RESP N4 API から返されるレスポンスコード
RETURN-MSG A68 レスポンスコードのテキストによる説明
VERSION N3 GCB のバージョン
PRODVERN N3 データベースのバージョン
NUCID P5 ニュークリアス ID

Top of page

サンプルユーザープログラム

     *******************************************************************
      Program     UMAINT       Library SYSTRG
0010 *******************************************************************
0020 *  Application .. Trigger Maintenance
0030 *  Program ...... UMAINT
0040 *  Function ..... Sample call program to call API TRGMAIN that
0050 *                 maintains trigger definitions.
0060 *                 (Add,Delete,Modify,Display,Activate,Deactivate).
0070 *
0080 *  Parameters ... The following parameters are passed when calling
0090 *                 the API:
0100 *      FUNC           (A5)  Action to perform on Trigger Definition
0110 *                           Valid values are ADD - Add
0120 *                                            MOD - Modify
0130 *                                            DEL - Delete
0140 *                                            DISP - Display
0150 *                                            ACT - Activate
0160 *                                            DEACT - Deactivate
0170 *      TRG-DBNR       (N5)  Trigger file DBnr
0180 *      FILE-NAME     (A32)  File name defined in the FFT
0190 *      CMD-TYPE       (A1)  Command type that causes trigger to fire
0200 *                           Valid values are R - Read
0210 *                                            F - Find
0220 *                                            I - Insert
0230 *                                            U - Update
0240 *                                            D - Delete
0250 *                                            * - All commands
0260 *      FIELD-NAME    (A32)  Field name defined in the FFT
0270 *      TRIGGER-PROG   (A8)  Name of the Natural trigger program
0280 *      PRIORITY       (N3)  Trigger priority
0290 *      PRE-CMD-SELECT (A1)  Pre-trigger or post-trigger
0300 *                           Valid values are Y - Pre trigger
0310 *                                            N - Post trigger
0320 *      PART-NON-FLAG  (A1)  Participation flag
0330 *                           Valid values are A - Asyncronous
0340 *                                            N - Non-participating
0350 *                                            P - Participating
0360 *      CALLNAT-FLAG   (A1)  CALLNAT parameters
0370 *                           Valid values are N - No parmeters passed
0380 *                                            E - Response code only
0390 *                                            C - Control parms and
0400 *                                                    response code
0410 *      RECBUFF-OPTION (A1)  Record buffer access
0420 *                           Valid values are A - Access only
0430 *                                            U - Updates allowed
0440 *                                            N - No access to RB
0450 *      ACT-TYPE       (A4)  Type of activation/deactivation
0460 *                           Valid values are: TEMP - Temporary
0470 *                                             PERM - Permanent
0480 *      RESP           (N4)  Response code returned from the API
0490 *      RETURN-MSG    (A68)  Text description of the response code
0500 ********************************************************************
0510 DEFINE DATA LOCAL
0520 01 FUNC (A5)
0530 01 CALLING-PARMS (A161)
0540 01 REDEFINE CALLING-PARMS
0550   02 TRG-DBNR           (N5)
0560   02 FILE-NAME         (A32)
0570   02 CMD-TYPE           (A1)
0580   02 FIELD-NAME        (A32)
0590   02 TRIGGER-PROGRAM    (A8)
0600   02 PRIORITY           (N3)
0610   02 PRE-CMD-SELECT     (A1)
0620   02 PART-NON-FLAG      (A1)
0630   02 CALLNAT-FLAG       (A1)
0640   02 RECBUFF-OPTION     (A1)
0650   02 ACT-TYPE           (A4)
0660   02 RESP               (N4)
0670   02 RETURN-MSG        (A68)
0680 01 MAP-MSG (A68)
0690 01 HOLD-FUNC (A5)
0700 01 HOLD-PRE-CMD-SELECT     (A1)
0710 01 PAGE-TITLE (A50)
0720 01 #ATTR (C)
0730 END-DEFINE
0740 RESET CALLING-PARMS MAP-MSG
0750 MOVE 233 TO TRG-DBNR
0760 SET KEY PF3
0770 **
0780 ** Request function and required fields
0790 **
0800 REPEAT
0810   INPUT (AD=TMIL'_' CD=NE)
0820     MAP-MSG (IP=OFF AD=O)
0830     / 9T 'API Maintenance of Trigger Definitions' (YEI)
0840     // 'Function..........' FUNC   30T '(Add, Del, Mod, Disp, or ".")'
0850     // 'File Name.........' FILE-NAME
0860     / 'Field Name........' FIELD-NAME
0870     / 'Command Type......' CMD-TYPE 30T '(R, F, I, U, D, or *)'
0880     / 'Pre-Command.......' PRE-CMD-SELECT 30T '(Y, N, or blank)'
0890   RESET MAP-MSG
0900 **
0910 ** Escape out of here
0920 **
0930   IF FUNC = MASK('.') OR *PF-KEY = 'PF3'
0940   ESCAPE BOTTOM
0950 ** Set up Page Titles
0960   DECIDE ON FIRST VALUE OF FUNC
0970     VALUE 'DISP' MOVE 'Display' TO PAGE-TITLE
0980     VALUE 'ADD'  MOVE 'Add' TO PAGE-TITLE
0990     VALUE 'MOD'  MOVE 'Modify' TO PAGE-TITLE
1000     VALUE 'DEL'  MOVE 'Delete' TO PAGE-TITLE
1010     VALUE 'X'    ESCAPE BOTTOM
1020     NONE REINPUT 'Invalid Function Code'
1030   END-DECIDE
1040   COMPRESS PAGE-TITLE 'Trigger Definition' INTO PAGE-TITLE
1050   IF FILE-NAME = ' '
1060   REINPUT 'File Name cannot be BLANK' MARK *FILE-NAME
1070 **
1080 ** Handle Request to Display a Trigger
1090 **
1100   IF FUNC = 'DISP'
1110   DO
1120     PERFORM GET-TRIGGER
1130     INPUT (AD=O CD=NE)
1140       MAP-MSG (IP=OFF AD=O)
1150       / 9T 'API Maintenance of Trigger Definitions' (YEI)
1160       // 10T PAGE-TITLE (IP=OFF)
1170       // 'File name.........' FILE-NAME
1180       / 'Field Name........' FIELD-NAME
1190       / 'Command Type......' CMD-TYPE
1200       // 'Trigger Program...' TRIGGER-PROGRAM
1210       / 'Priority..........' PRIORITY
1220       / 'Pre-Command.......' PRE-CMD-SELECT
1230       / 'Trigger Type......' PART-NON-FLAG
1240       / 'CALLNAT Params....' CALLNAT-FLAG
1250       / 'RecBuffer Access..' RECBUFF-OPTION
1260     RESET FUNC
1270     MOVE RETURN-MSG TO MAP-MSG
1280   DOEND
1290 **
1300 ** Handle Request to Alter Trigger Definitions
1310 **
1320   IF FUNC = 'ADD' OR= 'MOD' OR= 'DEL'
1330   DO
1340     IF (FUNC = 'MOD' OR= 'DEL')
1350     PERFORM GET-TRIGGER
1360     IF FUNC = 'DEL'
1370     DO
1380       MOVE 'Press ENTER to Delete or PF-3 to Cancel' TO MAP-MSG
1390       MOVE (AD=P) TO #ATTR
1400     DOEND
1410     ELSE DO
1420       MOVE 'Press ENTER to confirm data or PF-3 to Cancel' TO MAP-MSG
1430       MOVE (AD=D CD=NE) TO #ATTR
1440     DOEND
1450     REPEAT
1460       INPUT (AD=TMIL'_' CD=NE)
1470         MAP-MSG (IP=OFF AD=O)
1480         / 9T 'API Maintenance of Trigger Definitions' (YEI)
1490         // 10T PAGE-TITLE (AD=O IP=OFF)
1500         // 'File Name.........' FILE-NAME (AD=O)
1510         / 'Field Name........' FIELD-NAME (CV=#ATTR)
1520         / 'Command Type......' CMD-TYPE (CV=#ATTR)
1530         // 'Trigger Program...' TRIGGER-PROGRAM (CV=#ATTR)
1540         / 'Priority..........' PRIORITY (CV=#ATTR)
1550         / 'Pre-Command.......' PRE-CMD-SELECT (CV=#ATTR)
1560         / 'Trigger Type......' PART-NON-FLAG (CV=#ATTR)
1570         / 'CALLNAT Params....' CALLNAT-FLAG (CV=#ATTR)
1580         / 'RecBuffer Access..' RECBUFF-OPTION (CV=#ATTR)
1590       RESET MAP-MSG
1600       IF *PF-KEY = 'PF3'
1610       DO
1620         MOVE 'Function cancelled per user request' TO MAP-MSG
1630         ESCAPE BOTTOM
1640       DOEND
1650 **
1660 ** Perform the update of data (add, del, or mod)
1670 ** and handle the response
1680 **
1690       CALLNAT 'TRGMAIN' FUNC CALLING-PARMS
1700       DECIDE ON FIRST VALUE OF RESP
1710         VALUE 0  MOVE RETURN-MSG TO MAP-MSG
1720           EXAMINE MAP-MSG FOR 'confirmed' REPLACE 'successful'
1730           ESCAPE BOTTOM
1740         VALUE 20 REINPUT WITH TEXT RETURN-MSG MARK *FIELD-NAME
1750         VALUE 23 REINPUT WITH TEXT RETURN-MSG MARK *FIELD-NAME
1760         VALUE 25 REINPUT WITH TEXT RETURN-MSG MARK *CMD-TYPE
1770 *       VALUE 37 REINPUT WITH TEXT RETURN-MSG MARK *PRIORITY
1780 *       VALUE 38 REINPUT WITH TEXT RETURN-MSG MARK *PRIORITY
1790         VALUE 39 REINPUT WITH TEXT RETURN-MSG MARK *TRIGGER-PROGRAM
1800         VALUE 40 REINPUT WITH TEXT RETURN-MSG MARK *PRE-CMD-SELECT
1810         VALUE 41 REINPUT WITH TEXT RETURN-MSG MARK *PART-NON-FLAG
1820         VALUE 42 REINPUT WITH TEXT RETURN-MSG MARK *CALLNAT-FLAG
1830         VALUE 43 REINPUT WITH TEXT RETURN-MSG MARK *RECBUFF-OPTION
1840         NONE     MOVE RETURN-MSG TO MAP-MSG
1850       END-DECIDE
1860     LOOP
1870     RESET FUNC
1880   DOEND
1890 ** Loop back up to display the starting screen
1900 LOOP
1910 *******************************
1920 ** Subroutine to retrieve the *
1930 ** trigger information        *
1940 *******************************
1950 DEFINE SUBROUTINE GET-TRIGGER
1960 MOVE FUNC TO HOLD-FUNC              /* Go get the existing
1970 MOVE 'DISP' TO FUNC                 /* trigger information
1980 MOVE PRE-CMD-SELECT TO HOLD-PRE-CMD-SELECT
1990 CALLNAT 'TRGMAIN' FUNC CALLING-PARMS
2000 MOVE HOLD-FUNC TO FUNC
2010 IF RESP NE 0
2020 REINPUT WITH TEXT RETURN-MSG
2030 IF RESP = 0
2040 DO
2050   IF PRE-CMD-SELECT NE HOLD-PRE-CMD-SELECT
2060     AND HOLD-PRE-CMD-SELECT NE ' '
2070   DO
2080     MOVE HOLD-PRE-CMD-SELECT TO PRE-CMD-SELECT
2090     MOVE 'Trigger does not exist' TO MAP-MSG
2100     IF HOLD-PRE-CMD-SELECT = 'Y'
2110     COMPRESS 'Pre-' MAP-MSG INTO MAP-MSG
2120     ELSE COMPRESS 'Post-' MAP-MSG INTO MAP-MSG
2130     MOVE HOLD-FUNC TO FUNC
2140     ESCAPE TOP
2150   DOEND
2160   IF CMD-TYPE = ' '
2170   MOVE '*' TO CMD-TYPE
2180 DOEND
2190 RETURN
2200 *** End of Subroutine ***
2210 END
2220 **

Top of page

レスポンスコード

コード 説明
000 機能は正常に終了しました。
013 無効なファイル - フィールドエントリが指定されました。 トリガ機能では、ファイル - フィールドテーブルへのアクセスが必要です。ファイル - フィールドテーブルは、ロングファイル名からファイル番号へ、およびフィールド名から 2 文字の Adabas フィールド ID へのマッピングを行います。 詳細については、「ファイル - フィールドテーブル」を参照してください。
016 この条件のトリガ定義は見つかりませんでした。
020 削除コマンドクラスでフィールド名は空白にする必要があります。
023 このファイルのフィールド名は見つかりませんでした。 指定されたフィールド名はこのファイルのファイル - フィールドテーブルに存在しません。 詳細については、「ファイル - フィールドテーブル」を参照してください。
025 コマンドの種類が無効です。 有効な値については上記のリストを参照してください。
027 このファイルおよびコマンドの種類のフィールドが見つかりませんでした。
029 このファイル、コマンド、およびフィールドの条件のトリガが見つかりませんでした。
037 プライオリティは 1~900 の間でなければなりません。
038 Adabas フィールド名が ** の場合は、プライオリティを設定できません。
039 Natural サブプログラム名が無効です。
040 プレトリガの場合は "Y"、ポストトリガの場合は "N" を指定してください。
041 トリガタイプは A、N、または P のみです。
042 CALLNAT タイプは C、E、または N のみです。
043 レコードバッファの使用は A、N、または U のみです。
044 無効なパラメータの組み合わせです。 非同期トリガで使用できるレコードバッファがありません。
045 無効なパラメータの組み合わせです。 読み込みまたは検索コマンドのプレトリガで利用可能なレコードバッファがありません。
046 無効なパラメータの組み合わせです。 削除コマンドで利用可能なレコードバッファがありません。
047 このパラメータの組み合わせにトリガはすでに存在します。
048 無効な要求です。 トリガはすでに指定された状態です。
052 トリガ状態を変更することは現在できません。
103 ファイル名を空白にできません。
111 無効な機能コードです。
112 TYPE は TEMP または PERM にする必要があります。 トリガのアクティブ化/非アクティブ化のタイプは、一時(TEMP、このニュークリアスセッション間のみ持続)または永続(PERM)のどちらかにする必要があります。
1xxx Adabas レスポンス 22 が返されました。xxx は、サブコードを表します。
3xxx ゼロ以外の Adabas レスポンスコードが返されました。xxx は実際の Adabas レスポンスコードです。
9999 機能は成功しませんでした。 パラメータおよび既存のトリガ定義を確認してください。 Software AG 技術サポートに連絡してください。

Top of page