powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Узнать, что в FastScript произошёл exception
8 сообщений из 8, страница 1 из 1
Узнать, что в FastScript произошёл exception
    #40046843
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, такой вопрос: есть ли какой-либо способ узнать, что в коде FastScript скрипта было вызвано обрабатываемое исключение, к примеру такое:

Код: pascal
1.
2.
3.
4.
5.
try
  I := StrToInt('test');
except
  // узнать, что вот это произошло
end;



Моя задача минимум в том, чтобы в коде приложения, выполнившего скрип, хотя бы просто подсчитать, сколько произошло таких "тихих" исключений.

Если это важно - скрипт выполняется из делфового приложения через Script.CallFunction(), если обернуть вызов CallFunction() в try..except то успешно обработанное скриптовое исключения, естественно, не приведёт к срабатыванию секции except в делфовом приложении. Никаких ивентов для обработки ошибок типа OnException у FastScript, судя по всему, не предусмотрено.
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40046845
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdix,

Добавить в скрипт глобальную переменную и увеличивать её значение в секции Exception скрипта? А потом из приложения считать её значение?
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40046881
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdix,
В скрипте есть две переменные ExceptionMessage и ExceptionClassName, хранят информацию о последнем исключении.
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40047073
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторДобавить в скрипт глобальную переменную и увеличивать её значение в секции Exception скрипта? А потом из приложения считать её значение?
Плохая идея - скрипт может писаться другими людьми, требовать объявление какой-то переменной, ещё и изменения её в каждой секции исключения - это зло потому что не учитывает, что автор скрипта может просто забыть в каком-то except-е добавить увеличение переменной.

авторВ скрипте есть две переменные ExceptionMessage и ExceptionClassName, хранят информацию о последнем исключении.Такое себе подспорье, если ошибка будет происходить в цикле в одном и том же месте - это никак не поможет посчитать количество срабатываний:
Код: pascal
1.
2.
3.
4.
5.
6.
for N := 1 to 5 do
try
  I := StrToInt('test');
except
  // узнать, что вот это произошло
end;
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40047083
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТакое себе подспорье, если ошибка будет происходить в цикле в одном и том же месте - это никак не поможет посчитать количество срабатываний
А как бы вы в Delphi посчитали количество ошибок ?
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40047088
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdix

Плохая идея - скрипт может писаться другими людьми, требовать объявление какой-то переменной, ещё и изменения её в каждой секции исключения - это зло потому что не учитывает, что автор скрипта может просто забыть в каком-то except-е добавить увеличение переменной.

1. Обявить глобальную переменную из Delphi фастскрипт не позволяет что-ли?.. Понятно что не в скрипте.
2. Если ты хочешь что-то посчитать, то тебе придётся это считать, увы. Раз разработчики не предусмотрели событие OnException - значит считать придётся в скрипте, чудес не бывает.
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40047140
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так-то да. Думал, может класс хелпер какой сделать, но покрутил это и так, и сяк - на ум не приходит, как его реализовать. Там нужно в TfsTryStmtHelper.Execute залезть и поковыряться, но хелпер оверрайдить методы не позволяет...
...
Рейтинг: 0 / 0
Узнать, что в FastScript произошёл exception
    #40047163
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdix,
Решается простой заменой переменной ExceptionMessage.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
type
  TfsExeptStringVariable = class(TfsStringVariable)
  private
    FErrors: TStrings;
  protected
    procedure SetValue(const Value: Variant); override;
  public
    procedure AfterConstruction; override;
    destructor Destroy; override;
    property Errors: TStrings read FErrors;
  end;

procedure TfsExeptStringVariable.AfterConstruction;
begin
  inherited;
  FErrors := TStringList.Create;
end;

destructor TfsExeptStringVariable.Destroy;
begin
  FErrors.Free;
  inherited;
end;

procedure TfsExeptStringVariable.SetValue(const Value: Variant);
begin
  inherited;
  FErrors.Add(Value);
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure RunScript;
var
  cvar: TfsCustomVariable;
begin

  Script.AddRTTI; // код должен идти после AddRTTI, если используется fsGlobalUnit то использовать его
  cvar := Script.Find('ExceptionMessage');
  if Assigned(cvar) then
  begin
    Script.Remove(cvar);
    cvar.Free;
    cvar := TfsExeptStringVariable.Create('ExceptionMessage', fvtString, 'String');
    Script.Add('ExceptionMessage', cvar);
    cvar.AddedBy := TObject(1); // rtti item flag
  end;

  Script.Run;

  cvar := Script.Find('ExceptionMessage');
  if cvar is TfsExeptStringVariable then
  begin
    TfsExeptStringVariable(cvar).Errors.Count; // количество ошибок
    TfsExeptStringVariable(cvar).Errors.Text; //список
    TfsExeptStringVariable(cvar).Errors.Clear;// очистить после выполнения
  end;
end;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Узнать, что в FastScript произошёл exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]