//--------------------------------------------------------- /// <summary> /// Stocke les informations de fin d'étape dans l'étape /// <BR></BR>Cette méthode ne doit pas être utilisée en dehors d'un appel par l'objet serveur /// </summary> /// <returns></returns> public CResultAErreur InternalSetInfosTerminéeInCurrentContexte(EEtatEtapeWorkflow etat) { DateFin = DateTime.Now; CSessionClient session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession); IInfoUtilisateur info = session != null?session.GetInfoUtilisateur() : null; //TESTDBKEYOK KeyTermineur = info != null ? info.KeyUtilisateur : null; EtatCode = (int)etat; return(CResultAErreur.True); }
/// ////////////////////////////////////////////////// public override CResultAErreur TraitementAvantSauvegarde(sc2i.data.CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } //Stocke la liste des étapes pour lesquelles le traitement a déjà été fait dans cette sauvegarde //Pour éviter que plusieurs appels à TraitementAvantSauvegarde ne déclenche plusieurs fois la même étape ! HashSet <int> lstEtapesTraitees = table.ExtendedProperties[c_constEtapesTraitees] as HashSet <int>; if (lstEtapesTraitees == null) { lstEtapesTraitees = new HashSet <int>(); table.ExtendedProperties[c_constEtapesTraitees] = lstEtapesTraitees; } CEtapeWorkflow etape = null; bool bHasLancéDesEtapes = true; ArrayList lst; do { bHasLancéDesEtapes = false; lst = new ArrayList(table.Rows); //Identifie les étapes terminées et lance la suite foreach (DataRow rowTerminee in lst) { if (rowTerminee.RowState == DataRowState.Modified) { etape = new CEtapeWorkflow(rowTerminee); if (!lstEtapesTraitees.Contains(etape.Id)) { etape.VersionToReturn = DataRowVersion.Original; EEtatEtapeWorkflow oldEtat = (EEtatEtapeWorkflow)etape.EtatCode; etape.VersionToReturn = DataRowVersion.Current; EEtatEtapeWorkflow etat = (EEtatEtapeWorkflow)etape.EtatCode; if (etat == EEtatEtapeWorkflow.Terminée && oldEtat != EEtatEtapeWorkflow.Terminée) { lstEtapesTraitees.Add(etape.Id); //Il faut lancer la suite de cette étape result = etape.Workflow.PrépareSuiteEtapeInCurrentContext(etape); bHasLancéDesEtapes = true; } } } } }while (bHasLancéDesEtapes); lst = new ArrayList(table.Rows); List <DataRow> lstEtapesADemarrer = table.ExtendedProperties[c_constEtapesADemarre] as List <DataRow>; if (lstEtapesADemarrer == null) { lstEtapesADemarrer = new List <DataRow>(); } foreach (DataRow row in lst) { if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified) { etape = new CEtapeWorkflow(row); if (etape.DateDebut != null && etape.DateFin == null && etape.EtatCode == (int)EEtatEtapeWorkflow.ADemarrer) { if (!lstEtapesTraitees.Contains(etape.Id)) { lstEtapesTraitees.Add(etape.Id); //etape.EtatCode = (int)EEtatEtapeWorkflow.Démarrée; lstEtapesADemarrer.Add(row); } } } } if (lstEtapesADemarrer.Count > 0) { table.ExtendedProperties[c_constEtapesADemarre] = lstEtapesADemarrer; } return(result); }