Я использую библиотеку .Net NCo 3.0 и попробовал один пример tRFC, в котором я вижу, что идентификатор транзакции создается и связан с функцией RFC, а затем вызывается, после успешной транзакции идентификатор транзакции удаляется, здесь мы сохранять детали транзакции в базе данных для каждой операции tRFC, поэтому в этом случае, если транзакция завершится неудачей, мы можем получить идентификатор из базы данных и повторить попытку. Я хотел бы знать реализацию кода механизма повтора, есть возможность что сервер SAP не работает, поэтому когда и как его перезапустить и убедиться, что инициированная транзакция выполняется только один раз, без потери данных и без дублирования.
TidStore tidStore = new TidStore("clientTidStore", false);
static RfcTransaction CreateTransaction(TidStore tidStore, out string data)
{
RfcTransaction trans = new RfcTransaction(); // This creates a fresh TID.;
Console.Write("Please enter some input data: ");
data = Console.ReadLine();
FileStream dataFile = new FileStream(trans.Tid.TID, FileMode.Create, FileAccess.ReadWrite);
byte[] utf8Data = Encoding.UTF8.GetBytes(data);
dataFile.Write(utf8Data, 0, utf8Data.Length);
dataFile.Close();
tidStore.CreateEntry(trans.Tid.TID);
return trans;
}
private void SubmitTransaction(RfcTransaction trans, TidStore tidStore, String data)
{
try
{
IRfcTable dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
dataTable.Append();
dataTable.SetValue(0, data);
// Insert the function module into the transaction:
trans.AddFunction(stfc_write_to_tcpic);
stfc_write_to_tcpic = (IRfcFunction)stfc_write_to_tcpic.Clone();
dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
dataTable.SetValue(0, data + " -- data of the second function module");
trans.AddFunction(stfc_write_to_tcpic);
trans.Commit(_ECCsystem);
tidStore.SetStatus(trans.Tid.TID, TidStatus.Committed, null);
File.Delete(trans.Tid.TID);
_ECCsystem.ConfirmTransactionID(trans.Tid);
tidStore.DeleteEntry(trans.Tid.TID);
}
catch (Exception e)
{
tidStore.SetStatus(trans.Tid.TID, TidStatus.RolledBack, e.Message);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/700 ... rom-client
Перезапуск транзакции .Net SAP с клиента ⇐ C#
Место общения программистов C#
1731451382
Anonymous
Я использую библиотеку .Net NCo 3.0 и попробовал один пример tRFC, в котором я вижу, что идентификатор транзакции создается и связан с функцией RFC, а затем вызывается, после успешной транзакции идентификатор транзакции удаляется, здесь мы сохранять детали транзакции в базе данных для каждой операции tRFC, поэтому в этом случае, если транзакция завершится неудачей, мы можем получить идентификатор из базы данных и повторить попытку. Я хотел бы знать реализацию кода механизма повтора, есть возможность что сервер SAP не работает, поэтому когда и как его перезапустить и убедиться, что инициированная транзакция выполняется только один раз, без потери данных и без дублирования.
TidStore tidStore = new TidStore("clientTidStore", false);
static RfcTransaction CreateTransaction(TidStore tidStore, out string data)
{
RfcTransaction trans = new RfcTransaction(); // This creates a fresh TID.;
Console.Write("Please enter some input data: ");
data = Console.ReadLine();
FileStream dataFile = new FileStream(trans.Tid.TID, FileMode.Create, FileAccess.ReadWrite);
byte[] utf8Data = Encoding.UTF8.GetBytes(data);
dataFile.Write(utf8Data, 0, utf8Data.Length);
dataFile.Close();
tidStore.CreateEntry(trans.Tid.TID);
return trans;
}
private void SubmitTransaction(RfcTransaction trans, TidStore tidStore, String data)
{
try
{
IRfcTable dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
dataTable.Append();
dataTable.SetValue(0, data);
// Insert the function module into the transaction:
trans.AddFunction(stfc_write_to_tcpic);
stfc_write_to_tcpic = (IRfcFunction)stfc_write_to_tcpic.Clone();
dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
dataTable.SetValue(0, data + " -- data of the second function module");
trans.AddFunction(stfc_write_to_tcpic);
trans.Commit(_ECCsystem);
tidStore.SetStatus(trans.Tid.TID, TidStatus.Committed, null);
File.Delete(trans.Tid.TID);
_ECCsystem.ConfirmTransactionID(trans.Tid);
tidStore.DeleteEntry(trans.Tid.TID);
}
catch (Exception e)
{
tidStore.SetStatus(trans.Tid.TID, TidStatus.RolledBack, e.Message);
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/70096790/net-sap-transaction-restart-from-client[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия