コード例 #1
0
        /// //////////////////////////////////////////////////
        public CResultAErreur StartProcessMultiples(CValise2iSerializable valiseProcess,
                                                    CReferenceObjetDonnee[] refsCible,
                                                    int?nIdVersion,
                                                    IIndicateurProgression indicateur)
        {
            using (C2iSponsor sponsor = new C2iSponsor())
            {
                sponsor.Register(indicateur);

                CResultAErreur result = CResultAErreur.True;
                //Stef 08/12/2007 : le contexte ne reçoit plus les notifications
                using (CContexteDonnee contexteDeSession = new CContexteDonnee(IdSession, true, false))
                {
                    result = valiseProcess.GetObjet(typeof(CContexteDonnee), contexteDeSession);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error while process recovering|30014"));
                        return(result);
                    }
                    CProcess leProcessAExecuter = (CProcess)result.Data;

                    CObjetDonneeAIdNumerique objetCible = null;

                    ///Stef, 290808 : ouvre une session spécifique pour le process
                    ///Pour pouvoir gérer le changement d'utilisateur proprement
                    CSousSessionClient session = CSousSessionClient.GetNewSousSession(contexteDeSession.IdSession);
                    session.OpenSession(new CAuthentificationSessionSousSession(contexteDeSession.IdSession), leProcessAExecuter.Libelle, ETypeApplicationCliente.Process);
                    CSessionClient sessionOriginale = CSessionClient.GetSessionForIdSession(contexteDeSession.IdSession);
                    //TESTDBKEYOK
                    if (sessionOriginale.GetInfoUtilisateur() != null)
                    {
                        session.ChangeUtilisateur(sessionOriginale.GetInfoUtilisateur().KeyUtilisateur);
                    }

                    try
                    {
                        //Charge les éléments pour la nouvelle session;
                        //Stef 08/12/2007 : le contexte ne reçoit plus les notifications
                        using (CContexteDonnee contexte = new CContexteDonnee(session.IdSession, true, false))
                        {
                            result = contexte.SetVersionDeTravail(nIdVersion, true);
                            if (!result)
                            {
                                return(result);
                            }
                            if (leProcessAExecuter.SurTableauDeTypeCible)
                            {
                                ArrayList lst = new ArrayList();
                                foreach (CReferenceObjetDonnee refCibleTmp in refsCible)
                                {
                                    object tmp = refCibleTmp.GetObjet(contexte);
                                    if (tmp != null)
                                    {
                                        lst.Add(tmp);
                                    }
                                }
                                return(ExecuteProcess(session, lst, leProcessAExecuter, contexte, false, indicateur));
                            }
                            try
                            {
                                if (!leProcessAExecuter.ModeAsynchrone)
                                {
                                    session.BeginTrans(IsolationLevel.ReadCommitted);
                                }
                                foreach (CReferenceObjetDonnee refCible in refsCible)
                                {
                                    bool bShouldStart = true;
                                    if (refCible != null)
                                    {
                                        objetCible = (CObjetDonneeAIdNumerique)refCible.GetObjet(contexte);
                                        if (objetCible == null)
                                        {
                                            ///Stef 26/1//2009 : si l'objet n'existe pas, c'est qu'il n'y a rien à déclenché.
                                            ///cela résoud un problème : si un process avant celui-ci a supprimé le targetElement
                                            ///il ne faut pas lancer ce process là !

                                            /*result.EmpileErreur(I.T("Target object @1 does not exist|30015", refCible.ToString()));
                                             * return result;*/
                                            bShouldStart = false;
                                        }
                                    }
                                    if (bShouldStart)
                                    {
                                        result = ExecuteProcess(
                                            session,
                                            objetCible,
                                            leProcessAExecuter,
                                            contexte, true, indicateur);
                                        if (!result)
                                        {
                                            result.EmpileErreur(I.T("Execution error on element @1|30016", objetCible.DescriptionElement));
                                            return(result);
                                        }
                                    }
                                }
                                if (result)
                                {
                                    result = contexte.SaveAll(true);
                                }
                            }
                            catch (Exception e)
                            {
                                result.EmpileErreur(new CErreurException(e));
                            }
                            finally
                            {
                                if (result)
                                {
                                    result = session.CommitTrans();
                                }
                                if (!result)
                                {
                                    session.RollbackTrans();
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                    }
                    finally
                    {
                        try
                        {
                            session.CloseSession();
                        }
                        catch
                        {
                        }
                    }
                    return(result);
                }
            }
        }
コード例 #2
0
        /// //////////////////////////////////////////////////
        ///LE data du result contient la valeur de retour
        public CResultAErreur StartProcess(CValise2iSerializable valiseProcess,
                                           CReferenceObjetDonnee refCible,
                                           int?nIdVersion,
                                           IIndicateurProgression indicateur)
        {
            using (C2iSponsor sponsor = new C2iSponsor())
            {
                sponsor.Register(indicateur);

                CResultAErreur result = CResultAErreur.True;


                //Stef 08/12/2007 : le contexte ne reçoit plus les notifications
                using (CContexteDonnee contexteDeSession = new CContexteDonnee(IdSession, true, false))
                {
                    result = valiseProcess.GetObjet(typeof(CContexteDonnee), contexteDeSession);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error while recovering process|30014"));
                        return(result);
                    }
                    CProcess leProcessAExecuter = (CProcess)result.Data;

                    CObjetDonneeAIdNumerique objetCible = null;


                    ///Stef, 290808 : ouvre une session spécifique pour le process
                    ///Pour pouvoir gérer le changement d'utilisateur proprement
                    CSousSessionClient session = CSousSessionClient.GetNewSousSession(contexteDeSession.IdSession);
                    session.OpenSession(new CAuthentificationSessionSousSession(contexteDeSession.IdSession), leProcessAExecuter.Libelle, ETypeApplicationCliente.Process);
                    CSessionClient sessionOriginale = CSessionClient.GetSessionForIdSession(contexteDeSession.IdSession);
                    if (sessionOriginale.GetInfoUtilisateur() != null)
                    {
                        session.ChangeUtilisateur(sessionOriginale.GetInfoUtilisateur().KeyUtilisateur);
                    }

                    try
                    {
                        //Charge les éléments pour la nouvelle session;
                        //Stef 08/12/2007 : le contexte ne reçoit plus les notifications
                        //Stef le 9/2/2011, si, le contexte reçoit les notifications,
                        //sinon, si un sous process modifie quelque chose, on ne le sait pas
                        //et on a des problèmes de violation d'accès concurentiel
                        using (CContexteDonnee contexte = new CContexteDonnee(session.IdSession, true, true))
                        {
                            result = contexte.SetVersionDeTravail(nIdVersion, true);
                            if (!result)
                            {
                                return(result);
                            }
                            if (refCible != null)
                            {
                                objetCible = (CObjetDonneeAIdNumerique)refCible.GetObjet(contexte);
                                if (objetCible == null)
                                {
                                    ///Stef 26/1//2009 : si l'objet n'existe pas, c'est qu'il n'y a rien à déclencher.
                                    ///cela résoud un problème : si un process avant celui-ci a supprimé le targetElement
                                    ///il ne faut pas lancer ce process là !
                                    //result.EmpileErreur(I.T("Target object @1 does not exist|30015",refCible.ToString()));
                                    return(result);
                                }
                            }
                            result = ExecuteProcess(
                                session,
                                objetCible,
                                leProcessAExecuter,
                                contexte, false,
                                indicateur);
                        }
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                    }
                    finally
                    {
                        try
                        {
                            session.CloseSession();
                        }
                        catch { }
                    }
                }
                return(result);
            }
        }