public void Commit() { ArrayList sortedTask = SortTasks(TaskStaticInfo.SortOrder.OrderDA); ProcessCollectionData processCollectionData = new ProcessCollectionData(); foreach (TaskDynamicInfo taskInfo in sortedTask) { if (taskInfo.TaskInstance is IPersistentTask) { IPersistentTask taskInstance = (IPersistentTask)taskInfo.TaskInstance; taskInstance.PutExtraDataOnCommit(processCollectionData); taskInstance.Commit(); processCollectionData.Add(taskInstance.GetData()); } } }
/// <summary> /// Ordena las tareas segun lo definido para en el modelo de datos /// Inicia una transacción para toda la grabación del proceso /// Genero la sentencia de replicacion para todo el proceso /// Armo una coleccion para ir almacenando los datos del proceso mientras se va guardando /// Guardo informacion acerca del proceso por si alguna tarea debe realizar una lógica distinta /// Itero segun el orden de grabación definido para el proceso /// Ofrezco a la tarea antes de almacenarse los datos del proceso que se han ido guardando /// Guardo el dataset /// Agrego a la coleccion de datos almacenados del proceso /// Cierra la transaccion o realiza el roolback /// </summary> public bool Flush() { bool state = false; //Ordena las tareas ArrayList sortedTask = SortTasks(TaskStaticInfo.SortOrder.OrderDA); //mz.erp.commontypes.SentenciasReplicacion _replication = null; //Inicia una transaccion string IdTransaction = dataaccess.PoolTransaction.BeginTransaction(); //German 2009108 ProcessCollectionData _processCollectionData = new ProcessCollectionData(); //Fin German 2009108 try { //Genero la sentencia de replicacion para todo el proceso mz.erp.commontypes.SentenciasReplicacion _sentences = new SentenciasReplicacion(); mz.erp.commontypes.SentenciasReplicacion _mainsentence = new SentenciasReplicacion(); //Armo una coleccion para ir almacenando los datos del proceso mientras se va guardando //German 2009108 //ProcessCollectionData _processCollectionData = new ProcessCollectionData(); //Fin German 2009108 //Guardo informacion acerca del proceso por si alguna tarea debe realizar una lógica distinta _processCollectionData.ProcessId = this._process.IdProcess; //Itero segun el orden de grabación definido para el proceso foreach (TaskDynamicInfo taskInfo in sortedTask) { if (taskInfo.TaskInstance is IPersistentTask) { IPersistentTask _taskInstance = (IPersistentTask)taskInfo.TaskInstance; //Ofrezco a la tarea antes de almacenarse los datos del proceso que se han ido guardando _taskInstance.PutExtraData(_processCollectionData); //Guardo el dataset _taskInstance.Flush(IdTransaction); //_taskInstance.Flush( IdTransaction ); if (taskInfo.Order == 1) //Tarea Principal { _mainsentence = _taskInstance.GetSentenceReplication(); } else { SentenciasReplicacion replication = _taskInstance.GetSentenceReplication(); if (replication != null) { System.Text.StringBuilder _sentencia = replication.Sentence; if (_sentencia != null) { _sentences.Sentence.Append(_sentencia); } } } //Agrego a la coleccion de datos almacenados del proceso _processCollectionData.Add(_taskInstance.GetData()); } } //throw new Exception("Excepcion explicita para probar Tarea del SP 15"); //Almaceno el conjunto de sentencias de replicacion //German 20110301 - Tarea 0000079 /* * if (_mainsentence != null && _mainsentence.IdTipoDeSentencia != null) * { * _mainsentence.Sentence.Append ( _sentences.Sentence ); * _mainsentence.Update(); * mz.erp.businessrules.transactionmanager.SentenciasReplicacion.Flush(IdTransaction, _mainsentence); * } */ //Fin German 20110301 - Tarea 0000079 //Almaceno datos dataaccess.PoolTransaction.Commit(IdTransaction); state = true; } catch (Exception e) { System.Console.WriteLine(e.ToString()); dataaccess.PoolTransaction.RollBack(IdTransaction); state = false; _errorMessage = e.Message; } comprobantes.GuardarSaldoCuentaCorriente.GetInstance().ClearDataSet(this._process); return(state); }