For your question number 1 here is the solution:
public void lookup()
{
Query sysModelElementQuery;
QueryBuildDataSource sysModelElementDataSource;
QueryBuildRange sysModelElementRange;
// create lookup table for SysModelElements and use the Name field
SysTableLookup lookupTable = SysTableLookup::newParameters(tableNum(SysModelElement), this);
lookupTable.addLookupfield(fieldNum(SysModelElement, Name));
lookupTable.setLabel("Base Enum Name");
// create a query used to filtering only the Base enumerations.
sysModelElementQuery = new Query();
sysModelElementDataSource = sysModelElementQuery.addDataSource(tableNum(SysModelElement));
sysModelElementRange = sysModelElementDataSource.addRange(fieldNum(SysModelElement, ElementType));
sysModelElementRange.status(RangeStatus::Hidden);
sysModelElementRange.value(SysQuery::value(enum2int(UtilElementType::Enum)));
lookupTable.parmQuery(sysModelElementQuery);
lookupTable.performFormLookup();
super();
}