|
![]() |
#1 |
Возьми свет!!!
|
Наверное. Но вопрос открыт или кто то что то делает неправильно, или это баг требующий правки по всей системе. Просто поиском по AOT я нашел штук 10-20 вызовов этого метода. Все остальное про апгрейд скрипты несуществующих записей я не понял.
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#2 |
Участник
|
Допустим мы вводим на слое usr в enum LedgerTransType со следующим по порядку значением. Наш код чего-то разносит, и в LegerTrans попадает некоторое количество записей с value 5. Если мы ставим сервис пак, в котором добавлено другое значение с тем же value, то нам надо перелопатить LedgerTrans и присвоить его полю новое значение. Елси мы этого не сделаем, то сисмеа будет интерпретировать это значение поля как значение из сервиспака, а не со слоя usr.
При этом: - требуется сравнение кода - требуется написание апгрейд скрипта - требуется не забыть запустить апгрейд скрипт на всех базах аксапты (с соответствующей остановкой работы, при этом поле может быть непроиндексировано, так что на больших таблицах апдейт может занять существенное время) Если начинать свои идентификаторы с, допустим, 100, то надо просто обновить приложение и всё |
|
![]() |
#3 |
Возьми свет!!!
|
Цитата:
Сообщение от 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. |
|
![]() |
#4 |
Участник
|
К сожалению, 5=5, поэтому система не может отличить старую пятерку от новой и придется писать апгрейд скрипт. Вы можете поставить простой эксперимент, для проверки этого равенства
|
|
![]() |
#5 |
Возьми свет!!!
|
Цитата:
Это новая сущность какое значение 5 или 138 она будет иметь значения не имеет, кроме того что есть в relation. Зачем нужны апгрейд скрипты? ![]() ![]() ![]()
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#6 |
Administrator
|
А исторических данных, где уже использовалось значение 5 применительно к определенной логике - нет? Если нет - то и апгрейд скриптов не нужно. А если есть - то как быть?
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#7 |
NavAx
|
ИМХО, топикастер не знает, что значения енумов в БД хранятся в виде целых чисел, и только в аксапте отображаются нужным тестом. Иначе не могу себе объяснить его упорство.
|
|
|
За это сообщение автора поблагодарили: belugin (3). |
![]() |
#8 |
Участник
|
Есть ранее введенный элемент слое USR, у которого значение 5
Есть новое значение на слое SYP у которого значение 5 Для первого элемента уже введены данные со значением 5. Я не могу поменять для нового элемента с SYP значения с 5 на 6. Хотя в принципе, могу это перекрыть, но - это будет отдельное изменение, за которым надо ухаживать - надо будет при каждом апгрейде обходить все релейшены, где эта штука упомянута по value, и прочие данные Последний раз редактировалось belugin; 02.09.2013 в 17:51. |
|
![]() |
#9 |
Возьми свет!!!
|
Цитата:
Сообщение от belugin
![]() Есть ранее введенный элемент слое USR, у которого значение 5
Есть новое значение на слое SYP у которого значение 5 Для первого элемента уже введены данные со значением 5. Я не могу поменять для нового элемента с SYP значения с 5 на 6. Хотя в принципе, могу это перекрыть, но - это будет отдельное изменение, за которым надо ухаживать - надо будет при каждом апгрейде обходить все релейшены, где эта штука упомянута по value, и прочие данные Что проще и что удобнее поддерживать, что удобнее заметить, исправить и тп.
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#10 |
Участник
|
Цитата:
По всему комплексу проще работать в своем диапазоне. |
|
![]() |
#11 |
Участник
|
Это конечно да, но такое я бы назвал хардкодом.
Обязательно надо использовать switch-case. А по возможности разбить на подклассы, если нам это будет удобно. X++: static SalesFormLetter construct(DocumentStatus document, boolean getParmId = true) { switch(document) { case DocumentStatus::Confirmation : return new SalesFormLetter_Confirm (getParmId); case DocumentStatus::PickingList : return SalesFormLetter_PickingList::construct(getParmId); case DocumentStatus::PackingSlip : return new SalesFormLetter_PackingSlip (getParmId); case DocumentStatus::ProjectPackingSlip : return new SalesFormLetter_PackingSlipProject(getParmId); case DocumentStatus::Invoice : return new SalesFormLetter_Invoice (getParmId); case DocumentStatus::ProjectInvoice : return new SalesFormLetter_InvoiceProject (getParmId); default : throw error(strfmt("@SYS19306",funcname())); } throw error(strfmt("@SYS19306",funcname())); }
__________________
// no comments Последний раз редактировалось dech; 03.09.2013 в 14:38. |
|
![]() |
#12 |
Возьми свет!!!
|
Да майкрософту тоже надо от кода отказаца типа вот этого
while select inventTrans where inventTrans.TransType > a && inventTrans.TransType < b либо отказаться от использования метода index2Symbol
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! |
|
![]() |
#13 |
Роман Долгополов (RDOL)
|
Цитата:
![]() вызов index2Symbol с значением (не индексом) енума в качестве параметра это не осмысленное желание/правило мс, а обычный баг сделанный обычным разработчиком. От того что он работал в это время в мс ничего не меняется - это просто баг (проявляется он только не всегда). Таких кривых вызовов по всему приложению dax2009 ru8 с sl2 слоем около десятка - поправить 10 минут и зарегистрировать для очистки совести в мс. зачем всё усложнять? |
|
![]() |
#14 |
Возьми свет!!!
|
Цитата:
Сообщение от db
![]() да что вы так упелись то
![]() вызов index2Symbol с значением (не индексом) енума в качестве параметра это не осмысленное желание/правило мс, а обычный баг сделанный обычным разработчиком. От того что он работал в это время в мс ничего не меняется - это просто баг (проявляется он только не всегда). Таких кривых вызовов по всему приложению dax2009 ru8 с sl2 слоем около десятка - поправить 10 минут и зарегистрировать для очистки совести в мс. зачем всё усложнять? Либо делаем enum с разрывом, тогда баг, либо без разрыва тогда наш баг.
__________________
Axapta 3.0 sp 5 Oracle ![]() Я могу взорвать вам мозг!!! Последний раз редактировалось Murlin; 03.09.2013 в 15:38. |
|
![]() |
#15 |
Участник
|
Цитата:
![]()
__________________
// no comments |
|
![]() |
#16 |
Участник
|
Что-то чисто технический вопрос вызвал такой всплеск эмоций.
Мне кажется, что система, в которой работаешь волей или неволей задает некоторые правила, которым следует следовать (тавтология). Может быть они не всегда прямо указаны, но большинство их принимает. Учитывая, что никто не работает в одном месте "навсегда", думаю, что всяким писанным и неписанным правилам стоит следовать хотя бы для того, чтобы коллегам, пришедшим на наше место было оставлено привычное окружение. Нумерация энумов из того же вопроса. Прямо нигде не сказано про эту нумерацию. Но косвенно, смотрим мастер создания финансовых аналитик (до DAX20012), там сразу предлагаются значения со 100. Смотрим энумы LedgerJournalACType, LedgerPostingType, LedgerJournalType и прочие - там явно на разных слоях принято использовать разные диапазоны. В чем смысл ухода от этой практики исходя из того, что в нескольких местах неправильно применен один метод? Murlin, конечно Ваше право применять Ваш подход, но пожалейте тех, кто придет на Ваше место, когда Вы сами решите уйти с текущей работы (Вы же не рассчитываете, что будете работать только тут и никто не придет, пока Вас не вынесут с почестями вперед ногами). PS: кстати, при обновлении намного проще решить конфликты в коде, чем конфликты в энумах. Код классов сравнивается легко, а вот энумы полностью копируются на слой изменения и понять, что в новом нижележайшем коде другие значения не совсем очевидно. Последний раз редактировалось Raven Melancholic; 14.09.2013 в 18:40. |
|