FileMaker 14 - Get (LastError)

Datum vydání: 2015-10-30 19:03:43

Pokud ve 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. Na toto chování naraží např. kód uvedený na stránce If with get (last error) not working.

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í

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 (FileMaker Pro Advanced), 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.