#dli ディレクティブ

#dli ディレクティブを使用して、EGL が I/O キーワードから生成するデフォルトの DL/I 呼び出しを変更します。

次の例のように、ディレクティブは、変更する EGL コードと同じ行に配置し、必要に応じて追加の行に続けます。
get myLocation with #dli{
	GU STSCCST (STQCCNO = :myCustomer.customerNo) 
	   STSCLOC (STQCLNO = :myLocation.locationNo) };

上記の例の構文は、DL/I の場合と全く同じではありません。EGL は、一部の DL/I フォーマット設定を実行する、疑似 DL/I 構文をサポートしています。 例えば、EGL はすべての名前を大文字に変換し、名前が 8 文字になるように必要に応じてスペースを追加し、「!=」などの EGL 関係演算子を DL/I で同等の意味を持つものに変換します。 さらに、EGL は、疑似 DL/I 呼び出しでのホスト変数 (ホスト EGL プログラムでは定義されているが、DL/I データベースでは定義されていない変数) を受け入れます。 上記のコード例では、ホスト変数はコロン (:) で始まっています。 これらの生の素材は、生成時に、EGL により、適切にフォーマット設定した DL/I 呼び出しに変換されます。

#dli ディレクティブは、以下のどの状況でも使用できます。
  • DL/I コマンド・コードを追加して、呼び出しの関数を拡張する場合。 連結キーを使用する場合 (*C) や、パス呼び出し内のセグメントを置換から除外する場合 (*N) などがあります。
  • オペランドとして動的配列を使用して、get 呼び出しまたは get next 呼び出しを行う場合。 動的配列を get で埋めるには、最初の GU 呼び出しの後に GN 呼び出しのループを続け、配列全体が設定されるか、DL/I のセグメントがなくなるまでこのループを続行する必要があります。配列そのものにはキー・フィールドはないため (配列のメンバーのみ)、EGL が生成するデフォルトの DL/I コードは機能しません。次の例のようなコードを作成する必要があります。
    myOrderArray OrderRecordPart[] {maxsize = 20}; //オーダーの配列
    
    get myOrderArray with #dli{
    	GU STSCCST STSCLOC STPCORD
    	GN STPCORD };
    
    //次の 20 オーダーを取得する
    get next myOrderArray;
  • キー以外のフィールドをベースにしたセグメント、またはそのセグメントにはない値をベースにしたセグメントを取得する場合。
  • セグメント・タイプに関係なく、データベース内のすべてのセグメントを読み取る場合。 これには、SSA のない GN が必要です。
これらのタスクの多くの具体的な説明につては、DL/I の例を参照してください。