|
![]() |
#1 |
Возьми свет!!!
|
Цитата:
Сообщение от belugin
![]() Допустим мы вводим на слое usr в enum LedgerTransType со следующим по порядку значением. Наш код чего-то разносит, и в LegerTrans попадает некоторое количество записей с value 5. Если мы ставим сервис пак, в котором добавлено другое значение с тем же value, то нам надо перелопатить LedgerTrans и присвоить его полю новое значение. Елси мы этого не сделаем, то сисмеа будет интерпретировать это значение поля как значение из сервиспака, а не со слоя usr.
Relation да придется исправить, но вам придется в ином случае исправлять методы Index2Symbol, и помнить про этот баг.. Я знаю что это тип int, который хранится в БД. 7 лет в аксапте достаточный срок чтобы это узнать Но само значение 5 не несет никакого абсолютно смысла, даже инициализация полей записи производиться ч/з enum, а не через его значение.
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! Последний раз редактировалось Murlin; 30.08.2013 в 19:11. |
|
![]() |
#2 |
Участник
|
К сожалению, 5=5, поэтому система не может отличить старую пятерку от новой и придется писать апгрейд скрипт. Вы можете поставить простой эксперимент, для проверки этого равенства
|
|
![]() |
#3 |
Возьми свет!!!
|
Цитата:
Это новая сущность какое значение 5 или 138 она будет иметь значения не имеет, кроме того что есть в relation. Зачем нужны апгрейд скрипты? ![]() ![]() ![]()
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#4 |
Administrator
|
А исторических данных, где уже использовалось значение 5 применительно к определенной логике - нет? Если нет - то и апгрейд скриптов не нужно. А если есть - то как быть?
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#5 |
Возьми свет!!!
|
В аксапте вроде нету предопределенных записей как в 1Ске, откудова они возьмутся
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#6 |
Administrator
|
Цитата:
![]()
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#7 |
Участник
|
В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного, вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.
Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно Последний раз редактировалось S.Kuskov; 03.09.2013 в 10:21. |
|
![]() |
#8 |
Administrator
|
Цитата:
Сообщение от S.Kuskov
![]() В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.
Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно 1. Ситуация со знаками > и < (я про это писал) при сравнении значений енумов 2. Ситуация, когда вместо перечисления конкретных значений енума - указывается отрицание оставшихся значений. Ну, к примеру, можно написать: X++: switch (x) { case 1,2,3: .................. default: } X++: if (x !=4) Предопределенные данные могут возникать тогда, когда эти данные выпускает сам МС. Например, шаблоны отчетов для генератора финотчетности (ГФО). Тут конечно нельзя так просто отбросить именно МС-овские енумы. Также тут надо понимать масштабы обновлений. Одно дело сервис-пак, который вообще могут не ставить, а только вытащить отдельные нужные куски. Другое дело - апгрейд на новую версию. В новой версии - значения енумов скорее всего сохранятся. И там уже так просто не перебьешь. И еще момент - с т.з. сравнения элементов в АОТе - удобнее, когда мало объектов, которые расположены на слое от МСа и на своем слое. В этом плане - проще не МСный код править (для исправления значения енума), а свой, чтобы не увеличивать количество объектов, расположенных на нескольких слоях. Так что если не смотреть вперед на обновление версий - то, в общем-то вариант, когда при конфликте значений берется значение не от МС - вполне жизнеспособен.
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Возьми свет!!!
|
Цитата:
Сообщение от S.Kuskov
![]() В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного, вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.
Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно код вида inventTrans.TransType > a и inventTrans.TransType < b по большим сомнением... Т.к. выпуская sp с новым enumом я думаю в нем будет исправление inventTrans.transtype>a и inventTrans.TransType<c
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#11 |
Участник
|
Цитата:
Сообщение от Murlin
![]() что именно опасного? т.е. действительно "опасного" а не то что вы с формы не перейдете на другую форму. relation - да
код вида inventTrans.TransType > a и inventTrans.TransType < b по большим сомнением... Т.к. выпуская sp с новым enumом я думаю в нем будет исправление inventTrans.transtype>a и inventTrans.TransType<c X++: inventTrans.transtype>a && inventTrans.TransType<c
__________________
// no comments |
|