Akce po reinstalaci
Po úspěšné reinstalaci na verzi K2 gaia je potřeba dokončit převod zákaznických úprav a dalších částí, které není možné zkonvertovat automaticky.
ZBP soubory pro poznámky
Při konverzi ansistring na unicode byly změněny i formuláře poznámek. Všechny standardní formuláře jsou upraveny. Po reinstalaci je nutné opravit i zákaznické. Formuláře jsou uloženy v adresáři Conf/LangX, kde X je číslo jazyka. Každý soubor pro formulář je ve tvaru xxxxx.zbp, kde xxxxx je číslo formuláře. Všechny zákaznické formuláře mají číslo > 10000. Tyto soubory se načítají při startu K2, a pokud je zjištěno, že existuje formulář ve starém formátu, K2 zahlásí chybu a nespustí se.
Obr. Chyba poznámek při spuštění K2
Před samotnou opravou formuláře je doporučeno zjistit, zda se tento soubor ještě v K2 používá. V minulosti mohlo dojít k jeho zrušení, přepsání na jiný systém a zapomenutí výmazu tohoto souboru. Jestli se používá, zjistíme z databázových tabulek DocumentNote a ItemNote tak, že se ve sloupci FormId vyskytují čísla z vlastních zbp souborů. V tomto případě je potřeba soubor převést na nový formát.
K převodu potřebujeme zdrojový soubor poznámky. Ten je v textovém formátu, který obsahuje definici jednotlivých polí formuláře. V tomto souboru je potřeba dohledat definice všech polí, která jsou definována jako typ ftString.
Obr. Definice pole v ZBP souboru - ansistring
Každý takový výskyt je potřeba přepsat na typ ftWideString. Dále u všech polí nezávisle na datovém typu, je potřeba zvýšit hodnotu Offset na dvojnásobek.
Obr. Definice pole v ZBP souboru – widestring
Zároveň se změnou, která se týká převodu na widestring, je potřeba upravit i názvy polí, které jsou ve formuláři použité. O tom jak dohledat nové názvy, pojednává kapitola Dostupné nástroje a informace.
Nad takto upraveným souborem je potřeba spustit nástroj, který je umístěný v instalaci K2 v adresáři \SupportFiles\txt2zbp2021.exe. Nástroj se spustí příkazem txt2zbp2021.exe [cesta]\zbpXxxxx.txt s doplněním správného názvu vstupního souboru. Ve složce se následně objeví nový zbp soubor pro formulář poznámky.
Poznámka
Hodnota Offset se musí zdvojnásobit u všech definovaných polí.
Překlad zákaznických úprav dle změn v K2 gaia
Při každém velkém přechodu na novou verzi je nutné změnit zákaznické úpravy dle změn jádra a modulů IS K2. Jedná se o změnu, nebo rušení metod ze skriptu, případně změnu logiky, na kterou je potřeba reagovat. Níže jsou popsány nejdůležitější změny včetně jejich řešení pro novou verzi.
Funkce pro kontrolu a přidělování práv z K2 skriptu
Další větší změnou v nové verzi je přepracování metod pro práci s právy v K2 skriptu. Práva nově podporují definici na vlastní firmy. Metody tedy byly rozšířeny o parametr datový kontext, který řeší správnou funkčnost práv včetně zohlednění na vlastní firmy. Níže je uveden seznam původních metod a jejich náhrady.
Upozornění
V případě, že potlačíme datový kontext, tedy nastavíme parametr na hodnotu nil, použije se nastavení z globální firmy. Tuto variantu je doporučeno používat pouze v případech, kdy není potřeba kontext řešit.
Staré metody skriptu:
function GetPravoConf(PravoNo: Integer): Boolean;
procedure SetPravoConf(PravoNo: Integer; Value: Boolean);
function GetPravoSkPr(PravoNo: Integer; Value: Boolean): Boolean;
function GetPravoSkZm(PravoNo: Integer; Value: Boolean): Boolean;
function DejPravo(Typ: TTypPrava; Cislo: Integer; HlasChybu: THlasChybu): Boolean;
lze nahradit pomocí nových metod s kontextem:
function GetPermission(ADataModuleContext: TObject; PravoNo: Integer): Boolean;
procedure SetPermission(ADataModuleContext: TObject; PravoNo: Integer; Value: Boolean);
function GetReadGroupPermission(ADataModuleContext: TObject; PravoNo: Integer; Value: Boolean): Boolean;
function GetChangeGroupPermission(ADataModuleContext: TObject; PravoNo: Integer; Value: Boolean): Boolean;
function GetPermissionWithMessage(ADataMContext: TObject; Typ: TTypPrava; Cislo: Integer; HlasChybu: THlasChybu): Boolean;
nebo pomocí metod datového modulu:
function TDataM.GetPermission (Typ: TPermissionType; Number: Integer; UseExcept: Boolean): Boolean;
procedure TDataM.SetPermission (Typ: TPermissionType; Number: Integer; Value: Boolean);
Přepis SQL dotazů
Jednou z velkých částí, kterou nelze automaticky konvertovat, jsou SQL dotazy v K2 skriptu. Každý dotaz je nutné ručně přepsat. Seznam změn identifikátorů, které je potřeba mít k dispozici a nástroje, které pomohou s přepisem, jsou popsány v kapitole Dostupné nástroje a informace.
SQL Dotazy s podmínkou na řetězec pro databáze, které mají nastaveno jiné třídění (collation) než Czech_xx_yy
V případě, že existují SQL dotazy, které obsahují řetězcové literály, je třeba před tyto parametry připsat N nebo použít parametrizovaný dotaz, aby byla zaručena funkčnost i na DB s jinou než českou collation – Czech_xx_yy, například Czech_CI_AS. V opačném případě SQL dotaz nevrátí žádná data.
Například:
RunSQLSelectDM(AktDM, MFile, 'SELECT RID FROM CURRENCYEXCHANGERATE WITH(NOLOCK) WHERE Abbr = N''Kč''');
RunSQLSelectDM(AktDM, MFile, 'SELECT RID FROM CURRENCYEXCHANGERATE WITH(NOLOCK) WHERE Abbr = ?', ['Kč'], [ftString], [4]);
Poznámka
Doporučujeme přejít na parametrizované dotazy, tedy druhou variantu, i vzhledem k výkonu K2. Délky řetězcových parametrů pak volit podle délky pole, které se má porovnávat, ne podle délky hodnoty. Tuto hodnotu pak neměnit.
Poznámka
Doplněním N před hodnotu podmínky se docílí, že daný dotaz bude předávat literály správně, bez ohledu na kódování cílové DB.
Přepis identifikátorů v metodách s názvem pole jako argumentem
Kromě SQL dotazů existují v K2 skriptu metody, které přebírají ke zpracování název identifikátoru pole. Tyto metody se pokouší konvertovat výše zmíněný nástroj. Protože konverzi těchto částí nelze provést vždy je nutné zbytek dořešit ručně. Ty, které se nepovedly, mají u sebe přiřazen speciální komentář, který vysvětluje tabulka popsána výše. Tyto je nutné projít, a pokud se zde pracuje s identifikátorem, který se změnil, tak přepsat na novou variantu, případně je přepsat na metody, které používají např. číslo nebo jinou alternativu. Jak již bylo zmíněno, informace, které pomohou s přepisem, naleznete v kapitole Dostupné nástroje a informace.
Revize a instalace rozšíření z Návrháře objektů
Pokud dojde v reinstalaci k chybě při překladu rozšířeních z Návrháře objektů, je potřeba dořešit jejich zavedení ručně. K automatické instalaci nedošlo pravděpodobně kvůli tomu, že je součástí rozšíření skript, který není přeložitelný.
Postupovat by se mělo následujícím způsobem:
- Smažeme, či přejmenujeme adresář extensions, který obsahuje běhové soubory Návrháře objektů, které jsou po neúspěšné instalaci v nekonzistentním stavu.
- Smažeme obsah adresáře ServisW/NO/WaitingRoom, který obsahuje zbytek nenainstalovaných rozšíření.
- Z adresáře SupportFiles/Convert2021/~ABS~/ServisW/NO/WaitingRoom nakopírovat definice rozšíření do jiného umístění v adresáři IS K2.
- V IS K2 postupně otevírat definice rozšíření z adresáře z předchozího kroku, zkusit jejich překlad, opravit a provést deploy. Jednotlivá rozšíření by se měla brát v pořadí, které je uložené v souboru InstallOrder.2021.txt, který je také v adresáři z bodu 3. Soubor obsahuje seznam rozšíření, tak jak jdou po sobě dle závislostí.
- Jakmile jsou rozšíření v pořádku, měla by již zase fungovat automatická aktualizace v rámci reinstalace.
Poznámka
Pokud existují rozšíření, která jsou na sobě nezávislá, je možné si práci ušetřit pomocí hromadné instalace umístěním konkrétních definic rozšíření do adresáře ServisW/NO/WaitingRoom a spuštěním IS K2 s parametrem extensions=update. Samozřejmostí by měla být kontrola přeložitelnosti. Můžeme využít i další pomůcky viz dále.
Externí aplikace napojené přes K2 API
Vzhledem ke změnám identifikátorů databázových polí, je nutné počítat s úpravou aplikací komunikujících s K2 přes K2 API. Identifikátory jsou použity jak v požadavcích (parametry fields, orderBy, conditions apod.), tak v odpovědích z K2 API.
Při zadání neexistujícího pole v parametru orderBy nebo conditions je vrácena z API chybová odpověď. Při zadání neexistujícího pole v parametru fields je vrácena korektní odpověď, ale bez tohoto chybného pole. Pro odhalení těchto polí v požadavcích je možné zapnout logování K2 API na úroveň alespoň Warning. Do logu se následně budou zapisovat záznamy při detekci neexistujícího pole.
Ukázka hlášení v logu
[Warning] [DataService.?] Invalid field path 'TradingPartnerId.Fir'. Root object: TD_Part. Request URL: http://api.server.cz/sws2021/Data/Part?fields=Name,TradingPartnerId.Fir
Poznámka
O tom jak dohledat nové názvy polí, pojednává kapitola Dostupné nástroje a informace.
Kontrola struktur databází
Po reinstalaci je vhodné dodatečně spustit tzv. kontrolu struktur databází, zda nedošlo k nekonzistenci ve strukturách databáze a definice v IS K2. Kontrolu struktur je možné spustit v nástroji Reinstalační manažer tlačítkem Kontrola struktur. Kontrola probíhá nad všemi databázemi IS K2. Výsledek musí být bez chyb.
Obr. Kontrola struktur databáze
Poznámka
Kontrola struktur databází se spouští při každé reinstalaci jako povinný krok. V reinstalaci nelze pokračovat v případě, že jsou v databázi objeveny chyby.
Diagnostika K2
Po reinstalaci a přepisu všech zákaznických úprav do funkčního stavu pro verzi K2 gaia, je vhodné ověřit základní funkčnost K2 pomocí nástroje Diagnostika K2. Funkce je dostupná v nástroji Návrhář objektů pod klávesovou zkratkou Shift+Ctrl+I. Tato kontrola provede vytvoření každého modulu zaregistrovaného v IS K2 včetně zákaznických. U všech pak zkontroluje funkčnost základních operací, které jsou dostupné. V případě, že výstup obsahuje chyby, znamená to, že v IS K2 není ještě vše v pořádku.
Poznámka
Diagnostiku K2 je možné pouštět opakovaně v průběhu přepisu zákaznických úprav k ověření průběžného stavu systému.