Windows/Linux/IBM i 用の 3GL 組み込み関数の作成手順
- 「Windows/Linux の 3GL BIF ネーミング規則」に従い、組み込み関数のプログラムに名前を付けることで、組み込み関数をデザインします。
- 組み込み関数の定義フォームを完成させます。組み込み関数のサンプル・フォーム より提供されているサンプルを使用することも可能ですし、独自にデザインしたものを使用しても構いません。BIF 定義の構成を知るには、「例 - 簡単な平均化関数」などの 3GL BIF 定義の例を参照してください。
注意:この手順は必須ではありませんが、初めて組み込み関数を作成する場合などは特に、このステップを踏むことが推奨されます。この手順を行うことで、自身の組み込み関数のデザインを必要なデータに変換できるようになっています。
- 関連する情報を組み込み関数定義ファイルに入力します。
注意:この後の 2 つの手順は必須です。組み込み関数がこれらのファイルに記述されていないと、LANSA に認識されません。また、このデータが正しくない場合、組み込み関数は期待通りに動作しません。
- LX_F47 と LX_F4 の定義を作成
LX_F47 と LX_F4 の定義は、次の 2 通りの作成方法があります。方法1:BIF を定義し、Windows にポート
- 「IBM i で RDML ファンクション用の 3GL 組み込み関数を作成」の説明に従い、組み込み関数を IBM i ベースのテーブル DC@F47 に定義します。
- 「IBM i で RDML ファンクション用の 3GL 組み込み関数を作成」の例に示されているように、組み込み関数の引数および戻り値を IBM i ベースのテーブル DC@F48 に定義します。
- オプションとして、自身の組み込み関数の IBM i ベースのバージョンを設計し、コーディングしてテストします。LANSA の組み込み関数機能は LANSA アプリケーションがマルチ・プラットフォーム間でジェネリックなインターフェースとなるよう設計されています。
注意:最終的にマルチ・プラットフォームの組み込み関数を提供する必要がある場合は、すべてのサポート・プラットフォームの組み込み関数用に致命的なエラーの "スタブ" を作成することも検討してください。つまり、作成した組み込み関数が非サポート・プラットフォーム (例: IBM i) で誤って実行された場合に、この状況ではどのような結果になるかを説明する簡単な "致命的なエラー" が表示されるようにするということです。これで、コンパイルや実行時などにより複雑な問題が発生することを防げます。
- 標準の LANSA REQUEST(PCMAINT) 機能を使って、この組み込み関数の定義を IBM i リポジトリからエクスポートします。
- 組み込み関数の定義を使用する必要のある各 Visual LANSA システムにインポートします。これを行うには、CD または共有フォルダから標準の Visula LANSA のインポート機能を利用します。この機能により、ステップ 4 でIBM i からエクスポートされた組み込み関数の詳細を使って LX_F47 と LX_F48 の SQL テーブルが更新されます。
方法2:Windows の SQL 経由で直接 BIF を定義
この方法は、IBM i が存在しない、もしくは Windows/Linux のプラットフォームで SQL ステートメントを使ってデータベースを更新することに不慣れな方向けの代替の方法です。この方法では、定義を LX_F47 と LX_F48 に直接入力する必要があります。以下はファイル LX_F47 にデータ挿入する場合の例です。注意:SQL 経由で LX_F47 および LX_F48 の内部 LANSA テーブルにレコードを挿入・更新する際にデータベースが破損する可能性があります。LX_F47 および LX_F48 の内部 LANSA テーブルへの SQL 経由のレコード挿入・更新時にサポートが必要な場合は、データベース管理者に相談してください。
INSERT INTO "LX_DTA"."LX_F47" VALUES('UD_AVERAGE',413,'Get the Average','C','U_BIF413','N',2,1)ファイル LX_F48 にデータ挿入する際の例は以下の通りです。INSERT INTO "LX_DTA"."LX_F48" VALUES('UD_AVERAGE','ARG',1,1,'A','First Value','R','N',7,7,0,0,10,0,'')
- 「IBM i で RDML ファンクション用の 3GL 組み込み関数を作成」の説明に従い、組み込み関数を IBM i ベースのテーブル DC@F47 に定義します。
- Windows 用に特化した BIF を作成している場合や Windows の 64 ビットのサポートが必要な場合は、以下に示すステップ 6 ~ 9 を行うよりも、LANSA ユーザー定義 BIF ウィザードを利用する方が簡単かもしれません。その場合は、代わりに「Visual Studio ウィザードで組み込み関数を定義」に進んでください。このウィザードは、既存の Visual Studio ユーザーや複数のユーザー定義 BIF が必要な場合などは特に便利です。
- x_win95\x_lansa\source ディレクトリにインストールされた以下のファイルのコピーを作成します。名前の "NNN" の部分を自身の組み込み関数に割り当てた一意の識別子に変更します。
例えば、作成する組み込み関数が 445 で、C: ドライブで作業をする場合は次のようなコマンドを利用します。CD \X_WIN95\X_LANSA\SOURCE
以下は、x_win95\x_lansa\source ディレクトリにインストールされているファイルです。
COPY U_BIFNNN.* U_BIF445.*U_BIFNNN.C
ユーザー組み込み関数 C プログラムのサンプル/スケルトン。
U_BIFNNN.MAK
メイク・ファイルのサンプル/スケルトン。これは、C プログラムを Microsoft Viausl C/C++ でコンパイル・リンクし、Windows オペレーティング システムの DLL を作成する際に必要となります。
U_BIFNNN.DEF
モジュール定義ファイルのサンプル/スケルトン。これは、C プログラムを Microsoft Viausl C/C++ により、Windows オペレーティング システムの DLL にリンクする際に必要となります。
u_bifnnn.unx
メイク・ファイルのサンプル/スケルトン。これは、C プログラムをサポート対象の Linux オペレーティング システムの共有ライブラリにコンパイル・リンクする際に必要となります。
U_BIFNNN.ISB
モジュール定義ファイルのサンプル/スケルトン。これは、C プログラムを IBM i のサービス・プログラムにリンクする際に必要となります。
- コピーした各ファイルを、標準のソース・エディター (E、EPM 等) を使って、次のように編集します。
ファイル
変更箇所の説明
.C
すべての "nnn" を探して、"xxx" に置換します。ここで、xxx は一意の ID です。それぞれの要件に適したコードを含めます。
.MAK
Microsoft Visual C/C++ でコンパイルする際にのみ必要となります。
BIFNAME 行の "nnn" を "xxx" に置き換えます。ここで xxx は一意の ID です。
.DEF
Microsoft Visual C/C++ でコンパイルする際にのみ必要となります。
"nnn" を "xxx" に置き換えます。ここで xxx は一意の ID です。
DESCRIPTION (記述) の xxxxxxxx の部分を組み込み関数の短い説明に置き換えます。
.unx
(この BIF を Linux で実行する予定の場合のみ)
"nnn" を探して "xxx" に置き換えます。ここで xxx は一意の ID です。
.ISB
(この BIF を IBM で実行する予定がある場合のみ)
"nnn" を "xxx" に置き換えます。ここで xxx は一意の ID です。
コメント欄 (/* */) の xxxxxxxx の部分を組み込み関数の短い説明に置き換えます。
- 作成した .C、.MAK、.WMK,、.DEF、.unx、ISB ファイルはできるだけ早くバックアップを取ってください。これはソースコードですので、頻繁にバックアップする必要があります。セキュアでない PC システムにおいて、ソースコードを不意に損失してしまうことはよくある問題です。
- 利用しているプラットフォームに合わせて、以下に示された例のいずれか 1 つを使って、組み込み関数をコンパイルします。