Scriptable so = context.toObject(obj, global);
Scriptable so = Context.toObject(obj, global);
    public Object get(Object obj, String propname) {        if ((obj == null) || (propname == null)) {            return null;        }        String prototypeName = app.getPrototypeName(obj);        if ("user".equalsIgnoreCase(prototypeName) &&                "password".equalsIgnoreCase(propname)) {            return "[macro access to password property not allowed]";        }        // if this is a HopObject, check if the property is defined        // in the type.properties db-mapping.        if (obj instanceof INode) {            DbMapping dbm = app.getDbMapping(prototypeName);            if (dbm != null) {                Relation rel = dbm.propertyToRelation(propname);                if ((rel == null) || !rel.isPrimitive()) {                    return "[property \"" + propname + "\" is not defined for " +                           prototypeName + "]";                }            }        }        Scriptable so = context.toObject(obj, global);        try {            Object prop = so.get(propname, so);            if ((prop == null) || (prop == Undefined.instance)) {                return null;            } else if (prop instanceof NativeJavaObject) {                return ((NativeJavaObject) prop).unwrap();            } else {                return prop;            }        } catch (Exception esx) {            // System.err.println ("Error in getProperty: "+esx);            return null;        }    }