2015-09-17 4 views
1

Этот код автоматически сгенерирует новый номер детали. Это постобработка BPM для BO GetNewPartможет кто-нибудь сказать мне, какая ошибка у меня в этом BPM

int iPartnum = 0; 
string cPartid = string.Empty; 
Erp.Tables.Company Company; 
foreach (var ttpart_xRow in ttPart) 
{ 
    var ttpartRow = ttpart_xRow; 
    Company = (from Company_Row in Db.Company 
       where Company_Row.Company == Session.CompanyID 
    select Company_Row).FirstOrDefault(); 
    iPartnum = (decimal)Company["AutoGenerate_c"] + 1; 
    cPartid = System.Convert.ToString(iPartnum); 
    ttpartRow.PartNum = cPartid; 
    Services.Lib.UpdateTableBuffer._UpdateTableBuffer(Company,"AutoGenerate_c", iPartnum); 
} 

ответ

0

Это просто не работает или есть сообщение об ошибке?

Services.Lib.UpdateTableBuffer._UpdateTableBuffer(Company,"AutoGenerate_c", iPartnum); 

Я лично никогда не использовал или даже не видел этот элемент Lib, поэтому я не могу ручаться за него. Я бы обновил объект вручную внутри области транзакции, потому что я сомневаюсь, что GetNewPart когда-либо касается этой базы данных и, следовательно, вероятно, не создает транзакцию.

using (System.Transactions.TransactionScope txScope = IceDataContext.CreateDefaultTransactionScope())//start the transaction 
{ 
    //Your Logics go here 
    Db.Validate(); 
    txScope.Complete();//commit the transaction 
} 

Как примечание стороны, я стараюсь держать такого рода вещи от звукозаписывающей компании, потому что почти каждый процесс в системе трогает, и я не хочу, чтобы заблокировать процесс его или вызвать странные гонки условия. Обычно мне нравится резервировать запись, которая будет затронута только для этой конкретной цели, поэтому у меня есть UDCodeType/UDCode для такого рода вещей.