private void InvokePackageSteps(EtlPackage package, _Context context)
            {
                var stepIndex = 0;

                while (stepIndex < package.Steps.Count)
                {
                    var step = package.Steps[stepIndex];

                    var stepResult = InvokePackageStep(step, context);
                    if (EtlStatuses.GetPriorityStatus(stepResult.Status, context.CurrentStatus) == stepResult.Status)
                    {
                        context.CurrentStatus = stepResult.Status;
                    }

                    if (stepResult.Status == EtlStatus.Failed)
                    {
                        break;
                    }

                    if (HasVariableAssignments(stepResult))
                    {
                        var rebuildStartDateTime = DateTime.Now;
                        _logger.LogEtlMessage
                        (
                            new EtlMessage
                            {
                                EtlPackageId = context.EtlPackageId,
                                EtlSessionId = context.EtlSessionId,
                                LogDateTime = rebuildStartDateTime,
                                LogUtcDateTime = rebuildStartDateTime.ToUniversalTime(),
                                MessageType = EtlMessageType.Debug,
                                Text = string.Format(Properties.Resources.VariablesUpdateStarted),
                            }
                        );

                        foreach (var assignment in stepResult.VariableAssignments)
                        {
                            var assignedVariable = context.AssignVariable(assignment);
                            var escapedVariable = EscapeVariable(assignedVariable);

                            _logger.LogEtlMessage
                            (
                                new EtlMessage
                                {
                                    EtlPackageId = context.EtlPackageId,
                                    EtlSessionId = context.EtlSessionId,
                                    LogDateTime = rebuildStartDateTime,
                                    LogUtcDateTime = rebuildStartDateTime.ToUniversalTime(),
                                    MessageType = EtlMessageType.Debug,
                                    Text = string.Format(Properties.Resources.VariableUpdate, escapedVariable.Name, escapedVariable.Value),
                                }
                            );
                        }

                        var preprocessor = new EtlPackagePreprocessor();
                        package = preprocessor.PreprocessPackage(context.OriginalPackage, context.GetVariables());

                        var rebuildEndDateTime = DateTime.Now;
                        _logger.LogEtlMessage
                        (
                            new EtlMessage
                            {
                                EtlPackageId = context.EtlPackageId,
                                EtlSessionId = context.EtlSessionId,
                                LogDateTime = rebuildEndDateTime,
                                LogUtcDateTime = rebuildEndDateTime.ToUniversalTime(),
                                MessageType = EtlMessageType.Debug,
                                Text = string.Format(Properties.Resources.VariablesUpdateFinished),
                            }
                        );
                    }

                    stepIndex++;
                }
            }
            private void InvokePackageSteps(EtlPackage package, _Context context)
            {
                var stepIndex = 0;

                while (stepIndex < package.Steps.Count)
                {
                    var step = package.Steps[stepIndex];


                    var stepResult = InvokePackageStep(step, context);
                    if (EtlStatuses.GetPriorityStatus(stepResult.Status, context.CurrentStatus) == stepResult.Status)
                    {
                        context.CurrentStatus = stepResult.Status;
                    }

                    if (stepResult.Status == EtlStatus.Failed)
                    {
                        break;
                    }

                    if (HasVariableAssignments(stepResult))
                    {
                        var rebuildStartDateTime = DateTime.Now;
                        _logger.LogEtlMessage
                        (
                            new EtlMessage
                        {
                            EtlPackageId   = context.EtlPackageId,
                            EtlSessionId   = context.EtlSessionId,
                            LogDateTime    = rebuildStartDateTime,
                            LogUtcDateTime = rebuildStartDateTime.ToUniversalTime(),
                            MessageType    = EtlMessageType.Debug,
                            Text           = string.Format(Properties.Resources.VariablesUpdateStarted),
                        }
                        );

                        foreach (var assignment in stepResult.VariableAssignments)
                        {
                            var assignedVariable = context.AssignVariable(assignment);
                            var escapedVariable  = EscapeVariable(assignedVariable);

                            _logger.LogEtlMessage
                            (
                                new EtlMessage
                            {
                                EtlPackageId   = context.EtlPackageId,
                                EtlSessionId   = context.EtlSessionId,
                                LogDateTime    = rebuildStartDateTime,
                                LogUtcDateTime = rebuildStartDateTime.ToUniversalTime(),
                                MessageType    = EtlMessageType.Debug,
                                Text           = string.Format(Properties.Resources.VariableUpdate, escapedVariable.Name, escapedVariable.Value),
                            }
                            );
                        }

                        var preprocessor = new EtlPackagePreprocessor();
                        package = preprocessor.PreprocessPackage(context.OriginalPackage, context.GetVariables());

                        var rebuildEndDateTime = DateTime.Now;
                        _logger.LogEtlMessage
                        (
                            new EtlMessage
                        {
                            EtlPackageId   = context.EtlPackageId,
                            EtlSessionId   = context.EtlSessionId,
                            LogDateTime    = rebuildEndDateTime,
                            LogUtcDateTime = rebuildEndDateTime.ToUniversalTime(),
                            MessageType    = EtlMessageType.Debug,
                            Text           = string.Format(Properties.Resources.VariablesUpdateFinished),
                        }
                        );
                    }

                    stepIndex++;
                }
            }