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 useinternal final class RunnableClass1
{
public static void main(Args _args)
{
if (! _args || ! _args.record())
{
throw error(Error::wrongUseOfFunction(funcName()));
}
ParentClass::construct(_args.record()).process();
}
}