マネージ型としての COBOL リンケージ データの公開

ILSMARTLINKAGE 指令を使用してコンパイルすることで、COBOL 連絡節とエントリ ポイントを他のマネージ言語に公開できます。

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-detailsDetails として公開され、次のようにデータ項目にアクセスできます。

    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 = ".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 デモンストレーションを参照してください。