ILSMARTLINKAGE

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

構文:

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

パラメーター:

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

プロパティ:

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

説明:

この指令は、グループ リンケージ項目をマネージ (.NET または Java) コードに公開します。COBOL プログラムで通常生成されるクラスの他に、この指令は実質的に連絡節ですべての 01 レベル グループ項目に 1 つのクラスを生成します。グループの各データ項目がこのクラスのプロパティとして公開され、ここでのプロパティは標準のマネージ型です。

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

データ項目名からはハイフンが削除され、その削除されたハイフンに続く文字は大文字に変換されます。たとえば、データ項目 author-nameAuthorName に名前変更されます。また、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.

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

ILSMARTLINKAGE を使用してコンパイルすると、追加のメソッドまたは .Reference というプロパティを含むクラスおよび型が生成されます。そのようなクラスまたは型を「参照渡し」で受け取るプログラムにパラメーターとして渡す場合、.Reference プロパティを指定して、「参照渡し」オブジェクトを使用する必要があります。これは、SmartLinkage パラメーターをカプセル化するオブジェクトを返すため、「参照渡し」によって宣言されているメソッドで使用されます。

また、.ReferenceRunUnit: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

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