COBOL 連絡節と特定グループ項目の項目の中には、他の言語から直接アクセスできないものがあります。以前は、これらの項目に他のマネージ言語からアクセスするには、中間ラッパー コードを作成するか、または元の COBOL コードを変更する必要がありました。ILSMARTLINKAGE 指令を使用してコンパイルすることで、連絡節とエントリ ポイントを他のマネージ言語に公開できるようになりました。
例えば、COBOL グループ項目は次のように定義できます。
linkage section. 01 lnk-b-details. 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.
ILSMARTLINKAGE 指令によって各グループ項目のクラスが作成され、下位レベルのデータ項目がクラスのメンバーとして公開されます。これらのデータ項目は、ハイフンの削除とそれに続く大文字によって公開されます。また、COBOL ネイティブ型をマネージ型として公開します。さらに、そのグループのデータ項目に、クラスのメンバー としてアクセスできます。次に例を示します。
lnkBDetails.lnkBStockno
このグループ項目は、文字列プロパティとして公開されます。グループに非 DISPLAY データ (数値 COMP 項目など) がある場合、グループに関連付けられたプロパティを非 DISPLAY 項目のポピュレートに使用することはできません。この場合、そのような非 DISPLAY 項目は、非 DISPLAY 項目に関連付けられた個別プロパティを使用してポピュレートする必要があります。
ILCUTPREFIX 指令を使用してコンパイルすることで、グループ項目名からプレフィックスを削除できます。例えば、ILCUTPREFIX(lnk-b) を使用してコンパイルすると、lnk-b-details が Details として公開され、次のようにデータ項目にアクセスできます。
Details.Stockno
要約すると、次のようにグループ項目を公開します。
次の 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 = "Managed 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 デモンストレーションを参照してください。