Construct using SysTableNameFactoryAttribute and SysExtensionAppClassFactory with record

 Parent class with construct based on SysExtensionAppClassFactory

/// <summary>
///     Parent class             
/// </summary>
abstract class ParentClass
{
    protected Common record;

    public static ParentClass construct(Common _record)
    {
        SysTableNameFactoryAttribute attribute = new SysTableNameFactoryAttribute(tableId2Name(_tableRefId));
        ParentClass instance = SysExtensionAppClassFactory::getClassFromSysAttribute(classStr(ParentClass), attribute) as ParentClass;
if (!instance) { throw error(strFmt("@SYS23455", funcName())); } else { instance.parmRecord(_record); } return instance; } public void process() { //Some code } public Common parmRecord(Common _record = record) { record = _record; return record; } }

Implementation of the Child 1 using SysTableNameFactory Attribute
/// <summary>
///     Child class 1            
/// </summary>
[SysTableNameFactory(tableStr(TableName1))]
class ChildClass1 extends ParentClass
{
    public void process()
    {
        info('Child 1');
    }
}
Implementation of the Child 2 using SysTableNameFactory Attribute
/// <summary>
///     Child class 2            
/// </summary>
[SysTableNameFactory(tableStr(TableName2))]
class ChildClass2 extends ParentClass
{
    public void process()
    {
        info('Child 2');
    }
}
Example of use
internal final class RunnableClass1
{
    public static void main(Args _args)
    {
        if (! _args || ! _args.record())
        {
            throw error(Error::wrongUseOfFunction(funcName()));
        }
    
        ParentClass::construct(_args.record()).process();
    }
}