Dynamics Ax UserConnection kullanımı
Merhaba
Ax’ta ilk versiyonlardan beri transaction (ttsBegin ttsCommit) blokları dediğimiz bir yapı vardır. Veri tutarlılığı için çok önemli olan roleback dediğimiz bir hata durumunda o blokta yapılan işlemlerin tümünü geri almayı sağlayan bir yapıdır. Ax ta çok sıklıkla kullanılır. Veri tabanında yapılacak işlemlerde mutlaka kullanmak gerekir. Benim bu yazıda bahsedeceğim konu bu bloklar arasında bir hata oluştuğunda roleback in dışında tutmak istediğim bir işlemi nasıl sağlayabileceğim. Genelde bu log atma bildirim gönderme gibi işlemler olur. Bir örnekle açıklamaya çalışayım. Eski sistemden satış verilerinin geldiği ve axta sipariş oluşturulup deftere nakledinlen bir yapı olsun. Herhangi bir sebepten sipariş oluşturulamadığında bir log tablosuna kayıt atmak istiyorum. Örnek kodlar şöyle olsun:
server static void FD_UserConnection1(Args _args) { DmrSalesOrderHeader DmrSalesOrderHeader = DmrSalesOrderHeader::findByRecid(325355554); DmrSalesOrderLine DmrSalesOrderLine; ; ttsBegin; try { // Sipariş başlığı oluşturma kodu while select DmrSalesOrderLine where DmrSalesOrderLine.OrderId == DmrSalesOrderHeader.OrderId { // Sipariş satırı oluşturma kodu throw error("hata"); } } catch { DmrExceptionTable::findOrCreate("Satır oluşturulurken bir hata oluştu.", "DmrCreateSalesOrder", DmrSalesOrderHeader.recid,DmrSalesOrderHeader.tableId,DmrSalesOrderHeader.recversion); } ttsCommit; }
Bu metod sipariş oluşturmaya çalışırken herhangi bir satırda hata veriyor. Bizde hata verdiğini yakalayıp hangi kayıttan sipariş oluştururken hata verdiğini bir tabloya yazmaya çalışıyoruz. Normalde hata verdiği ve tts blokları olduğu için bizim yazmaya çalıştığımız veriyi de geri alacaktı ancak UserConnection ve UnitOfWork kullanarak bunu engelliyoruz. Metot aşağıda.
static server void findOrCreate( str1260 _exceptionDetail, str 100 _className, RefRecId _RefRecId, RefTableId _RefTableId, RefRecId _RefRecVersionId) { DmrExceptionTable DmrExceptionTable; UserConnection UserConnection; UnitOfWork UnitOfWork; ; UserConnection = new UserConnection(); UserConnection.ttsbegin(); UnitOfWork = new UnitOfWork(); DmrExceptionTable.ExceptionDetail = _exceptionDetail; DmrExceptionTable.ClassName = _className; DmrExceptionTable.RefRecId = _RefRecId; DmrExceptionTable.RefTableId = _RefTableId; DmrExceptionTable.RefRecVersionId = _RefRecVersionId; UnitOfWork.insertonSaveChanges(DmrExceptionTable); UnitOfWork.saveChanges(UserConnection); UserConnection.ttscommit(); }
Selamlar.
Güzel bir bilgi dostum, UOW frameworkünün bu şekilde kullanımını görmemiştim.