楼主,我测试的结果是可以的。(我这里没用主从,但应该是一样的)
procedure TMainForm.UserStartFlow (ATransaction: TTransaction;AFlowUrl,ADept,ARole,APerson,
AStartProc,AFlowID,ASubject,ADescription:string);
var
lBizURL: TBizURL;
lFlowValue: TFlowValue;
lFlowControl: TFlowControl;
lExecutor: TOrgURL;
begin
lBizURL := TBizURL.Create;
lFlowValue := TFlowValue.Create;
lFlowControl := TFlowControl.Create(Self.Context);
lExecutor := TOrgURL.Create(ADept, ARole, APerson);
lBizURL.URL := AFlowUrl;
try
lFlowValue.IDs.Add(AFlowID); //流程字段的 值
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
end;
finally
lFlowControl.Free;
lFlowValue.Free;
lBizURL.Free;
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
lHandle: TTransactionHandle;
lTransaction: TTransaction;
lConnection : TConnection;
lGUID : String;
begin
lGUID := Business.System.JSCommon.CreateGUIDStr;
lTransaction := TTransaction.Create(nil);
lConnection := TConnection.Create(nil);
try
lTransaction := DataSetBroker1.DataSet.Connection.Transaction;
lConnection.ConnectionString := DataSetBroker1.DataSet.ConnectionString;
lConnection.Transaction:= lTransaction;
lHandle:= lTransaction.Start(False);
try
//先处理业务数据(测试事务时,可以跟处理流程的代码换个位置)
if not DataSetBroker1.DataSet.Active then
DataSetBroker1.DataSet.Active := True;
DataSetBroker1.DataSet.Append;
DataSetBroker1.DataSet.FieldByName('id').AsString := lGUID;
//DataSetBroker1.DataSet.FieldByName('spbh').AsString := '1234567890123456789012345678901234567890';
//上面的spbh为必填字段,测试事务可以不给他添值看看是否回滚
DataSetBroker1.DataSet.Post;
//再处理流程
UserStartFlow(lTransaction,'Biz:\CSLZ\CSLZ3\DMQDLCJSWCLLC.Proc','BM1','GW1','RY1',
'DMQDLCJSWCLRK',lGUID,'test','tttt');
lConnection.ExecuteSQL('update B set SPBH=''FF'' where id = '''+lGUID+''' ');
DataSetBroker1.DataSet.ApplyUpdates;
lTransaction.Commit(lHandle);
Dialogs.ShowMessage('事务成功');
except
DataSetBroker1.DataSet.CancelUpdates;
lTransaction.Rollback(lHandle);
Dialogs.ShowMessage('事务失败');
end;
finally
lConnection.Free;
lTransaction.Free;
end;
end; |