Definición de una tabla de longitud variable con la cláusula OCCURS DEPENDING
En COBOL, puede usar la sintaxis OCCURS DEPENDING ON para definir una tabla de longitud variable en una declaración de datos. El almacenamiento de una tabla de longitud variable es dinámico, según el valor de la variable del especificador de longitud. La cantidad de datos pasados también depende del valor de la variable del especificador de longitud: solo se envía o recibe el número de elementos especificados. La variable de especificador de longitud para una tabla de longitud variable debe ser un tipo numérico y su dirección debe coincidir con la dirección de la tabla de longitud variable que controla.
Al importar COBOL en el proyecto integrador de transacciones (TI) y se especifican tablas de longitud variable como conjuntos de registros, las tablas de longitud variable se convierten automáticamente en matrices o objetos de conjunto de registros cuyo tamaño está limitado por otro parámetro. El especificador de longitud se expone en el lado de Automation como parámetro y debe establecerse correctamente cuando el parámetro se envía a la aplicación host.
Para indicar manualmente que un parámetro de un método es el especificador de longitud de una matriz, primero defina el parámetro de especificador de longitud y, a continuación, defina el parámetro array o recordset:
En la clase de propiedad de parámetro que se va a definir como una matriz de ODO, use el Designer para seleccionar la propiedad Is Array. Después de seleccionar IsArray , las dimensiones de matriz y se producen en función de la propiedad esté disponible. Defina las dimensiones de la matriz mediante la propiedad Dimensiones de matriz. Asigne el índice de ODO al parámetro definido como la matriz de ODO. Seleccione el índice expandiendo la propiedad Se produce en función de .
También puede indicar manualmente que un parámetro de un método es el especificador de longitud de un parámetro recordset.
Siga los mismos pasos que se definieron anteriormente; sin embargo, cambie el tipo de datos del parámetro de un tipo de datos simple a un conjunto de registros.
El código COBOL siguiente muestra una tabla de longitud variable:
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).
A continuación se muestra el método que se crea cuando se importa el COBOL anterior:
SendInvoices(lCustomerNo As Long, strLastName As String, strFirstName As String _
, lcInvoices As Long) As Object
A continuación se muestra un ejemplo de código de Microsoft® Visual Basic® que llama a un método importado:
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