Book Contents

Book Index

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 gaia 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.

Book Contents

Book Index

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\Convert2021\..., 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í.

Například pokud jsou sestavy a skripty uloženy v D:\OSTRA2020\SESTAVYW\SPECIAL\K2R“, pak je cesta ve tvaru „…\~ABS~\D \OSTRA2020\SESTAVYW\SPECIAL\K2R.

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. První způsob se dá pracovně označit jako testovací, druhý způsob je pak použit při reinstalaci na novou verzi.

Book Contents

Book Index

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 a výstupní soubory jsou určeny pro verzi K2 gaia. Pro ověření funkčnosti tedy uživatel potřebuje obě verze.

Pro aktivaci konverzního mechanismu je potřeba spustit K2 verze K2 luna s parametrem ConvertToNextVersion=2021. K2 si v tomto režimu načítá z adresáře SupportFiles soubor _metadata.xml, který popisuje všechny změny identifikátorů mezi verzí K2 luna a K2 gaia. Samotnou konverzi pak provede funkce Export speciálních skriptů přeložených pro následující verzi s číslem 791. Po ukončení konverze je celý výstup uložen do složky SupportedFiles\Convert2021\... dle textu výše.

Book Contents

Book Index

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 na verzi K2 gaia, 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 gaia. Jedná se o spuštění funkce, která vrátí všechny zkonvertované položky zpět do původního umístění. Instalace K2 volá funkci Administrátor – Import konvertovaných zdrojů s číslem 790, která zajistí import. K tomu, aby se vše importovalo do původního místa, se využije vzniklá adresářová struktura ze složky SupportedFiles\Convert2021\.

Po tomto kroku jsou na verzi K2 gaia 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 gaia.

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.05, nedojde ke konverzi zákaznických úprav pro verzi K2 gaia! Doporučujeme nejprve provést přebrání instalace formou reinstalace na verzi K2 luna.05 a až následně spustit reinstalaci na verzi K2 gaia.

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.

V textu dále následuje popis jednotlivých částí konverze dle typů jednotlivých objektů – skript, sestava, formulář, Návrhář objektů.

Book Contents

Book Index

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.

U skriptu se konvertují zdrojové soubory, v případě sestavy se jedná o konverzi tří oblastí, ve kterých se v sestavě může přistupovat k datům. První oblastí je zobrazovací část sestavy, která je napojena na pole datového modulu, dále přístup k datům sestavy pomocí vlastnosti AData a nakonec také skripty, které byly u sestavy implementovány, například v událostech.

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.

Book Contents

Book Index

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íčů, property, procedur a funkcí.

Book Contents

Book Index

Ukázka konvertovaných struktur

Ukázka konvertovaného K2 skriptu je na obrázku níže. Konkrétně použití standardních FM jednotek v uses.

pic_5455.png

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.

pic_5456.png

Obr. Konvertovaná sestava - skript

Ukázka konverze definice pole v datovém zdroji AM sestavy. Konkrétně oprava definice pole definovaná jako řetězec.

pic_5457.png

Obr. Konvertovaná sestava - DataField

Ukázka konverze přístupu k datovému zdroji AM sestavy. Konkrétně oprava přístupu k poli pomocí řetězce.

pic_5458.png

Obr. Konvertovaná sestava - AData

Book Contents

Book Index

Částečně konvertované 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 následující výčet funkcí.

Seznam metod s názvem pole v argumentu

Název metody

Alternativa

Popis

LinkFBit

LinkFByNoBit

vrátí hodnotu pole typu Bit z vazební cesty

LinkFLong

LinkFByNoLong

vrátí hodnotu pole typu Int32 z vazební cesty

LinkFBool

LinkFByNoBool

vrátí hodnotu pole typu Boolean z vazební cesty

LinkFInt64

LinkFByNoInt64

vrátí hodnotu pole typu Int64 z vazební cesty

LinkFFloat

LinkFByNoFloat

vrátí hodnotu pole typu Float z vazební cesty

LinkFDateTime

LinkFByNoDateTime

vrátí hodnotu pole typu DateTime z vazební cesty

LinkFStr

LinkFByNoStr

vrátí hodnotu pole typu String z vazební cesty

LinkFStrTR

LinkFByNoStrTR

vrátí hodnotu pole typu String (bez mezer) z vazební cesty

LinkFCurrency

LinkFByNoCurrency

vrátí hodnotu pole typu Currency z vazební cesty

LinkF

LinkFByNo

vrátí instanci výstupního modulu z vazební cesty

LinkFDMOut

 

vyvolá zadanou metodu, do které předá instanci výstupního modulu z vazební cesty

AsStringPn

 

vrátí hodnotu pole typu String

AsFloatPn

 

vrátí hodnotu pole typu Float

AsLongPn

 

vrátí hodnotu pole typu Int32

AsInt64Pn

 

vrátí hodnotu pole typu Int64

AsDateTimePn

 

vrátí hodnotu pole typu DateTime

AsCurrencyPn

 

vrátí hodnotu pole typu Currency

AsBitPn

 

vrátí hodnotu pole typu Bit

AsBoolPn

 

vrátí hodnotu pole typu Boolean

AsVariantPn

 

vrátí hodnotu pole typu Variant

AsHexaPn

 

vrátí hodnotu pole typu Hexa string

AsXHexaPn

 

vrátí hodnotu pole typu Hexa string

SetAsStringPn

 

nastaví pole typu String na zadanou hodnotu

SetAsFloatPn

 

nastaví pole typu Float na zadanou hodnotu

SetAsLongPn

 

nastaví pole typu Int32 na zadanou hodnotu

SetAsInt64Pn

 

nastaví pole typu Int64 na zadanou hodnotu

SetAsDateTimePn

 

nastaví pole typu DateTime na zadanou hodnotu

SetAsCurrencyPn

 

nastaví pole typu Currency na zadanou hodnotu

SetAsBitPn

 

nastaví pole typu Bit na zadanou hodnotu

SetAsBoolPn

 

nastaví pole typu Boolean na zadanou hodnotu

SetAsVariantPn

 

nastaví pole typu Variant na zadanou hodnotu

SetAsHexaPn

 

nastaví pole typu Hexa string na zadanou hodnotu

SetAsXHexaPn

 

nastaví pole typu Hexa string na zadanou hodnotu

FieldByProgName

 

vrátí instanci TDataField pro pole

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\Convert2021 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

Zmíněná statistika může vypadat následovně:

Počet úspěšně nahrazených výskytů je 2845 z celkového počtu 15905, což je 17,89 %.

 Statistika, kde nebylo možné provést náhradu:

Počet výskytů v netypové třídě TDataM 9315.

Počet výskytů v netypové třídě TMFile 461.

Počet výskytů v netypové jiné třídě 2150.

Počet výskytů s nerozpoznatelnou cestou 298.

Počet výskytů, kde pole nemá definovanou lokalizaci 836.

Počet výskytů, kde pole nemá metadata 0.

Počet výskytů, kde nebyla rozpoznána třída 0.

Poznámka

Výše zmíněné komentáře lze projít v kódu a opravit ručně. O této části pojednávají poslední kapitoly.

Poznámka

Náhradu těchto identifikátorů jsme testovali na dvou množinách zákaznických úprav a na standardní množině. U zákaznických úprav se průměrná úspěšnost pohybovala kolem 49 % nahrazených identifikátorů. Konkrétně se analyzovalo průměrně 2200 výskytů. U standardu je úspěšnost 18 %, viz ukázka výše.

Book Contents

Book Index

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.

Book Contents

Book Index

Konverze zákaznických standardních formulářů

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.

Book Contents

Book Index

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.

Book Contents

Book Index

Konverze zákaznických univerzálních formulářů a jejich modifikací

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.

Book Contents

Book Index

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ů.