示例#1
0
        //---------------------------------------------------------
        /// <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);
        }
示例#2
0
        /// //////////////////////////////////////////////////
        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);
        }