The following code uses ENUMERATE( ) to obtain an AssocArray filled with member names and types for an object reference. It then lists each member name, member type, member data type, and member value for each member of the object.

// Filename..: QuikList.PRG

// Parameters: oRef - Object reference to list.

// Usage.....: Set Procedure To My.WFM Additive

// ..........: f = New MyForm()

// ..........: Do QuikList With f

//

PARAMETERS oRef

PRIVATE cTemp, xTemp

LOCAL aa, cMember

Try

 aa = Enumerate(oRef)        // Enumerate the passed object

 cMember = aa.FirstKey        // Get first member name

 Do While Not Empty(cMember)

  ? cMember            // Display the member name

  ?? aa[cMember] At 30       // Display the member type

  cTemp = "oRef." + cMember

  xTemp = &cTemp.          // Get the value of the member

  ?? Type("xTemp") At 33       // Display the data type

  If xTemp # Null

   ?? Transform(xTemp, "@T") At 37  // Display the member value

  EndIf

  cMember = aa.NextKey(cMember)   // Get next member name

 EndDo

Catch(exception e)

 MsgBox(e.Message, "QuikList")    // Show any error that occurred

EndTry

// EOF: QuikList.PRG