Définition d’un tableau de longueur variable avec la clause OCCURS DEPENDING
Dans COBOL, vous pouvez utiliser la syntaxe OCCURS DEPENDING ON pour définir une table de longueur variable dans une déclaration de données. Le stockage d’une table de longueur variable est dynamique, en fonction de la valeur dans la variable de spécificateur de longueur. La quantité de données transmises dépend également de la valeur dans la variable de spécificateur de longueur : seuls le nombre d’éléments spécifiés sont envoyés ou reçus. La variable de spécificateur de longueur pour une table de longueur variable doit être un type numérique et sa direction doit correspondre à la direction de la table de longueur variable qu’elle contrôle.
Lorsque vous importez COBOL dans un projet d’intégrateur de transactions (TI) et que vous spécifiez des tables de longueur variable en tant que jeux d’enregistrements, les tables de longueur variable deviennent automatiquement des tableaux ou des objets recordset dont la taille est limitée par un autre paramètre. Le spécificateur de longueur est exposé côté Automation en tant que paramètre et doit être correctement défini lorsque le paramètre est envoyé à l’application hôte.
Pour indiquer manuellement qu’un paramètre d’une méthode est le spécificateur de longueur d’un tableau, définissez d’abord le paramètre de spécificateur de longueur, puis définissez le paramètre de tableau ou de jeu d’enregistrements :
Dans la classe de propriété de paramètre à définir en tant que tableau ODO, utilisez la Designer pour sélectionner la propriété Is Array. Une fois IsArray sélectionné, la propriété Dimensions du tableau et Se produit en fonction de la propriété devient disponible. Définissez les dimensions du tableau à l’aide de la propriété Dimensions du tableau . Affectez l’index ODO au paramètre défini en tant que tableau ODO. Sélectionnez l’index en développant la propriété Occurs en fonction de .
Vous pouvez également indiquer manuellement qu’un paramètre dans une méthode est le spécificateur de longueur d’un paramètre recordset.
Suivez les mêmes étapes que celles définies précédemment ; Toutefois, remplacez le type de données du paramètre d’un type de données simple par un jeu d’enregistrements.
Le code COBOL suivant montre une table de longueur 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).
Voici la méthode qui est créée lors de l’importation du COBOL précédent :
SendInvoices(lCustomerNo As Long, strLastName As String, strFirstName As String _
, lcInvoices As Long) As Object
Voici un exemple de code Microsoft® Visual Basic® qui appelle une méthode importée :
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