Example #1
0
        private void MarkDelayedUpdateAsHandled(Int64 updateId)
        {
            using (var dbExecutor = new FbExecutor())
            {
                dbExecutor.Executor = (connection, transaction) =>
                {
                    lock (_writeSync)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.Transaction = transaction;
                            command.CommandText = _sqlMarkAsHandled;

                            dbExecutor.NewParameter(command, "@id", updateId);

                            command.ExecuteNonQuery();
                        }
                    }
                };
                dbExecutor.Execute();
            }

            _eventLink.Post(ConstHelper.EventSource, String.Format(_delayedUpdateHandled, updateId));
        }
Example #2
0
        private void DelayedUpload(ERPService.CashDe.Upload.Mode mode)
        {
            _handlerParams.EventLink.Post(ConstHelper.EventSource, _delayedUploadRequest);

            // дата применения отложенной выгрузки 
            var applyAt = ToDateTime("apply_at");
            if (applyAt < DateTime.Now)
                throw new InvalidOperationException(String.Format(_delayedUploadDateLessThanNow, applyAt));

            using (var dbExecutor = new FbExecutor())
            {
                dbExecutor.Executor = (connection, transaction) =>
                {
                    // получаем очередной номер отложенного обновления
                    var updateId = GetDelayedUpdateId(connection, transaction);

                    // формируем имя файла для отложенного обновления
                    var fileName = ERPService.CashDe.Upload.DelayedQueueHelper
                        .GetDelayedUpdateFileName(_handlerParams.WorkingDirectory, updateId);

                    // сохраняем контент запроса в файл
                    SaveContentToFile(fileName);

                    // ставим задание в очередь отложенных обновлений
                    lock (_handlerParams.WriteSync)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.Transaction = transaction;
                            command.CommandText =
                                "INSERT INTO DELAYED_UPDATES VALUES(@ID, @UPDATE_MODE, @APPLY_AT, 0)";

                            dbExecutor.NewParameter(command, "@ID", updateId);
                            dbExecutor.NewParameter(command, "@UPDATE_MODE", (Int32)mode);
                            dbExecutor.NewParameter(command, "@APPLY_AT", applyAt);

                            command.ExecuteNonQuery();
                        }
                    }
                };
                dbExecutor.Execute();
            }

            _handlerParams.EventLink.Post(ConstHelper.EventSource, 
                String.Format(_taskQueuedAndDelayed, applyAt));
        }