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:
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).
Comments
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 wijzigen
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.