Partager via


Définition d’une table 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, selon la valeur de la variable spécificateur de longueur. La quantité de données transmises dépend également de la valeur de la variable spécificateur de longueur : seul le nombre d’éléments spécifiés est envoyé ou reçu. La variable 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 le projet TI (Transaction Integrator) et que vous spécifiez des tables de longueur variable en tant qu’recordsets, 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 dans 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 tableau ou recordset :

Dans la classe de propriété de paramètre à définir en tant que tableau ODO, utilisez le Concepteur pour sélectionner la propriété Is Array . Une fois IsArray sélectionné, les dimensions de tableau et la propriété Déclenche en fonction de deviennent disponibles. Définissez les dimensions du tableau à l’aide de la propriété Array Dimensions . Affectez l’index ODO au paramètre défini comme tableau ODO. Sélectionnez l’index en développant la propriété Se produit selon.

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 créée lorsque le COBOL précédent est importé :

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