procedure THGZB_H_FSQ_doc.ToolButton4Click(Sender: TObject);
//...............................
lTransaction:=TTransaction.Create(nil);
lConnection:=TConnection.Create(nil);
lQuery:=TQuery.Create(nil);
lQuery.Connection:=DataSetBroker_hgz.DataSet.Connection;
try
lTransaction:=DataSetBroker_hgz.DataSet.Connection.Transaction;
lConnection.ConnectionString := DataSetBroker_hgz.DataSet.ConnectionString;
lConnection.Transaction:= lTransaction;
lHandle:= lTransaction.Start(False);
try
//先处理业务数据(测试事务时,可以跟处理流程的代码换个位置)
DataSetBroker_hgz.DataSet.Edit;
DataSetBroker_hgz.DataSet.FieldByName('status').AsString:='办理中';
DataSetBroker_hgz.DataSet.Post;
DataSetBroker_hgz.DataSet.ApplyUpdates;
lQuery.Close;
lquery.CommandText:='insert into x3_drp_flowid (id, biztablename,OP_USER,OP_date)values '
+' (:id,:biztablename,:OP_USER,:OP_date)';
lquery.Params.ParamByName('id').AsString:=AFlowID;
lquery.Params.ParamByName('biztablename').AsString:='qm_hgzbf';
lquery.Params.ParamByName('OP_USER').AsString:=SystemUtils.TContextUtils.GetOperator(self.Context).DisplayName; //操作者用户名
lquery.Params.ParamByName('OP_date').AsDateTime:=business.Data.SysSrv.SysService.Time;
lQuery.Execute;
//再处理流程
TZLGLXX_info(InfoBroker.Info).UserStartFlow(ADept,ARole,APerson,AFlowUrl,AStartProc,AFlowID,ASubject,ADescription,lTransaction);
lTransaction.Commit(lHandle);
Dialogs.ShowMessage('事务成功');
except
DataSetBroker_hgz.DataSet.CancelUpdates;
lTransaction.Rollback(lHandle);
Dialogs.ShowMessage('事务失败');
end;
finally
lQuery.Free;
lConnection.Free;
lTransaction.Free;
end;
procedure TZLGLXX_info.UserStartFlow(ADept,ARole,APerson,AFlowUrl,AStartProc,AFlowID,ASubject,ADescription:string;ATransaction:TTransaction);
var
lBizURL:TBizURL;
lFlowValue:TFlowValue;
lFlowControl:TFlowControl;
lExecutor:Org.TOrgURL;
begin
lBizURL := TBizURL.Create;
lFlowValue := TFlowValue.Create;
lFlowControl := TFlowControl.Create(Self.Context);
lExecutor := Org.TOrgURL.Create(ADept, ARole, APerson);
lBizURL.URL := AFlowUrl;
try
lFlowValue.IDs.Add(AFlowID); //流程ID
lFlowValue.Subject := ASubject; //流程主题
lFlowValue.Description := ADescription; //流程描述
try
lFlowControl.FlowManager.Transaction := ATransaction;
//启动流程实例
lFlowControl.StartupFlow(lBizURL, AStartProc, lExecutor, lFlowValue); //AStartProc 入口环节ID
//流程实例数据保存到数据库
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
except
raise;
end;
finally
lFlowControl.Free;
lFlowValue.Free;
lBizURL.Free;
end;
end;
这样还是不行。业务数据保存不成功的情况下。流程还是会被创建。 |