Bagikan melalui


Menentukan Tabel Berdimensi Variabel dengan Klausul OCCURS DEPENDING

Di COBOL, Anda dapat menggunakan sintaks OCCURS DEPENDING ON untuk menentukan tabel dengan panjang variabel dalam deklarasi data. Penyimpanan untuk tabel panjang variabel bersifat dinamis, tergantung pada nilai dalam variabel penentu panjang. Jumlah data yang diteruskan juga tergantung pada nilai dalam variabel penentu panjang: Hanya jumlah elemen yang ditentukan yang dikirim atau diterima. Variabel penentu panjang untuk tabel panjang variabel harus merupakan jenis numerik, dan arahnya harus sesuai dengan arah tabel panjang variabel yang dikontrolnya.

Saat Anda mengimpor COBOL ke Proyek Integrator Transaksi (TI), dan Anda menentukan tabel panjang variabel sebagai aset rekaman, tabel panjang variabel secara otomatis menjadi array atau objek recordset yang ukurannya dibatasi oleh parameter lain. Penentu panjang diekspos pada bagian Automation sebagai parameter dan harus diatur dengan benar ketika parameter dikirim ke aplikasi induk.

Untuk menunjukkan bahwa parameter dalam metode secara manual adalah penentu panjang untuk array, pertama-tama tentukan parameter penentu panjang, lalu tentukan parameter array atau recordset:

Di kelas properti parameter yang akan didefinisikan sebagai array ODO, gunakan Perancang untuk memilih properti Is Array . Setelah IsArray dipilih, properti Dimensi Array dan Terjadi berdasarkan kondisi menjadi tersedia. Tentukan dimensi array menggunakan properti Array Dimensions . Tetapkan indeks ODO ke parameter yang didefinisikan sebagai array ODO. Pilih indeks dengan memperluas properti Terjadi tergantung pada.

Anda juga dapat secara manual menentukan bahwa sebuah parameter dalam metode berfungsi sebagai penentu panjang untuk parameter recordset.

Ikuti langkah-langkah yang sama seperti yang didefinisikan sebelumnya; namun, ubah jenis data parameter dari jenis data sederhana menjadi kumpulan rekaman.

Kode COBOL berikut menunjukkan tabel panjang variabel:

01 CUSTOMER-DATA.  
   05 CUSTOMER-NUMBER                 PIC 9(9).  
   05 LAST-NAME                       PIC X(20).  
   05 FIRST-NAME                      PIC X(20).  
   05 INVOICE-COUNT                   PIC 9(7) COMP-3.  
   05 INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.  
      10 INVOICE-NUMBER               PIC 9(10).  
      10 INVOICE-DATE                 PIC 9(7) COMP-3.  
      10 INVOICE-AMOUNT               PIC S9(13)V9(2) COMP-3.  
      10 INVOICE-DESCRIPTION          PIC X(40).  
  

Berikut ini adalah metode yang dibuat ketika COBOL sebelumnya diimpor:

SendInvoices(lCustomerNo As Long, strLastName As String, strFirstName As String _  
    , lcInvoices As Long) As Object  
  

Berikut ini adalah contoh kode Microsoft® Visual Basic® yang memanggil metode yang diimpor:

Dim objCustomer As Object   'Uses late binding  
Dim objInvoices As ADODB.Recordset  
Dim lCustomerNumber As Long  
Dim iRow As Integer  
Dim iCol As Integer  
Dim strLastName As String  
Dim strFirstName As String  
  
'create an instance of the invoicing object  
On Error GoTo ErrorHandler1  
Set objCustomer = CreateObject("Customer.Invoicing.1")  
  
lCustomerNumber = CLng(txtCustomerNumber)  
  
'invoke the GetInvoices method  
On Error GoTo ErrorHandler2  
Set objInvoices = objCustomer.GetInvoices(lCustomerNumber _  
    , strLastName, strFirstName)  
'  
' Transfer the Recordset data to a variant array in a single operation.  
' This is efficient, but may not be suitable for larger Recordsets.  
'  
Dim Data As Variant  
  
Data = objInvoices.GetRows  
grdInvoices.Rows = UBound(Data, 2) + 1  
grdInvoices.Cols = UBound(Data, 1) + 1