Upgrade codeunit, meerdere versies

peterz84
Member Posts: 8
Stel, ik heb een Addon (versie A) met in de Customer tabel een veld "Addon-veld1" (boolean).
Nu ga ik het veld wijzigen naar een optieveld. Ik maak een upgradecodeunit aan met:
Daarnaast schrijf ik code om het optieveld in versie B van de addon te vullen op basis van de upgradetabel:
So far so good, de klant gaat van versie A naar B en het veld is veranderd van een boolean naar een optieveld.
Nu veranderd er in versie C het volgende: "Addon-veld1" wordt weer een optieveld. Je kunt de bovenstaande upgrade tabel aanpassen (het veld een optieveld maken) en code aanpassen zodat dit goed gaat als je van versie B naar C gaat.
Echter als er nu een andere klant van versie A naar versie C gaat, gaat dit fout. Je hebt immers de upgrade tabel aangepast om te kunnen upgraden van B naar C (je hebt het veld optieveld gemaakt).
Ik ben benieuwd hoe hier mee om te gaan. Ik wil eigenlijk geen upgrade codeunit per versie maken, want dan moet ik in dit geval voor mijn 2e klant ook 2 keer een oplevering maken (van versie A naar B en van B naar C).
Nu ga ik het veld wijzigen naar een optieveld. Ik maak een upgradecodeunit aan met:
DataUpgradeMgt.SetTableSyncSetup(DATABASE::"Customer",1110018,TableSynchSetup.Mode::Move);(1110018 is een fictieve nieuwe tabel voor de upgrade, met het veld "Addon-veld1" als boolean).
Daarnaast schrijf ik code om het optieveld in versie B van de addon te vullen op basis van de upgradetabel:
WITH UPGCustomer DO BEGIN IF FINDSET(TRUE) THEN REPEAT Customer.GET("No."); IF UPGCustomer."Addon-veld1" THEN Customer."Addon-veld1" := Customer."Addon-veld1"::OptieWaar; Customer.MODIFY; UNTIL NEXT = 0; END; UPGCustomer.RESET; UPGCustomer.DELETEALL;
So far so good, de klant gaat van versie A naar B en het veld is veranderd van een boolean naar een optieveld.
Nu veranderd er in versie C het volgende: "Addon-veld1" wordt weer een optieveld. Je kunt de bovenstaande upgrade tabel aanpassen (het veld een optieveld maken) en code aanpassen zodat dit goed gaat als je van versie B naar C gaat.
Echter als er nu een andere klant van versie A naar versie C gaat, gaat dit fout. Je hebt immers de upgrade tabel aangepast om te kunnen upgraden van B naar C (je hebt het veld optieveld gemaakt).
Ik ben benieuwd hoe hier mee om te gaan. Ik wil eigenlijk geen upgrade codeunit per versie maken, want dan moet ik in dit geval voor mijn 2e klant ook 2 keer een oplevering maken (van versie A naar B en van B naar C).
0
Comments
-
Ik heb geen oplossing voor je directe probleem.
Maar ik zou je wel aanraden om geen velden van type te wijzigen. Waarom niet gewoon een nieuw veld, data overzetten en oude veld verwijderen?
En uiteraard in de basis beter nadenken in de ontwerpfase zodat je achteraf geen table definities hoeft te wijzigen0 -
Het heeft inderdaad ook niet mijn voorkeur, maar soms kun je niet anders. Daarnaast is dit ook maar een voorbeeld. Je kunt deze problemen volgens mij ook tegenkomen als je velden verwijderd en in een latere versie dezelfde versienummers weer een keer gaat gebruiken.
Het gaat mij er meer om hoe je er mee om moet gaan, als je verschillende versies wilt upgraden als klant.
Daarnaast is het überhaupt vreemd dat je per tabel moet opgeven wat je wilt doen (en dit niet per veld kan). Sommige velden wil je verwijderen en Forceren, sommige wil je Checken en weer andere zou je willen Verplaatsen of Kopiëren.0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions