Источник:
http://alexvoy.blogspot.com/2022/02/...basebatch.html
==============
Old good pack/unpack patterns with SysPackExtension call. Say, we need to augment RunBaseBatch based class .
///
/// We are going to use a new additional parameter///
[ExtensionOf(classStr())]
public final
class My_Extension{
private boolean myNewParm;
#define.CurrentVersion(1)
#localmacro.CurrentList
myNewParm
#endmacro
///
/// myNewParm access
///
/// boolean
/// boolean
public boolean
parmMyNewParm(boolean _parm = myNewParm)
{
myNewParm= _parm;
return myNewParm;
}
///
/// Extends Pack
///
/// container
public container
pack()
{
container packedClass = next pack();
return SysPackExtensions::appendExtension(packedClass, classStr(
My_Extension),
this.myPack());
}
///
/// Extends Unpack
///
/// container
/// boolean
private boolean
myUnpack(container packedClass)
{
Integer version = RunBase::getVersion(packedClass);
switch (version)
{
case #CurrentVersion:
[version, #currentList] = packedClass;
break;
default:
return false;
}
return true;
}
///
/// Packs my locals
///
/// container
private container
myPack()
{
return [
#CurrentVersion,
#CurrentList];
}
///
/// Extends unpack
///
/// container
/// boolean
public boolean
unpack(container _packedClass)
{
boolean result = next unpack(_packedClass);
if (result)
{
container myState = SysPackExtensions::findExtension(_packedClass, classStr(
My_Extension));
//Also unpack the extension
if (!
this.myUnpack(myState))
{
result =
false;
}
}
return result;
}
}
Источник:
http://alexvoy.blogspot.com/2022/02/...basebatch.html