Буквально вчера делал нечто подобное...
Предположим что необходимо создавать рекорд в таблице логов на каждый метод какого-либо класса... запускать метод, а потом апдейтить данную запись количеством успехов/ошибок и временем потраченным на работу вызывающих методов.
X++:
/*******************************************************************************
PARAMETERS: Name - descr of method, Upd - number of successes, Err - number of errors,
//---Insert - flag to create new record or update existing one.
RETURN VALUE: None
DESCRIPTION:
//---05/16/2007-10:52:18--- This method writes complete log of XXX class,
//---including all its methods. To create a record method should be called 2 times from any method within class:
//---at start->to create a record, at finish->to update record with number of errors/sucesses and time consumped.
*******************************************************************************/
void XXXClassLog(str Name,
int Upd=0,
int Err=0,
boolean Insert=true
)
{ XXX_Log XXX_Log;
if (Insert)
{
XXX_Log.Job = Name;
XXX_Log.Updated = 0;
XXX_Log.Errors = 0;
XXX_Log.Path = strfmt("%3%1_error.%2","XXX_Log","csv",WinAPI::getTempPath());
XXX_Log.insert();
RecId = XXX_Log.RecId;
}
if (!Insert)
{
XXX_Log.selectForUpdate(true);
ttsbegin;
select firstonly XXX_Log
where XXX_Log.RecId == RecId;
{
XXX_Log.Updated = Upd;
XXX_Log.Errors = Err;
XXX_Log.update();
}
ttscommit;
}
}
З.Ы.
Да, RecID - это глобальная переменная для поиска по ней... можно конечно хранить и весь рекорд... но я решил сделать так).
З.Ы.Ы.
По самому вопросу - да, сделать так конечно можно, вот только логики в примере не видно... не совсем ясно ЗАЧЕМ так делать.
Приведено в качестве примера для Максима Горбунова.
пасибо, исправил))))