Быть может уже кто-нибудь сделал подобное, но рискну выложить ...
В RunBase добавляем метод
X++:
boolean checkContainmentTypes(container a, container b)
{
int i;
if(conlen(a) != conlen(b)) return false;
for(i = 1;i<=conlen(a);i++)
{
if(typeof(conpeek(a,i)) != typeof(conpeek(b,i))) return false;
}
return true;
}
pack() наследника RunBase приобретает вид
X++:
public container pack()
{
return [#list];
}
unpack() наследника RunBase приобретает вид
X++:
public boolean unpack(container packedClass)
{
if(this.checkContainmentTypes([#list], packedClass))
[#list] = packedClass;
else
info(@'Сохраненный набор параметров для данного объекта не совпал по структуре с требуемым - значения восстановлены по умолчанию.');
this.init();
return true;
}
Не болит голова о версиях контейнера параметров - теперь версии никому никуда не уперлись.
Не болит голова о мусоре в SysLastValue - его просто не будет, ибо перезатрется .
Не болит голова о необходимости чистить SysLastValue - ибо просто не от чего его чистить.
P.S. И никакого хакерства и нелепых телодвижений по чистке всякого от всякого
P.P.S. И эцилоп не будет бить по ночам ... никогда ...