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 へのバインドなど、さまざまな方法で使用できます。