cancel
Showing results for 
Search instead for 
Did you mean: 

JCo3 - Wie parse ich die Metadata einer Funktionsstruktur?

Former Member
0 Kudos

Hi,

bei der Konvertierung unserer JCo2 Schnittstelle nach JCo3 habe ich folgendes Problem: In JCo2 konnte ich problemlos die Strukturen aus der ImportParameterList oder der TableParameterList per fields() und getString() ermitteln.

Pseudocode:

  input= function.getImportParameterList()

  kopf = input.getStructure("KOPF")

  fi   = kopf.fields()

  while fi.hasMoreElements()

    fld = fi.nextField()

    System.out.println(fld.getName()+" "+fld.getString())

  wend

 
  tables = function.getTableParameterList()

  pos    = tables.getTable("POSITION")

  for pp=0 to pos.getNumRows()-1

      pos.setRow(pp)

      fi = pos.fields()

      jcoServer.printlog("Position:"+pp)

      while fi.hasMoreElements()

            fld = fi.nextField()

            System.out.println(fld.getName()+" "+fld.getString())

      wend

   next pp

Meine Versuche, das irgendwie ähnlich mit JCo3 hinzubekommen, waren leider nicht erfolgreich.

Pseudocode:

  input= function.getImportParameterList()

  kopf = input.getStructure("KOPF")

  fields = kopf.getMetaData().getFieldCount()

  for feld=0 to fields-1

      System.out.println(kopf.getMetaData().getName(feld)+" "+kopf.getMetaData().getString(feld))

      // Ergibt: No match for method com.sap.conn.jco.rt.DefaultRecordMetaData.getString(java.lang.Integer)

  next

  tables = function.getTableParameterList()

  pos    = tables.getTable("POSITION")

  rows = pos.getNumRows()

  for row=0 to rows-1

      pos.setRow(row)

      row=new java.lang.Integer(row)

      System.out.println(pos.getMetaData().getName(row)+" "+pos.getMetaData().getString(row))

      // Ergibt: java.lang.IndexOutOfBoundsException: Index [32] out of bounds.The metadata 'ZJMM_KMK_GM_POS' contains 26 fields

  next

Kann mir da vielleicht ein Experte weiterhelfen?

Vielen Dank

Stephan

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member207744
Contributor
0 Kudos

Hi Vielen,

Below expection says, you have only 26 fields, but inside for loop you are trying to get more than that.

I doubt return value of rows is more than 26.

So only you are getting this error.

Check your logic, if you have any problem do let us know.

rows = pos.getNumRows()
for row=0 to rows-1
pos.setRow(row)       row=new java.lang.Integer(row)
System.out.println(pos.getMetaData().getName(row)+" "+pos.getMetaData().getString(row))
// Ergibt: java.lang.IndexOutOfBoundsException: Index [32] out of bounds.
The metadata 'ZJMM_KMK_GM_POS' contains 26 fields

Note: Post your query in english, you will get more response.

Regards,

Sriram.V

Former Member
0 Kudos

Thanks for your answer, Sriram.

I was trying to loop only for valid items, but rows = pos.getNumRows() seems to return invalid values. This would also makes 'sense' with the previous error:

No match for method com.sap.conn.jco.rt.DefaultRecordMetaData.getString(java.lang.Integer)

There seems to be something wrong with my way of using metadata.

I'll follow your advice and post my request in English also.

Best Regards

Stephan Knobloch