Перезапуск транзакции .Net SAP с клиентаC#

Место общения программистов C#
Ответить
Anonymous
 Перезапуск транзакции .Net SAP с клиента

Сообщение 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);
}
}
}
}



Подробнее здесь: https://stackoverflow.com/questions/700 ... rom-client
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»