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; } }
//[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 }