Показать сообщение отдельно
Старый 06.06.2022, 12:40   #1  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
? DAX 2012. Как споймать ошибку try catch внутри транзакции?
Всем привет!
У меня при обновлении таблицы идёт запрос WebRequest к внешней службе, чтобы и там обновить данные
X++:
public void update()
{
ttsBegin;
super();

this.MyRequest(this);

ttsCommit;
И если при запросе/ответе возникает ошибка, то блок catch внутри моей функции не вызывается.
Функция имеет вид наподобии такого:
X++:
    str                             responseString;
    
    System.Net.WebRequest           webRequest;
    System.Net.HttpWebResponse      httpResponse;
    CLRObject                       responseObj;
    System.IO.Stream                stream;
    System.IO.StreamReader          streamReader;
    System.Exception                ex;
    System.Net.WebException         webException;
    ;

    try
    {
        if (!urlAPI)
            throw error("Error");

        codeAccessPermission::revertAssert();
        new InteropPermission(InteropKind::ClrInterop).assert();

        webRequest = System.Net.WebRequest::Create(urlAPI);
        webRequest.set_Method('POST');

        stream = webRequest.GetRequestStream();
        stream.Write(arrayOfBytes,0,arrayOfBytes.get_Length());
        stream.Close ();

        httpResponse    = webRequest.GetResponse();
    }
    catch (Exception::CLRError)
    {
        ex = ClrInterop::getLastException();
        if (ex != null)
        {
            ex = ex.get_InnerException();
            if ((ex != null) && (ex is System.Net.WebException))
            {
                webException    = ex as System.Net.WebException;
                responseObj     = webException.get_Response();
                httpResponse    = responseObj as System.Net.HttpWebResponse;
            }
        }
    }
    catch
    {
        error("Error");
        return '';
    }
    stream          = httpResponse.GetResponseStream();
    streamReader    = new System.IO.StreamReader(stream);
    responseString  = streamReader.ReadToEnd();

    streamReader.Close();
    stream.Close();
    httpResponse.Close();

    codeAccessPermission::revertAssert();

    return responseString;
Как споймать ошибки в моей функции/запросе и откатывать обновления?