|
14.10.2014, 14:43 | #1 |
Участник
|
Ax2012 R2 - обновить model, оставить data?
Есть два приложения:
1) Девелоперское D1 2) Копия раб приложения P1 Задание - заменить код на девелоперском приложении кодом с раб приложения и сверху накатить проекты, созданные в D1 и которых нет пока в раб приложении. Осложнение: Раб приложение разрабатывалось на другом девелоперском приложении D2 и имеет объекты, которых нет в D1. Поэтому, если просто скопировать модель (или рестор model базы сделать), то я подозреваю, что без конфликтов ID не обойтись, тк sqlDictionary приложения D1 находится в базe с данными, а не моделью. Поэтому, вопросы: 1) Как разрешать такие конфликты. Можно ли просто , например, скпировать отдельно sqlDictionary table из раб приложения и ее подсунуть в базу D1. А потом уже накатывать новые проекты. 2) Как-то еще? Последний раз редактировалось kitty; 14.10.2014 в 14:46. |
|
14.10.2014, 15:10 | #2 |
Участник
|
А чего вы хотите добиться?
Сохранить данные в D1? Почему нельзя взять D2 и закинуть проекты в него? Идентификаторы у вас в любом случае разъехались - в 2012 это обычное явление(
__________________
Axapta v.3.0 sp5 kr2 |
|
14.10.2014, 15:24 | #3 |
Участник
|
Хотим получить хорошее девелоперское приложение без мусора.
D2 по сути уже не жилец + там оч много мусора. Поэтому хотим взять рабочее оттестированное приложение и накатить новые проекты на него. Хотим обновить только код, не трогать данные ( тк в девелоперской D1 уж много настроек сделано, которые не хотим пересоздавать c 0) Так какое оптимальное решение? |
|
14.10.2014, 15:37 | #4 |
Участник
|
Может, проектом обновления? Взять P1 за основу, положить D1 в baseline, сравнить и начать поднимать из baseline то, чего в P1 недостает.
|
|
24.01.2015, 11:48 | #5 |
Участник
|
Цитата:
Только, за основу взять D1, а в бейслайн положить P1 А вообще, с момента первого сообщения столько времени прошло, что вы уже на практике могли попробовать любые варианты и на чем-то остановиться Боюсь, такими темпами вы и через год будете иметь, что имеете. Сори
__________________
Axapta v.3.0 sp5 kr2 |
|
24.01.2015, 21:28 | #6 |
Участник
|
это не будет нормально работать
по крайней мере Detect code upgrade conflicts будет глючить - он как раз по ID сравнивать начнет, а они в этом случае разъехавшиеся будут бейзлайн нормально работает только если его из того же приложения скопировать как сделать нормально я уже три раза тут написал, но почему-то вы упорно пытаетесь пойти каким-то сложным путем если нужно сохранить данные в D1, которые относятся к полям, которых нет в P1, то надо создать копию P1, перенести туда новые модификации любым способом, потом экспортнуть модель и импортнуть её в D1 Последний раз редактировалось lvan; 24.01.2015 в 21:36. |
|
|
За это сообщение автора поблагодарили: kitty (0). |
28.01.2015, 13:21 | #7 |
Участник
|
Цитата:
это не будет нормально работать
по крайней мере Detect code upgrade conflicts будет глючить - он как раз по ID сравнивать начнет, а они в этом случае разъехавшиеся будут бейзлайн нормально работает только если его из того же приложения скопировать В итоге придется делать именно так как вы описали. Просто хотелось в идеале, чтобы во всех environments везде все одинаково было. Цитата:
Боюсь, такими темпами вы и через год будете иметь, что имеете.
Сори |
|
14.10.2014, 15:40 | #8 |
Участник
|
А D1 как было получено?
__________________
Axapta v.3.0 sp5 kr2 |
|
21.01.2015, 13:26 | #9 |
Участник
|
Можно ли, чтобы сохранить все данные, но заменить модель:
1) в D1 импортировать модель из P1 (Import-AXModelStore -File <Filename> -idconflict: overwrite) 2) скопировать таблицу sqlDictionary из P1 в D1 3) откомпилировать/синхронизовать я так понимаю, после 1)-3 ) у нас получится приложение как в P1, но данные останутся, что были в D1 4) сверху накатить проекты по-одному, которые были в D1. но отсутствовали в P1. 5) если id-конфликты при импорте объектов, то вручную их починить.Кстати, как импортировать таблицу, если уже есть таблица с таким же ID? (думаю, что можно создать таблицу с тем же именем, таким образом ей выделится нужный ID, а потом этот ID вручную вбить в xpo вместо старого. Есть еще варианты? Может галка Enable data recovery for tables with changed Ids как-то помочь?) |
|
21.01.2015, 14:41 | #10 |
Участник
|
Таблицу SystemSequence надо будет лечить. Это следующие значения для RecId. Ссылка на таблицы - через их код.
Импортировать ее из P1 не получится NUMBERSEQUENCEDATATYPE так же надо будет лечить - номерные серии съедут Привязку пользователей к ролям так же надо будет лечить (если были такие настройки) Так же, синхронизация убьет объекты, которых не было в P1 (речь о полях). Импорт сейчас вообще не смотрит на идентификаторы Любые два идентичных приложения уже после пары-тройки переносов проектов разъезжаются по идентификаторам PS Еще будет нюанс с объектами с длинными именами (у таблиц, полей, вьюх). В сиквеле такие имена хранятся урезанными с добавлением идентификатора объекта. Если поменяется идентификатор, то Аксапта существующие в базе не увидит и создаст заново (а поля просто удалит)
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.01.2015 в 15:07. |
|
21.01.2015, 15:12 | #11 |
Участник
|
Роли на D1 не настраивали, должно быть ок
Почему SystemSequence и NUMBERSEQUENCEDATATYPE могут съехать? |
|
21.01.2015, 15:45 | #12 |
Участник
|
Потому-что в этих таблицах хранятся идентификаторы объектов, привязанных к текущему приложению
В SystemSequence.TabId - ссылки на TableId таблиц В NUMBERSEQUENCEDATATYPE.DatatypeId - ссылка на Id EDT
__________________
Axapta v.3.0 sp5 kr2 |
|
21.01.2015, 21:00 | #13 |
Участник
|
вот вы извращенцы
в ax2012 ведь специально сделали так, чтобы не было гемора с ID, но нет - вы его сами находите и пытаетесь с ним бороться просто импортируйте новую модель и всё (axutil import /replace) если имя модели и паблишер совпадают, то /replace подразумеваться будет Последний раз редактировалось lvan; 21.01.2015 в 21:07. |
|
23.01.2015, 19:14 | #14 |
Участник
|
Согласна, мы - извращенцы, но также и те, кто завязывает данные на ID в приложении ..
У нас на D1 забита уже куча данных, например, те же новые NumberSeq. В старом приложении их нет. Моя задача - обновить код на D1 кодом с рабочего приложения(тк некоторые багфиксы у нас отсутствуют) и добавить сверху все наши модификации (на самом деле надо на D1 и T1, где T1 - тестовое приложение). При этом надо оставить в живых многомесячные эксперименты консультантов, что не возможно, как я понимаю, тк в White paper, открытым текстом сказано " we recommend that you use test data that you can import after each deployment." Я восстанавливаю в D1 модель из старого приложения P1 и импортирую новую модель (или даже проекты). При этом некий EDT из D1, на кот основана ном серия, обретает новый ID и синхронизация данных тут же улетает в трубу. Пара конструктивных вопросов: 1) Может, в такой ситуации экспортировать номерные серии и заново импортировать после обновления кода? 2) Как удалить номерную серию (кроме как руками удалять данные в системных таблицах numberseqDatatype, numberseqref etc) и создать заново? (фиг с ним, что в таблицах будут данные, завязанные на сгенерированные ею "старые значения".) 3) Я так понимаю, что, чтобы осуществить "we recommend that you use test data that you can import after each deployment.", нужно для каждой новой таблицы сразу писать еще и DIXF код, так?? Последний раз редактировалось kitty; 23.01.2015 в 19:39. |
|
24.01.2015, 03:48 | #15 |
Участник
|
у вас каша в голове, DIXF тут ни при чем, вы не то читаете вообще. вот что вам надо читать https://technet.microsoft.com/en-us/.../hh352326.aspx
что вы под "восстанавливанием" понимаете? я ведь написал, что надо сделать - просто заменить модель (например, "USR Model") при импорте новой модели AX автоматически присвоит правильные ID, вам вообще не надо ни о чем думать. единственно важный момент: нужно именно _заменить_ (replace), а не удалить старую и импортнуть новую Последний раз редактировалось lvan; 24.01.2015 в 04:07. |
|
|
|