Konverze zákaznických úprav
Po převodu nových identifikátorů dochází k masivním změnám ve všech standardních i zákaznických skriptech, sestavách apod. Aby byl přechod na verzi K2 ori co nejhladší, je připraveno několik nástrojů, které zajistí převod změn v těchto oblastech pro novou verzi. V následujícím textu jsou popsány nástroje, které slouží ke konverzi implementovaných úprav a formulářů k těmto úpravám.
Princip a spuštění konverze
Ke konverzi dochází při spuštění speciální funkce. Ta zajistí konverzi zákaznických úprav ve skriptech, sestavách, DFM formulářích, univerzálních formulářích a také rozšíření vytvořená v Návrháři objektů. Výstup se ukládá do adresáře \SupportedFiles\Convert2022\..., kde jsou soubory uloženy ve struktuře, v jaké byly nalezeny v IS K2. Tedy pokud se původní soubor nachází v databázi, pak je výstup v ~DB~\DBNAME\Special, pokud byl uložen v souborovém systému, je výstup v adresáři ~ABS~\.., kde … udává stejnou adresářovou strukturu, jako ve výchozím umístění.
Vše, co bylo popsáno, pak funguje pouze za předpokladu, že je IS K2 spuštěna se speciálním parametrem, viz dále.
Spuštění konverze je možné provést dvěma způsoby.
Testovací konverze - manuální spuštění
Tento režim je určen spíše pro otestování konverze, případně k dodatečné konverzi. Je to z toho důvodu, že konverze probíhá na verzi K2 luna.09 a výstupní soubory jsou určeny pro verzi K2 ori.
Pro aktivaci konverzního mechanismu je potřeba spustit K2 luna.09 s parametrem ConvertToNextVersion=2022. Samotnou konverzi pak provede funkce Export speciálních skriptů přeložených pro následující verzi s číslem 791.
Automatická konverze - přechod na novou verzi
Tento režim se využívá při samotné reinstalaci v automatickém režimu. Před výměnou souborů z verze K2 luna.09 na verzi K2 gaia.05, spustí instalátor K2 výše zmíněnou funkci se všemi náležitostmi.
Po úspěšné konverzi následuje druhý krok, který se provádí již na nových souborech verze K2 ori. Jedná se o spuštění funkce Administrátor – Import konvertovaných zdrojů s číslem 790, která vrátí všechny zkonvertované položky zpět do původního umístění. K tomu, aby se vše importovalo do původního místa, se využije vzniklá adresářová struktura ze složky SupportedFiles\Convert2022\.
Po tomto kroku jsou na verzi K2 ori zkonvertovány skripty a sestavy včetně jejich importu zpět do úložiště IS K2.
Upozornění
Zkonvertované sestavy a skripty přestávají být na verzi K2 luna funkční. Již obsahují identifikátory, které jsou platné pro verzi K2 ori.
Upozornění
Nutným předpokladem správné konverze některých objektů, je určení datového kontextu, na základě, kterého se objekt převede na nové identifikátory. O tomto pojednává kapitola Předinstalační příprava.
Upozornění
V případě, že dojde při reinstalaci k chybě, opakovaná reinstalace probíhá v režimu přebrání instalačního adresáře a zároveň v adresáři neexistuje spustitelná K2 verze K2 luna.09, nedojde ke konverzi zákaznických úprav pro verzi K2 ori! Doporučujeme nejprve provést přebrání instalace formou reinstalace na verzi K2 luna.09 a až následně spustit reinstalaci na verzi K2 ori.
Poznámka
V případě, že v průběhu konverze není potřeba objekt měnit, tento se neexportuje do výstupní složky.
Konverze zákaznických AM sestav a K2 skriptů
Při konverzi zákaznických skriptů a sestav dochází k nahrazení změněných identifikátorů přímo ve zdrojových souborech jednotlivých komponent. Konkrétně k tomu dochází při pokusu o kompilaci implementace sestavy nebo skriptu (soubor) v IS K2. Pokud je v pořádku a kompilace je úspěšná, pak se zároveň nahradí všechny identifikátory.
Upozornění
Protože konverze skriptů a sestav se provádí při kompilaci jejich implementace, musí být objekt v dané verzi IS K2 přeložitelný. Pokud není, pak se ignoruje.
Co se automaticky konvertuje
Pokud projde K2 skript nebo sestava konverzí, převedou se změněné názvy databázových polí, tabulek, klíčů, počítaných polí, datové třídy, property, procedur a funkcí.
Ukázka konvertovaného K2 skriptu je na obrázku níže. Konkrétně použití standardních FM jednotek v uses.
Obr. Konvertovaný skript
Ukázka konverze K2 skriptu, který je součástí implementace AM sestavy. Konkrétně oprava použití konstanty s číslem pole ze standardu.
Obr. Konvertovaná sestava - skript
Částečně konvertovány identifikátory
Některé části implementace, které pracují s identifikátory polí, neprochází kompilátorem kódu. Jedná se o výčet metod, které pracují s identifikátory jako s parametrem typu řetězec. Jedná se o funkcí, které začínají Linkf..., SetAs...Pn, As...Pn, FiledByProgName. Příklad: LinkfBit, LinkfBool, AsFloatPn, AsStringPn, SetAsLongPn, atd.
U těchto metod provede kompilátor analýzu a pokusí se na základě zjištěných informací provést náhradu. V těchto případech již nahrazení není 100 %, protože existuje spousta situací, kdy náhradu nelze provést. Obecně lze říci, že záleží na kvalitě a způsobu implementace kódu.
Pokud kompilátor nedokáže nahradit identifikátory, doplní na daný řádek informaci s důvodem, proč se takto rozhodnul. Zároveň je do adresáře SupportFiles\Convert2022 zapíše soubor ScriptStatistics.txt, který obsahuje souhrnné informace o tom, co se nepovedlo vyřešit. V tomto souboru je také zapsán počet výskytů těchto metod včetně procentuální úspěšnosti náhrady.
Následující tabulka shrnuje všechny možné důvody nenahrazení:
Popis ve skriptu |
Význam |
{2021 NoEnglishName} |
field nemá anglický překlad |
{2021 NoFieldInfo} |
field v metadatech neexistuje |
{2021 BadPath} |
cesta nebyla v metadatech dohledatelná |
{2021 TMFile} |
jedná se o netypovou třídu TMFile, nejde poznat, zda je pole standardní nebo speciální |
{2021 TDataM} |
jedná se o netypovou třídu TDataM, nejde poznat, zda je pole standardní nebo speciální |
{2021 UnknownType} |
jedná se o jinou netypovou třídu, nejde poznat, zda je pole standardní nebo speciální |
{2021 NoClass} |
funkce/metoda nemá definovanou třídu, pole nelze vyhodnotit |
{2021 NoConstant} |
funkce/metoda obsahuje proměnou, kterou nelze při překladu vyhodnotit – například spuštění SQL dotazu |
Co nelze automaticky konvertovat
Část, kterou není možné vůbec konvertovat, jsou SQL dotazy do databáze IS K2. U těchto textů nezná K2 datový kontext. Při pokusu o jejich nahrazení, by tak mohlo dojít k chybné náhradě a k poškození skriptu nebo sestavy. Jak může K2 pomoci s přepisem těchto částí je popsáno dále v textu v posledních kapitolách.
Konverze zákaznických formulářů (standardních/univerzálních)
Standardní
Při konverzi zákaznických standardních formulářů dochází k nahrazení použitých identifikátorů, které byly změněny. Nutným předpokladem ke správné konverzi je přiřazení datového zdroje (datového modulu) ke každému formuláři, který potřebujeme zkonvertovat. Tato část je popsána v předinstalační přípravě. Zároveň platí, že se konvertují jen ty formuláře, které byly takto v předinstalační přípravě nachystány – mají nastaven datový modul.
Poznámka
Při konverzi se nahrazují všechny datové typy ftString na ftWideString, tak aby formuláře podporovaly unicode.
Co nelze automaticky konvertovat
Při konverzi nelze nahradit vazební pole do standardního modulu z vlastního modulu, který je vytvořen ve skriptu. Tento modul není zaregistrován, a tudíž nelze načíst jeho instance při konverzi.
Univerzální
Při konverzi zákaznických univerzálních formulářů dochází k nahrazení použitých identifikátorů, které byly změněny. Mohou se nacházet na komponentách, které zobrazují data, případně v místech, kde se na základě dat vyhodnocuje například jejich zobrazení. Konverzí proběhnou všechny vlastní formuláře a také modifikace standardních formulářů.
Formuláře se také exportují do výše zmíněné složky a následným exportem se vrací zpět do IS K2.
Konverze zákaznických úprav v Návrháři objektů
Při konverzi rozšíření v Návrháři objektů dochází k nahrazení použitých identifikátorů, které byly změněny. Mohou se nacházet v samotné definici, v hodnotách vlastností jednotlivých datových modulů, nebo v samotném skriptu, který je v modulu implementován.
Konvertovaná definice rozšíření se ukládá do výše zmíněné složky do adresáře ServisW/NO/WaitingRoom.
Následným exportem se vrací zpět do IS K2, ale pouze jako definice rozšíření. Běhové soubory z adresáře extensions se zatím nekonvertují. Posledním krokem je instalace konvertovaných definic Návrháře objektů. Pokud proběhne úspěšně, vznikne adresář extensions, ve kterém budou nové běhové soubory Návrháře objektů pro IS K2. V případě, že dojde při instalaci k chybě, většinou se jedná o složitější projekty, které jsou na sobě závislé, je nutné instalaci postupně dořešit až po opravě nepřeložitelných skriptů, viz kapitola akce po reinstalaci.
Upozornění
V případě, že v IS K2 nejsou na sobě závislé projekty z Návrháře objektů, většinou instalace projde bez problémů. Pokud některé závislé rozšíření obsahuje nepřeložitelný skript, není možné instalaci rozšíření dokončit bez opravy tohoto skriptu.
Poznámka
Zde platí stejné pravidlo, co lze a nelze zkonvertovat, viz Konverze zákaznických AM sestav a K2 skriptů.