Upgrade codeunit, meerdere versies

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

  • EvREvR Member Posts: 178
    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 wijzigen :)
  • peterz84peterz84 Member Posts: 8
    edited 2015-11-09
    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.
Sign In or Register to comment.