Pokud ve Claris FileMakeru při spuštění skriptu dojde k nějaké chybě, lze zjistit chybu pomocí funkce Get(LastError)
.
Bohužel, když se opětovně zavolá tato funkce, tak již chybový kód neobsahuje. Pokud tedy s chybou chceme dál pracovat, tak je třeba počítat s tím, že funkci Get(LastError)
mohu zavolat pouze jedenkrát, že po zavolání funkce se automaticky vyprázdní chybový kód.
Nefunkční kód
Set Error Capture [On] # nějaký kód např. Perform Find [Restore] If [Get(LastError)] Show Custom Dialog ["Error"; "Error code: " & Get(LastError) & "."] Else # nějaký náš kód, který se vykoná v případě úspěchu End If Set Error Capture [Off]
Zde by se již chybový kód nevypsal, protože opětovně volám funkci Get(LastError)
. Podmínka if by zde prošla, ale pak už by se chybový kód nevypsal. Při opětovném volání Get(LastError)
už nevrátí nic!
Funkční kód
Abychom tomuto nežádoucímu chování zamezili, musíme si číslo chyby uložit do proměnné a pak dále pracovat s touto proměnnou.
Set Error Capture [On] # nějaký kód např. Perform Find [Restore] Set Variable [$lastError; Value: Get(LastError)] If [$lastError] Show Custom Dialog ["Error"; "Error code: " & $lastError & "."] Else # nějaký náš kód, který se vykoná v případě úspěchu End If Set Error Capture [Off]
Příklady použití
- Single-pass Loop for Handling Errors in FileMaker – soliantconsulting.com,
- None Found / Get(LastError) – thepracticalba.com.
Při vlastním ošetření chyb ale bohužel nemůžeme jednoduše vypsat textový popis chyby. FileMaker vrací číselné kódy FileMaker Pro error codes. Vrácení textového popisu chyby by šlo řešit přes funkci např getErrorDescription(errorNumber)
, kterou bychom si naprogramovali. Vlastní funkce si lze udělat podle návodu Using custom functions (Claris FileMaker Pro), jde o příkaz menu File / Manage / Custom Functions.
Set Error Capture [On]
FileMaker začínám teprve používat. Nicméně např. při použití funkce Save Records As Excel
chování FileMakeru nebylo ovlivněno nastavením Set Error Capture
. Pokud proběhl pokus o uložení do souboru, který byl právě otevřen, tak se objevila chybová hláška FileMakeru bez ohledu na předcházející zapnutí Set Error Capture [On]
. Asi vyvolaná chyba (výjimka) byla silnější než nastavení potlačení vyskakování varovných dialogových oken (alert window)…
Set Error Capture [On] Save Records As Excel [Restore; No dialog; "soubor.xlsx"; Records being browsed] Set Variable [$lastError; Value: Get(LastError)] If [$lastError] Show Custom Dialog ["Error"; "File was not successfully saved. Error code: " & $lastError & "."] Else Show Custom Dialog ["Save"; "File was successfully saved."] End If Set Error Capture [Off]
Při odchytávání chyby se pak zobrazil dvojí dialog. První vyvolaný FileMakerem a druhý vyvolaný mnou při odchytnutí chyby. Ani zakomentování funkce Set Error Capture
nemělo žádný vliv na průběh kódu a Get(LastError)
vracel kód chyby. To znamená, že Get(LastError)
funguje nezávisle na nastavení Set Error Capture
.
Takže některá dialogová okna se zapnutím Set Error Capture [On]
potlačí, jiná nikoli.