InterfacingWithStdCOBOL.sln ソリューションの 3 番目のプロジェクト ペア (StdCbl03*) は、OCCURS 句を使用する COBOL プログラムを示すサンプルです。このプロジェクトも StdCbl02 と同様、COBOL データとオブジェクト プロパティをプロキシ クラスで変換し、これらのプロパティを C# クライアントに公開します。
StdCbl03 プロジェクトには、次の各プログラムが含まれています。
11 から 16 行目
01 INOUT-FIELDS. 03 INOUT-FIELD01 PIC 9(02) COMP. 03 INOUT-FIELD02 PIC X(26). 03 INOUT-TABLE OCCURS 3. 05 INOUT-TABLE-FIELD01 PIC X(15). 05 INOUT-TABLE-FIELD02 PIC S9(09)V9(5) COMP-3.
この OCCURS グループは、2 つのフィールドの 3 回の出現、または各項目に 2 つのフィールド (プロパティ) を含むサイズ 3 の配列と見なすことができます。出現するそれぞれが 2 つのプロパティを持つオブジェクトの場合、.NET の ArrayList を効果的に利用できます。
7 から 33 行目
*> OO COBOL class for OUT-TABLE table class-id. OOiOutFields. working-storage section. *> using native .NET Type and/or classes 01 OutTableField01 type System.Double property. 01 OutTableField02 type System.Double property. end class.
メソッド ExecStdCbl03 の作業記憶域節の 31 行目:
01 obj-InoutFieldsItem type OOiInoutFields
連絡節の 59 行目:
01 obj-InoutFieldsArray Object Reference ArrayListClass.
36 行目:
procedure division using obj-InoutFieldsArray as type System.Collections.ArrayList obj-OutFieldsArray as type System.Collections.ArrayList.
47 から 51 行目:
Move 1 to Idx Perform varying obj-InoutFieldsItem through obj-InoutFieldsArray Set INOUT-TABLE-FIELD01(Idx) to obj-InoutFieldsItem::"InOutTableField01" Move obj-InoutFieldsItem::"InOutTableField02" to INOUT-TABLE-FIELD02(Idx) Add 1 to Idx End-Perform
ArrayList には、2 つのプロパティを含むオブジェクトが 3 つ格納されており、OCCURS グループ内の 2 つのフィールドの 3 回の出現に対応しています。
53 行目:
Call "StdCbl03" using INPUT-FIELDS INOUT-FIELDS OUTPUT-FIELDS
31 行目:
ArrayList InOutArray = new ArrayList(3);
36 から 39 行目:
OOiInoutFields inOutFieldsItem0 = new OOiInoutFields(); inOutFieldsItem0.InOutTableField01 = "Item #1"; inOutFieldsItem0.InOutTableField02 = 111.111; InOutArray.Add(inOutFieldsItem0);
55 行目:
objStdCbl03.ExecStdCbl03(ref InOutArray, ref OutArray );
この結果、C# やその他の .NET マネージ コードとの間でやり取りされる .NET ArrayList (System.Collections.ArrayList) が得られます。ArrayList は、DataGrid へのバインドなど、さまざまな方法で使用できます。