reflect.Value.getInterfaceValue
Returns the value record referenced by this interface variable.
Syntax
getInterfaceValue( )
  RETURNS reflect.ValueUsage
The getInterfaceValue() method returns a reflect.Value object,
that is a reference to the variable referenced by this interface reflect.Value object.
The reflect.Value object used to call this method must have been created from an
INTERFACEreflect.Value object returned from a method like valueOf(), and references an
interface variable.
Program variables can be defined from types with
methods:
TYPE CustType RECORD
   ...
END RECORD
FUNCTION (self CustType) print() RETURNS ()
   ...
END FUNCTION
DEFINE c CustType  -- Variable created from type with methods
CALL c.print()Interface variables can be defined from 
INTERFACE types and reference variables
with
methods:TYPE DisplayInterface INTERFACE
    print()
END INTERFACE
DEFINE i DisplayInterface
LET i = c       -- Interface variable i references c
CALL i.print()  -- Can call c.print() indirectlyreflect.Value object referencing the interface variable
i, the getInterfaceValue() method returns the
reflect.Value object referencing the variable
c:DEFINE vi reflect.Value
DEFINE ivi_c reflect.Value
LET vi = reflect.Value.valueOf(i)   -- This references i
LET i = c
LET ivi_c = vi.getInterfaceValue()  -- This references cThe new reflect.Value object references the original
variable: Any call to a reflection manipulation method modifies the underlying variable
directly.
The method throws error -8112,
if this value is not a reflect.Value object referencing an INTERFACE.
Example
IMPORT reflect
TYPE CustType RECORD
    id INTEGER,
    name VARCHAR(50)
END RECORD
TYPE OrdListType RECORD
     cust_id INTEGER,
     orders DYNAMIC ARRAY OF RECORD
         id INTEGER,
         crea DATE,
         totam DECIMAL(10,2)
     END RECORD
END RECORD
TYPE DisplayInterface INTERFACE
    print()
END INTERFACE
FUNCTION (self CustType) print() RETURNS ()
    DISPLAY "Customer: ", self.name
END FUNCTION
FUNCTION (self OrdListType) print() RETURNS ()
    DEFINE x INTEGER
    DISPLAY "Orders for : ", self.cust_id
    FOR x=1 TO self.orders.getLength()
        DISPLAY self.orders[x].crea, ":", self.orders[x].totam
    END FOR
END FUNCTION
FUNCTION main()
    DEFINE i DisplayInterface
    DEFINE c CustType
    DEFINE ol OrdListType
    DEFINE vi reflect.Value
    DEFINE ivi_c reflect.Value
    DEFINE ivi_ol reflect.Value
    LET vi = reflect.Value.valueOf(i)
    DISPLAY "vi kind        : ", vi.getType().getKind()
    LET i = c
    LET ivi_c = vi.getInterfaceValue()
    DISPLAY "c field 1 type : ", ivi_c.getField(1).getType().toString()
    DISPLAY "c field 2 type : ", ivi_c.getField(2).getType().toString()
    LET i = ol
    LET ivi_ol = vi.getInterfaceValue()
    DISPLAY "ol field 1 type: ", ivi_ol.getField(1).getType().toString()
    DISPLAY "ol field 2 type: ", ivi_ol.getField(2).getType().toString()
    DISPLAY "ivi_c assignable from ivi_ol ? : ",
        IIF(ivi_c.getType().isAssignableFrom(ivi_ol.getType()),"YES","NO")
END FUNCTIONShows:
vi kind        : INTERFACE
c field 1 type : INTEGER
c field 2 type : VARCHAR(50)
ol field 1 type: INTEGER
ol field 2 type: DYNAMIC ARRAY OF RECORD
ivi_c assignable from ivi_ol ? : NO