Helproutine

ヘルプルーチンには、ヘルプ要求の処理を容易にするための特徴があります。複雑な対話形式のヘルプシステムを実装するために使用できます。プログラムエディタで作成します。

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


ヘルプの呼び出し

Natural ユーザーは、ヘルプ文字をフィールドに入力するか、または、ヘルプキー(通常は PF1)を押して Natural ヘルプルーチンを呼び出すことができます。デフォルトのヘルプ文字は疑問符(?)です。

  • ヘルプ文字は 1 回しか入力できません。

  • ヘルプ文字は入力文字列内で変更される唯一の文字である必要があります。

  • ヘルプ文字は入力文字列内の最初の文字である必要があります。

ヘルプルーチンが数値フィールドに対して指定されている場合、Natural ではそのフィールドのヘルプルーチンを呼び出す目的で疑問符を入力できます。その場合も、Natural ではフィールド入力として有効な数値データが提供されることをチェックします。

まだ指定されていない場合は、SET KEY ステートメントでヘルプキーを指定できます。

SET KEY PF1=HELP

ヘルプルーチンは、それが呼び出されるプログラムまたはマップに指定されている場合にのみ、ユーザーが呼び出すことができます。

ヘルプルーチンの指定

ヘルプルーチンは次のように指定できます。

  • プログラム内では、ステートメントレベルおよびフィールドレベルで指定。

  • マップ内では、マップレベルおよびフィールドレベルで指定。

ヘルプが指定されていないフィールドに対してヘルプが要求された場合や、参照するフィールドのないヘルプが要求された場合は、ステートメントレベルまたはマップレベルで指定されたヘルプルーチンが呼び出されます。

ヘルプルーチンは、プログラム自体または処理ルール内の REINPUT USING HELP ステートメントを使用して呼び出すこともできます。REINPUT USING HELP ステートメントに MARK オプションが含まれている場合は、マークされたフィールドに割り当てられているヘルプルーチンが呼び出されます。フィールド固有のヘルプルーチンが割り当てられていない場合は、マップのヘルプルーチンが呼び出されます。

ヘルプルーチン内の REINPUT ステートメントは、同じヘルプルーチン内の INPUT ステートメントにのみ適用できます。

ヘルプルーチンの名前は、次に示すような INPUT ステートメントのセッションパラメータ HE で指定できます。

INPUT (HE='HELP2112')

または、マップエディタの拡張フィールド編集機能を使用して指定することもできます(「マップの作成」および『エディタ』ドキュメントを参照してください)。

ヘルプルーチンの名前は、英数字定数または名前が含まれる英数字変数で指定できます。定数の場合は、ヘルプルーチン名をアポストロフィで囲む必要があります。

ヘルプルーチンのプログラミングについて

ヘルプルーチンの処理は、ESCAPE ROUTINE ステートメントで終了できます。

ヘルプルーチンで END OF TRANSACTION または BACKOUT TRANSACTION ステートメントを使用すると、メインプログラムのトランザクションロジックに影響を与えるため注意してください。

ヘルプルーチンとのパラメータの受け渡し

ヘルプルーチンは、現在アクティブなグローバルデータエリアにアクセスできますが、独自のグローバルデータエリアを持つことはできません。また、独自のローカルデータエリア(LDA)を持つことができます。

パラメータを使用した、ヘルプルーチンとのデータの受け渡しも可能です。1 つのヘルプルーチンに、20 個までの明示的なパラメータと 1 個の暗黙的なパラメータを指定できます。明示的なパラメータは、ヘルプルーチン名の後に HE オペランドを付けて指定します。

HE='MYHELP','001'

暗黙的なパラメータとは、ヘルプルーチンが呼び出されたフィールドです。

INPUT #A (A5) (HE='YOURHELP','001')

上記の 001 は明示的なパラメータであり、#A は暗黙的なパラメータ/フィールドです。

これは、ヘルプルーチンの DEFINE DATA PARAMETER ステートメント内で次のように指定します。

DEFINE DATA PARAMETER 
1 #PARM1 (A3)          /* explicit parameter 
1 #PARM2 (A5)          /* implicit parameter 
END-DEFINE

暗黙的なパラメータ(上記例の #PARM2)は省略できることに注意してください。暗黙的なパラメータは、ヘルプが要求されたフィールドにアクセスして、このフィールドにヘルプルーチンからデータを返すために使用します。例えば、計算機能プログラムをヘルプルーチンとして実装し、計算結果をフィールドに返すことができます。

ヘルプが呼び出されると、データが画面からプログラムデータエリアに渡される前に、ヘルプルーチンが呼び出されます。これは、ヘルプルーチンは同じ画面トランザクション内で入力されたデータにアクセスできないことを意味しています。

ヘルプ処理が完了すると、画面データはリフレッシュされます。ヘルプルーチンによって変更されたフィールドは更新されます。ヘルプルーチンが呼び出される前にユーザーによって変更されていたフィールドは更新から除外されますが、ヘルプが要求されたフィールドは更新に含まれます。例外:ヘルプが要求されたフィールドが、ダイナミック属性(DY セッションパラメータ)によって複数の部分に分割され、疑問符が入力された部分が、ユーザーによって変更された部分のにある場合、フィールドの内容はヘルプルーチンでは変更されません。

属性制御変数は、ヘルプルーチン処理の後では、たとえヘルプルーチン内で変更されている場合でも再評価されることはありません。

等号オプション

等号(=)は明示的なパラメータとして指定できます。

INPUT PERSONNEL-NUMBER (HE='HELPROUT',=)

このパラメータは、フィールド名(マップレベルで指定された場合はマップ名)を含む内部フィールド(フォーマット/長さ A65)として処理されます。対応するヘルプルーチンは、次のように始まります。

DEFINE DATA PARAMETER 
1 FNAME (A65)             /* contains 'PERSONNEL-NUMBER' 
1 FVALUE (N8)             /* value of field (optional) 
END-DEFINE

このオプションは、フィールド名を読み取り、アプリケーションのオンラインドキュメントまたは Predict データディクショナリにアクセスしてフィールド固有のヘルプを提供する 1 つの共通ヘルプルーチンにアクセスするために使用します。

配列インデックス

ヘルプ文字またはヘルプキーで選択されたフィールドが配列要素である場合、そのインデックスは暗黙的なパラメータ(明示的なパラメータに関係なく、ランクに依存して 1~3)として指定されます。

これらのパラメータのフォーマット/長さは I2 です。

INPUT A(*,*)  (HE='HELPROUT',=)

対応するヘルプルーチンは、次のように始まります。

DEFINE DATA PARAMETER 
1 FNAME   (A65)            /* contains 'A' 
1 FVALUE  (N8)             /* value of selected element 
1 FINDEX1 (I2)             /* 1st dimension index 
1 FINDEX2 (I2)             /* 2nd dimension index 
END-DEFINE 
...

ウィンドウとしてのヘルプ

表示するヘルプのサイズを画面サイズよりも小さくすることができます。この場合、ヘルプは次に示すような、フレームで囲まれたウィンドウとして画面に表示されます。

*******************************************************************************
                           PERSONNEL INFORMATION
PLEASE ENTER NAME: ?_________________
PLEASE ENTER CITY: __________________
                   +---------------------------+
                   !                           !
                   ! Type in the name of an    !
                   ! employee in the first     !
                   ! field and press ENTER.    !
                   ! You will then receive     !
                   ! a list of all employees   !
                   ! of that name.             !
                   !                           !
                   ! For a list of employees   !
                   ! of a certain name who     ! 
                   ! live in a certain city,   !
                   ! type in a name in the     !
                   ! first field and a city    !
                   ! in the second field       !
                   ! and press ENTER.          !
*******************!                           !*******************************
                   +---------------------------+

ヘルプルーチン内では、ウィンドウのサイズを次の方法で指定できます。

  • FORMAT ステートメントを使用します(例えば、次のようにページサイズと行サイズを指定します: FORMAT PS=15 LS=30);

  • INPUT USING MAP ステートメントを使用します。この場合は、マップのマップ設定で定義されたサイズが使用されます。

  • DEFINE WINDOW ステートメントを使用します。この場合は、ウィンドウサイズを明示的に指定することも、内容に応じて Natural で自動的にウィンドウサイズを決定することもできます。

ヘルプウィンドウの位置は、ヘルプが要求されたフィールドの位置から自動的に計算されます。Natural では、対応するフィールドに重ならずにできるだけ近くなる位置にウィンドウを配置します。DEFINE WINDOW ステートメントを使用すると、自動位置決めを回避して、ユーザー自身がウィンドウ位置を決定できます。

ウィンドウ処理の詳細については、『ステートメント』ドキュメントの「DEFINE WINDOW」ステートメントおよび『端末コマンド』ドキュメントの端末コマンド「%W」を参照してください。