wtorek, 20 marca 2012

Logowanie wyjątków .NET do bazy danych

Aby w bardzo prosty sposób przechwycić wyjątek powstały w zewnętrznej bibliotece .NET można użyć metody AifUtil::getClrErrorMessage();.
Kod tej metody jest bardzo prosty i pokazuje jak obsługiwać wyjątki .NET po stronie systemu Dynamics AX.

Przykład użycia ww. metody:
  
static void SBR_AifInfoLog_Example_NET(Args _args)
{
    SysExceptionLog         exceptionLog;
    System.Uri              uri;
    System.Net.WebRequest   webRequest;
    System.Net.WebResponse  webResponse;
    str                     clrError;
    ;
    
    try
    {
        // kod który zwraca wyjątek
        // - pod podanym adresem nie ma serwera WWW
        // - nastąpi TimeOut po 5 sekundach
        uri = new System.Uri('http://192.168.1.100/');
        webRequest = System.Net.WebRequest::Create(uri);
        webRequest.set_Timeout(5000);
        webResponse = webRequest.GetResponse();
        webResponse.Close();
    }
    catch (Exception::CLRError)
    {
        // zapisujemy wyjątek do bazy danych
        clrError = AifUtil::getClrErrorMessage();
        exceptionLog = new SysExceptionLog();
        exceptionLog.writeEntry(Exception::Error, clrError, 'NET_DEMO');

        // wyświetlamy błąd na ekranie
        error(clrError);
    }
}

Aby zobaczyć zalogowane wyjątki uruchamiamy menu item \Menu Items\Display\Exceptions i uruchamiamy formatkę gdzie mamy listę przechwyconych wyjątków.