예제 #1
0
        private void EnlistToTransaction(OneCAdapter _adapter)
        {
            if (Transaction.Current != null)
            {
                V8ResourceManager manager = new V8ResourceManager();
                manager.Domain  = AppDomain.CurrentDomain;
                manager.Adapter = _adapter;

                Transaction.Current.EnlistDurable(manager.ResourceGuid, manager, EnlistmentOptions.None);

                _adapter.Begin();
            }
            else
            {
                Exception e = new Exception("Ambient transaction not found!");
                SimpleLogger.DefaultLogger.Severe(e.ToString());
                throw e;
            }
        }
예제 #2
0
        //[Ignore]
        public void TestTransactionWithManager()
        {
            using (V8Pool pool = new V8Pool())
            {
                OneCAdapter a = new OneCAdapter();
                a.Open(@"C:\Work\OneCService\Base\First", null, null);

                V8ResourceManager firstManager = new V8ResourceManager();
                firstManager.Domain  = AppDomain.CurrentDomain;
                firstManager.Adapter = a;

                OneCAdapter b = new OneCAdapter();
                b.Open(@"C:\Work\OneCService\Base\Second", null, null);

                V8ResourceManager secondManager = new V8ResourceManager();
                secondManager.Domain  = AppDomain.CurrentDomain;
                secondManager.Adapter = b;

                Assert.AreNotEqual(firstManager.ResourceGuid, secondManager.ResourceGuid);
                Console.WriteLine("First GUID: " + firstManager.ResourceGuid);
                Console.WriteLine("Second GUID: " + secondManager.ResourceGuid);


                //Глобальная транзакция с участием двух разных баз 1С
                using (TransactionScope scope = new TransactionScope())
                {
                    Assert.IsNotNull(Transaction.Current);

                    Transaction.Current.EnlistDurable(firstManager.ResourceGuid, firstManager, EnlistmentOptions.None);
                    Transaction.Current.EnlistDurable(secondManager.ResourceGuid, secondManager, EnlistmentOptions.None);
                    //Transaction.Current.EnlistVolatile(manager, EnlistmentOptions.None);

                    a.Begin();
                    b.Begin();

                    a.ExecuteScript(
                        "сотр = Справочники.Сотрудники.НайтиПоКоду(10);\n" +
                        "Если Не сотр.Пустая() Тогда сотр.ПолучитьОбъект().Удалить(); КонецЕсли"
                        );

                    b.ExecuteScript(
                        "сотр = Справочники.Сотрудники.НайтиПоКоду(10);\n" +
                        "Если Не сотр.Пустая() Тогда сотр.ПолучитьОбъект().Удалить(); КонецЕсли"
                        );

                    a.ExecuteScript(
                        "сотр = Справочники.Сотрудники.СоздатьЭлемент();\n" +
                        "сотр.Код = 10; " +
                        "сотр.Наименование = \"Сиськин\"; " +
                        "сотр.Записать(); "
                        );

                    b.ExecuteScript(
                        "сотр = Справочники.Сотрудники.СоздатьЭлемент();\n" +
                        "сотр.Код = 10; " +
                        "сотр.Наименование = \"Сиськин\"; " +
                        "сотр.Записать();"
                        );

                    scope.Complete();
                }        //using scope
            }            //using pool
        }