工作流中对于事务处理的思考

由于这个engine,需要考虑到COM+/ASP.NET/winform+Webservice,尤其是前者,业务系统的处理,和engine的处理,在事务上是否需要保持一个?咨询了一下ms,答案是不需要。不处理事务,而是按照错误来处理。所以,我写了一段伪码,业务单据的程序,这么修改应该就可以了吧!

        public void bill.Save(){
            
bool enginesuccess = true;
            
bool billsuccess = true;

            
try{
                db.BeginTransaction();

                
try{
                    WorkflowEngine engine 
= WorkflowEngine.Create();
                    enginesuccess 
= engine.TransferSomeData(bill.SomeMethod());// 把数据传递到engine的db中
                }


                
catch(Exception ex){
                    enginesuccess 
= false;//false可能是异常造成的,也可能是TransferSomeData方法返回的
                }


                bill.Save();
                db.Commint();
            }

            
catch(Exception ex){
                billsuccess 
= false;// 单据保存失败了
            }


            
if(false == billsuccess && false == enginerror)// 单据保存失败,工作流engine也失败
                db.Rollback();// 业务单据回滚
                engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
                MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
            }

            
else if(true == billsuccess && false == enginesuccess)// 单据保存成功,工作流engine失败
                
// db.Rollback();这句是否需要加上?需要处理吗?
                engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
                MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
            }

            
else if(false == billsuccess && true == enginesuccess)// 单据保存失败,工作流engine成功
                db.Rollback(); // 单据回滚
                engine.CancelTransferSomeDataFromEnginDatabase();// 引擎回滚
            }

        }


btw,edit new post的时候,page打开的速度好慢。。。
posted @ 2004-07-19 16:27  鞠强  阅读(2010)  评论(4编辑  收藏  举报

hello

world