ILSMARTLINKAGE

型を作成することで、手続き型 COBOL プログラムの連絡節およびエントリ ポイントを .NET COBOL コードに公開します。

構文:

制約事項: この指令は、.NET COBOL でのみサポートされています。
>>-.---.-.-------ILSMARTLINKAGE---.-------------.--.--------><
   +-/-+ |                        +-"namespace"-+  |
         +-----NOILSMARTLINKAGE--------------------+

パラメーター:

namespace
生成された各クラスがグループ化されるネームスペース

プロパティ:

デフォルト: ILSMARTLINKAGE
段階: 構文チェック
$SET: 最初の行
IDE での相当機能: プロジェクトのプロパティで [COBOL] タブの [Expose group linkage items to managed code] をチェックします。

説明:

この指令は、連絡項目をマネージ (.NET または Java) コードに公開します。型が標準のマネージ型ではなく (「.NET および JVM COBOL と他の言語の型の互換性」を参照)、メイン プログラムまたは ENTRY 文で示される従属エントリ ポイントのいずれかに参照渡しされる 01 レベルの項目 (グループ項目または基本項目) ごとに、追加のクラスが生成されます。このクラスの名前は、01 レベルの連絡項目の名前と同じです。

01 レベルの項目自体およびすべての従属項目 (グループの場合) がこのクラスのプロパティとして公開され、ここでのプロパティは標準のマネージ型です。COBOL グループ項目は、文字列プロパティとして公開されます。グループに非 DISPLAY データ (数値 COMP 項目など) がある場合、グループに関連付けられたプロパティを非 DISPLAY 項目のポピュレートに使用することはできません。この場合、そのような非 DISPLAY 項目は、非 DISPLAY 項目に関連付けられた個別プロパティを使用してポピュレートする必要があります。ILSMARTRESTRICT 指令を使用すると、グループ項目のプロパティの生成が抑制され、基本項目のプロパティのみが生成されます。

プロパティ名は、データ項目名からハイフンを削除し、そのハイフンに続く文字を大文字に変換することで生成されます。たとえば、データ項目 author-name からは AuthorName というプロパティが生成されます。また、ILCUTPREFIX 指令を使用して名前の最初の部分を削除することもできます。

変換前の元の COBOL 名が重複している場合 (COBOL では修飾を使用して一意にできる場合)、変換後の名前が一意になるように、生成されるプロパティ名に最小限の修飾名がプレフィックスとして付けられます。次に例を示します。

01 link-rec.
   03 a1.
      05 b pic x.
   03 b1.
      05 b pic x.

この 2 つの基本項目 b に対して生成されるプロパティ名は、a1_b および a2_b になります。

ただし、元の COBOL 名の違いが文字「-」の有無だけの場合や ILCUTPREFIX 指令でプレフィックスが削除されたかどうかだけの場合は、コンパイル時にエラー メッセージ (COBCH0842) が表示されます。このメッセージが表示される場合は、項目名が変換後に一意になるように変更してください。たとえば、次のレコード レイアウトではエラーが発生します。

01 link-rec.
   03 a-b pic x.
   03 ab  pic x.

ネームスペースを指定すると、この指令の結果として生成されるすべてのクラスはそのネームスペースの下でグループ化されます。

COBOL プログラムがマネージ コードにコンパイルされると、メインの手続き部のエントリ ポイントに対してメソッドが生成されるほか、ENTRY 文で示される従属エントリ ポイントごとにメソッドがさらに生成されます。ILSMARTLINKAGE を使用すると、エントリ ポイントごとに追加のメソッドが生成されます。パラメーター型は、それぞれの連絡レコードに対して生成された ILSMARTLINKAGE 型のインスタンスです。これらの追加のメソッドは、たとえば、ILSMARTLINKAGE 型のインスタンスを構築し、そのプロパティを使用してポピュレートした Java プログラムによって呼び出される場合があります。

これらのプロパティに加えて、ILSMARTLINKAGE 型には .Reference という別のプロパティがあり、連絡データへの COBOL 参照を取得するために使用できます。このプロパティは、ランタイムの RunUnit クラスで call メソッドを明示的に呼び出す際に使用できます。次に例を示します。

myRunUnit.Call("myprogram", myByRefParam.Reference);

例:

次の COBOL プログラムは、ILSMARTLINKAGE、ILCUTPREFIX(lnk-b-)、ILCUTPREFIX(lnk-)、および ILSMARTTRIM でコンパイルされます。

       program-id. BookLegacy.
						 ...
       linkage section.
       01 lnk-function            pic x.
       01 lnk-b-details.
          03 lnk-b-text-details.
             05 lnk-b-title       pic x(50).
             05 lnk-b-type        pic x(20).
             05 lnk-b-author      pic x(50).
          03 lnk-b-stockno        pic x(4).
          03 lnk-b-retail         pic 99v99.
          03 lnk-b-onhand         pic 9(5).
          03 lnk-b-sold           pic 9(5) comp-3.
       procedure division using by value lnk-function
                                by reference lnk-b-details.

C# では、次のように .NET COBOL で BookLegacy プログラムのデータにアクセスできます。

    BookLegacy myBook = new BookLegacy(); 
         //creates an object corresponding to the BookLegacy program
    Details myDetails = new Details(); 
         //creates an instance corresponding to the group lnk-b-details 
    . . .          
       myDetails.Stockno = "6666";
       myDetails.Title = ".NET COBOL";
       myDetails.Author = "Mike Focus";
       myDetails.Type = "Reference";
       myDetails.Retail = 15.50M;
       myDetails.Onhand = 20;
       myDetails.Sold = 5;
       myBook.BookLegacy("2", myDetails);
         // calls the BookLegacy method with myDetails, 
         // which corresponds to the group item lnk-b-details

詳細については、Visual COBOL サンプルの C# WinBook デモンストレーションを参照してください。