EGL ソース形式のライブラリー・パーツ

EGL ソース・ファイルでライブラリー・パーツを宣言します。 これについては、『EGL ソース形式』で説明しています。

ライブラリー・パーツの例は以下のとおりです。
Library CustomerLib3

	// Use declarations
	Use StatusLib;
	
	// Data Declarations
	exceptionId ExceptionId ;
	
	// Retrieve one customer for an email
	//   In: customer, with emailAddress set
	//   Out: customer, status
	Function getCustomerByEmail ( customer CustomerForEmail, status int )
		status = StatusLib.success;
		try
			get customer ;  
		onException 
			exceptionId = "getCustomerByEmail" ; 
			status = sqlCode ;
		end
		commit();
	end	
	
	// Retrieve one customer for a customer ID
	//   In: customer, with customer ID set
	//   Out: customer, status
	Function getCustomerByCustomerId ( customer Customer, status int )
		status = StatusLib.success;
		try
			get customer ;  
		onException 
			exceptionId = "getCustomerByCusomerId" ; 
			status = sqlCode ;
		end
		commit();
	end	
	
	// Retrieve multiple customers for an email
	//   In: startId
	//   Out: customers, status
	Function getCustomersByCustomerId
( startId CustomerId, customers Customer[], status int )
		status = StatusLib.success;
		try
			get customers usingKeys startId ;  
		onException 
			exceptionId = "getCustomerForEmail" ; 
			status = sqlCode ;
		end
		commit();
	end	
	
end

ライブラリー・パーツのダイアグラムは、次のとおりです。


ライブラリー・パーツの構文図
Library libraryPartName ... end
パーツをライブラリー・パーツとして識別し、その名前を指定します。alias プロパティー (後述) を設定していない場合は、生成されるライブラリーの名前は libraryPartName になります。

その他の規則については、『命名規則』を参照してください。

BasicLibrary 型、NativeLibrary 型、ServiceBindingLibrary
以下のライブラリー型を示します。
  • 基本ライブラリー (BasicLibrary 型) には、EGL によって記述された関数および他の EGL ロジックでのランタイムに使用される値が含まれます。詳しくは、『BasicLibrary 型のライブラリー・パーツ』を参照してください。
  • ネイティブ・ライブラリー (NativeLibrary 型) は、外部 DLL 用のインターフェースとして機能します。詳細は、『NativeLibrary 型のライブラリー・パーツ』を参照してください。
  • サービス・バインディング・ライブラリー (ServiceBindingLibrary 型) は、Interface 型または Service 型の変数が、実行時にどのようにサービスにアクセスするかを指示します。 詳細については、「ServiceBindingLibrary 型のライブラリー・パーツ」を参照してください。

このライブラリーは、デフォルトでは BasicLibrary 型です。

libraryProperties
ライブラリー・プロパティーは以下のとおりです。
  • alias
  • allowUnqualifiedItemReferences
  • callingConvention (NativeLibrary 型のライブラリー内のみで使用可能)
  • dllName (NativeLibrary 型のライブラリー内のみで使用可能)
  • handleHardIOErrors
  • includeReferencedFunctions
  • localSQLScope
  • messageTablePrefix
  • runtimeBind (ServiceBindingLibrary 型のライブラリー内のみで使用可能)
  • throwNrfEofExceptions

すべてオプションです。

  • alias = "alias" は、生成された出力の名前に組み込まれるストリングを識別します。 alias プロパティーを設定しない場合、代わりにプログラム・パーツ名 が使用されます。
  • allowUnqualifiedItemReferences = noallowUnqualifiedItemReferences = yes は、 構造体項目のコンテナー (構造体項目を保持するデータ・テーブル、レコード、または書式) の名前を除外しても、コードが構造体項目を参照できるようにするかどうかを指定します。 例えば、次のレコード・パーツについて考えましょう。
      Record ExampleRecordPart type basicRecord
        10 myItem01 CHAR(5);
        10 myItem02 CHAR(5);
      end
    以下の変数はそのパーツに基づいています。
      myRecord ExampleRecordPart;
    allowUnqualifiedItemReferences のデフォルト値 (no) を受け入れる場合、以下の代入のように myItem01 を参照するときにレコード名を指定する必要があります。
      myValue = myRecord.myItem01;
    ただし、allowUnqualifiedItemReferences プロパティーを yes に設定した場合は、次に示すように、レコード名を指定する必要はありません。
      myValue = myItem01;

    デフォルト値 (最良実例) を受け入れることをお勧めします。コンテナー名を指定することにより、 コードを読み取る人と EGL に対するあいまいさを減らすことができます。

    EGL は規則セットを使用して変数名または項目名が参照するメモリー領域を決定します。 詳細については、『変数および定数の参照』を参照してください。

  • NativeLibrary 型のライブラリーで使用されるように、callingConvention = I4GL という設定は、EGL ランタイムが次の 2 種類のコード間でどのようにデータを受け渡しするかを指定します。
    • ライブラリー関数を呼び出す EGL コード、および
    • アクセスされている DLL 内の関数

    callingConvention に対して、現在使用可能な値は、I4GL のみです。 追加情報については、『NativeLibrary 型のライブラリー・パーツ』を参照してください。

  • NativeLibrary 型のライブラリーで使用されるように、dllName は、最終の DLL 名を指定します。この名前は、デプロイメント時にはオーバーライドできません。 ライブラリー・プロパティー dllName に値を指定しない場合、 Java™ ランタイム・プロパティー vgj.defaultI4GLNativeLibrary 内で DLL 名を指定する必要があります。

    追加情報については、『NativeLibrary 型のライブラリー・パーツ』を参照してください。

  • handleHardIOErrors = yeshandleHardIOErrors = no により、システム変数 VGVar.handleHardIOErrors にデフォルト値が設定されます。このシステム変数は、try ブロック内の入出力操作でハード・エラーが発生した後に、プログラムを継続して実行するかどうかを制御します。 このプロパティーのデフォルト値は yes であり、この変数は 1 に設定されます。

    詳細については、『VGVar.handleHardIOErrors』および『例外処理』を参照してください。

  • includeReferencedFunctions = noincludeReferencedFunctions = yes は、ライブラリーに、そのライブラリー内にない関数、および現行のライブラリーがアクセスするライブラリーにない関数を含めるかどうかを示します。デフォルト値は no です。 このライブラリーの一部であるすべての関数がこのライブラリー内にある場合は、このプロパティーを無視することができます。

    ライブラリーが、そのライブラリーにない共用関数を使用している場合は、includeReferencedFunctions プロパティーを yes に設定した場合に限り、生成が可能になります。

  • localSQLScope = yeslocalSQLScope = no は、SQL 結果セットおよび作成された文の識別子が、 プログラムまたは pageHandler による呼び出し中に、ライブラリー・コードに対してローカルである (これがデフォルトです) かどうかを示します。値 yes をそのまま使用すると、異なる複数のプログラムが同じ識別子を独自に使用できます。そのライブラリーを使用するプログラムまたは pageHandler は、ライブラリー内で使用されているのと同じ識別子を独自に使用することができます。

    no を指定すると、識別子はその実行単位全体で共用されます。 そのライブラリー内の SQL 文が呼び出されたときに作成された識別子は、そのライブラリーを呼び出すその他のコード内でも使用可能です。ただし、その他のコードは、localSQLScope = yes を使用して、これらの識別子へのアクセスをブロックすることができます。 またライブラリーは、呼び出し側プログラムまたは pageHandler で作成される識別子を参照することもできます。 ただし、参照できるのは、SQL 関連文が既に他のコードで実行された場合で、 かつその別コードがアクセスをブロックしなかった場合だけです。

    SQL 識別子を共用する効果は、次のとおりです。
    • 1 つのコードで結果セットを開き、別のコードでその結果セットから行を取得できる。
    • 1 つのコードで SQL 文を作成し、その文を別のコードで実行できる。

    いずれの場合でも、プログラムまたは pageHandler がライブラリーにアクセスするときに使用可能な識別子は、同じプログラムまたは pageHandler が、同じライブラリー内の同じ関数または別の関数にアクセスするときに使用可能です。

  • msgTablePrefix = " prefix" は、メッセージ・テーブルとして使用されるデータ・テーブルの名前内の先頭の 1 から 4 文字を指定します。 (メッセージ・テーブルは、ライブラリー関数が出力した書式から使用できます。) この名前のその他の文字は、『EGL ソース形式の DataTable パーツ』にリストされている各国語コードの 1 つに対応します。
  • runtimeBind = noruntimeBind = yes は、ServiceBindingLibrary 型のライブラリー・パーツのみに対して有効です。 これにより、デプロイメント時に変更することが可能で、実行時にのみアクセスされる、 ライブラリー固有のプロパティー・ファイルにサービス・バインディング情報を保管するかどうかを指示します。 詳細については、『ServiceBindingLibrary 型のライブラリー・パーツ』を参照してください。
  • throwNrfEofExceptions = nothrowNrfEofExceptions = yes は、ソフト・エラーにより例外がスローされるかどうかを指定します。 デフォルトは no です。背景情報については、『例外処理』を参照してください。
useDeclaration
データ・テーブルまたはライブラリーに簡単にアクセスできるようにします。 これは、書式グループ内の書式にアクセスする場合に必要になります。詳細については、『使用宣言』を参照してください。
private
ライブラリー外では、変数、定数、または関数を使用できないことを示します。private という用語を省略した場合は、変数、定数、または関数を使用できます。

NativeLibrary 型のライブラリー内の関数には、private を指定できません。

fieldName
プリミティブ・フィールドの名前。 命名の規則については、『命名規則』を参照してください。
primitiveType
フィールドのプリミティブ型、または (配列に関連付けられている) 配列エレメントのプリミティブ型。
length
パラメーターの長さ、または (配列に関して) 配列エレメントの長さ。この長さは、fieldName または (配列の場合は) dynamicArrayName のいずれかによって参照されるメモリー領域の文字数または桁数を表す整数です。
decimals
数値型には、decimals を指定できます。これは、小数点以下の桁数を表す整数です。 小数部の桁の最大数は、18 または length で宣言された桁数の小さいほうです。小数点は、データとともに保管されません。
"dateTimeMask"
TIMESTAMP 型および INTERVAL 型には、"dateTimeMask" を指定できます。これは、日時値の特定の位置に意味 (「年の桁」など) を割り当てるものです。 実行時に、データと共にマスクが表示されます。
dataItemPartName
プログラムから可視の dataItem パーツの名前。可視性についての詳細は、『パーツの参照』を参照してください。

パーツは、形式のモデルとして機能します。詳しくは、『Typedef』を参照してください。

recordName
レコードの名前。命名の規則については、『命名規則』を参照してください。
recordPartName
プログラムから可視のレコード・パーツの名前。可視性についての詳細は、『パーツの参照』を参照してください。

パーツは、形式のモデルとして機能します。詳しくは、『Typedef』を参照してください。

constantName literal
定数の名前および値。値は、引用符付きストリングまたは数値となります。命名の規則については、『命名規則』を参照してください。
itemProperty
項目固有のプロパティーと値の組み。 『EGL プロパティーとオーバーライドの概要』を参照してください。
recordProperty
レコード固有のプロパティーと値の組み。使用可能なプロパティーの詳細については、 必要なレコード・タイプに関する参照トピックを参照してください。

基本レコードにはプロパティーはありません。

itemName
オーバーライドするプロパティーを持つレコード・フィールドの名前。『EGL プロパティーとオーバーライドの概要』を参照してください。
arrayName
動的配列の名前。このオプションを使用する場合、 右側の他のシンボル (dataItemPartNameprimitiveType など) は配列の各要素を参照します。
size
配列内のエレメント数。要素の数を指定すると、その配列は静的になります。 指定しない場合、配列は動的です。
functionPart
関数。関数内のどのパラメーターも、緩い型にはできません。詳細については、『EGL ソース形式の関数パーツ』を参照してください。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.