/// <summary> /// Выполнение этапа закачки /// </summary> public void Exec() { // Добавление контроллера записи в лог для установки статуса в зависимости от сообщений лога Logger.WriteEvent += WriteTraceHandler; try { ExecStatus = StageExecutionStatus.Execution; Method?.Invoke(); } catch (Exception ex) { Logger.WriteToTrace($"Произошла ошибка: {ex}.", TraceMessageKind.Error); } finally { ExecStatus = StageExecutionStatus.Finished; // Отключение контроллера Logger.WriteEvent -= WriteTraceHandler; } }
public Stage(JProperty stage, ETLProgram program) { ID = stage.Name; JToken stageDesc = stage.Value; Enabled = Convert.ToBoolean(stageDesc["enabled"]); // Установка статусов по умолчанию Status = StageStatus.Successful; ExecStatus = Enabled ? StageExecutionStatus.InQueue : StageExecutionStatus.Skipped; Name = stageDesc["name"].ToString(); // Формирование списка параметров этапа Parameters = FormParamsList(stageDesc["params"]); RootProgram = program; // Привязка метода объекта программы к этапу string functName = stageDesc["func"].ToString(); if (string.IsNullOrEmpty(functName)) { Logger.WriteToTrace("Не задана функция выполнения этапа.", TraceMessageKind.Warning); return; } MethodInfo method = program.GetType().GetMethod(functName); if (method == null) { Logger.WriteToTrace($"Не найдена функция выполнения \"{functName}\" этапа \"{ID}\".", TraceMessageKind.Warning); return; } Method = (StageFunc)method.CreateDelegate(typeof(StageFunc), program); }