|
![]() |
#1 |
Мрачный тип
|
Быть может уже кто-нибудь сделал подобное, но рискну выложить ...
В 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; } X++: public container pack() { return [#list]; } 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. И эцилоп не будет бить по ночам ... никогда ...
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 24.02.2009 в 14:25. |
|
|
За это сообщение автора поблагодарили: EVGL (2), aidsua (1). |
![]() |
#2 |
Участник
|
Цитата:
Сообщение от TasmanianDevil
![]() Быть может уже кто-нибудь сделал подобное, но рискну выложить ...
В 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; } X++: public container pack() { return [#list]; } 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. И эцилоп не будет бить по ночам ... никогда ... Небольшой нюанс: такая проверка не спасет, если пакуется query: X++: public container pack() { return [#currentVersion, #currentList, this.queryRun.pack()] } |
|
![]() |
#3 |
Мрачный тип
|
В цикле проверки, в случае если оба i-ых элемента окажутся контейнерами, добавить рекурсивный вызов функции проверки по этим элементам.
Запакованный запрос -контейнер из одного элемента типа BLOB, его трудно будет спутать с чем-то другим .
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 24.02.2009 в 18:06. |
|
![]() |
#4 |
MCITP
|
![]()
Имелось ввиду, что если вы изменили в классе Кверю, а потом при запуске "подсосали" старый вариант Квери, то это будет сложно (невозможно?) проверить обычным сравнением (что вы будете при этом сравнивать в двух кверях? откуда вы знаете, что в сохранённой квере добавил пользователь, а что из класса жёстко прошито?)... Просто подтянется старая, вероятно уже неправильная, Кверя. И результаты работы класса будут просто непредсказуемыми....
__________________
Zhirenkov Vitaly |
|
Теги |
pack, runbase, unpack |
|
![]() |
||||
Тема | Ответов | |||
следуюший затык pack/unpack | 20 | |||
Как работают Pack и UnPack ? | 4 | |||
Как удалить сохраненные данные методов pack()/unpack() ? | 23 | |||
pack\unpack | 2 | |||
Русская локализация Axapta 3 ? | 59 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|