/////////////////////////////////////////////////////////////////////////////////
        private void InitListeFormulesParametres(CProcess process, CActionSur2iLinkExecuterProcess action)
        {
            if (process == null)
            {
                m_panelParametresAction.Visible = false;
                return;
            }
            m_panelParametresAction.Visible = true;
            Dictionary <string, CFormuleNommee> dicFormulesCreees = new Dictionary <string, CFormuleNommee>();

            if (action != null)
            {
                foreach (CFormuleNommee formule in action.FormulesPourParametres)
                {
                    dicFormulesCreees[formule.Libelle] = formule;
                }
            }
            List <CFormuleNommee> lst = new List <CFormuleNommee>();

            if (process != null)
            {
                foreach (IVariableDynamique variable in process.ListeVariables)
                {
                    if (variable.IsChoixUtilisateur())
                    {
                        CFormuleNommee formuleAffectee = null;
                        if (dicFormulesCreees.TryGetValue(variable.Nom, out formuleAffectee))
                        {
                            lst.Add(formuleAffectee);
                        }
                        else
                        {
                            lst.Add(new CFormuleNommee(variable.Nom, null));
                        }
                    }
                }
            }
            m_panelParametresAction.Init(lst.ToArray(), m_objetPourSousProprietes, new CFournisseurGeneriqueProprietesDynamiques());
        }
        /// //////////////////////////////////////////////////////////////////
        protected static CResultAErreur AffecteVariablesToProcess(CActionSur2iLinkExecuterProcess action,
                                                                  CProcess process,
                                                                  object cible)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(cible);

            foreach (CFormuleNommee formule in action.FormulesPourParametres)
            {
                if (formule.Formule != null)
                {
                    result = formule.Formule.Eval(ctx);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error while evaluating parameter @1|20128", formule.Libelle));
                        return(result);
                    }
                    bool bVariableFound = false;
                    foreach (CVariableDynamique variable in process.ListeVariables)
                    {
                        if (variable.Nom == formule.Libelle)
                        {
                            process.SetValeurChamp(variable.IdVariable, result.Data);
                            bVariableFound = true;
                            break;
                        }
                    }
                    if (!bVariableFound)
                    {
                        result.EmpileErreur(I.T("Process variable @1 doesn't exists|20129", formule.Libelle));
                        return(result);
                    }
                }
            }
            return(result);
        }
        /// //////////////////////////////////////////////////////////////////
        protected static CResultAErreur ExecuteActionProcess(CActionSur2iLinkExecuterProcess action, object objetCible)
        {
            CResultAErreur result  = CResultAErreur.True;
            CProcessInDb   process = new CProcessInDb(CSc2iWin32DataClient.ContexteCourant);

            if (process.ReadIfExists(action.IdProcessInDb))
            {
                CProcess processToExecute = process.Process;
                result = AffecteVariablesToProcess(action, processToExecute, objetCible);
                if (!result)
                {
                    return(result);
                }
                CInfoDeclencheurProcess infoDecl = new CInfoDeclencheurProcess(TypeEvenement.Manuel);
                CReferenceObjetDonnee   refObj   = null;
                object cibleProcess = objetCible;
                if (cibleProcess is CDefinitionMultiSourceForExpression)
                {
                    cibleProcess = ((CDefinitionMultiSourceForExpression)cibleProcess).ObjetPrincipal;
                }
                if (cibleProcess != null && process.TypeCible != null)
                {
                    if (cibleProcess.GetType().IsArray)
                    {
                        ArrayList lstRefs = new ArrayList();
                        foreach (object cible in (Array)cibleProcess)
                        {
                            if (process.TypeCible.IsAssignableFrom(cible.GetType()) && cible is CObjetDonnee)
                            {
                                lstRefs.Add(new CReferenceObjetDonnee((CObjetDonnee)cible));
                            }
                        }
                        if (lstRefs.Count == 0)
                        {
                            result.EmpileErreur(I.T("No element selected for requested action|30085"));
                        }
                        else
                        {
                            result = CFormExecuteProcess.StartProcessMultiples(processToExecute,
                                                                               (CReferenceObjetDonnee[])lstRefs.ToArray(typeof(CReferenceObjetDonnee)),
                                                                               CTimosApp.SessionClient.IdSession,
                                                                               CSc2iWin32DataClient.ContexteCourant.IdVersionDeTravail,
                                                                               action.MasquerProgressProcess);
                            return(result);
                        }
                    }
                    else
                    {
                        if (process.TypeCible.IsAssignableFrom(cibleProcess.GetType()) && cibleProcess is CObjetDonnee)
                        {
                            refObj = new CReferenceObjetDonnee((CObjetDonnee)cibleProcess);
                        }
                    }
                }
                result = CFormExecuteProcess.StartProcess(processToExecute,
                                                          refObj,
                                                          CTimosApp.SessionClient.IdSession,
                                                          CSc2iWin32DataClient.ContexteCourant.IdVersionDeTravail,
                                                          action.MasquerProgressProcess);
            }
            else
            {
                CEvenement evt = new CEvenement(CSc2iWin32DataClient.ContexteCourant);
                CInfoDeclencheurProcess infoDecl = new CInfoDeclencheurProcess(TypeEvenement.Manuel);
                object cibleProcess = objetCible;
                if (cibleProcess is CDefinitionMultiSourceForExpression)
                {
                    cibleProcess = ((CDefinitionMultiSourceForExpression)cibleProcess).ObjetPrincipal;
                }
                if (evt.ReadIfExists(action.IdEvenement))
                {
                    if (cibleProcess == null)
                    {
                        result.EmpileErreur(I.T("Impossible to execute the requested event|30086"));
                        return(result);
                    }
                    if (cibleProcess.GetType().IsArray)
                    {
                        ArrayList lstRefs = new ArrayList();
                        foreach (object cible in (Array)cibleProcess)
                        {
                            if (!(cible is CObjetDonneeAIdNumerique) || !evt.ShouldDeclenche((CObjetDonneeAIdNumerique)cible, ref infoDecl))
                            {
                                result.EmpileErreur(I.T("The requested action cannot be executed on at least one of the requested elements|30087"));
                                return(result);
                            }
                            lstRefs.Add(cible);
                        }
                        if (lstRefs.Count == 0)
                        {
                            result.EmpileErreur(I.T("No element selected for execution|30088"));
                            return(result);
                        }
                        result = CFormExecuteProcess.RunEventMultiple(
                            evt,
                            (CObjetDonneeAIdNumeriqueAuto[] )lstRefs.ToArray(typeof(CObjetDonneeAIdNumeriqueAuto)),
                            action.MasquerProgressProcess);
                    }
                    else
                    {
                        if (!evt.ShouldDeclenche((CObjetDonneeAIdNumerique)cibleProcess, ref infoDecl))
                        {
                            result.EmpileErreur(I.T("Impossible to trigger the requested event on this object|30089"));
                            return(result);
                        }
                        result = CFormExecuteProcess.RunEvent(evt, (CObjetDonneeAIdNumerique)cibleProcess, action.MasquerProgressProcess);
                    }
                }
                else
                {
                    result.EmpileErreur(I.T("The requested action does not exist|30090"));
                }
            }
            return(result);
        }
        //-----------------------------------------------------------------------------------------------------
        public void InitChamps(CActionSur2iLink action, CObjetPourSousProprietes objetPourSousProprietes)
        {
            m_actionEditee = action as CActionSur2iLinkExecuterProcess;
            if (m_actionEditee == null)
            {
                Visible = false;
                return;
            }
            Visible = true;

            m_objetPourSousProprietes = objetPourSousProprietes;
            CObjetPourSousProprietes            objetPourFiltreActions = m_objetPourSousProprietes;
            CDefinitionMultiSourceForExpression multi = m_objetPourSousProprietes.ElementAVariableInstance as CDefinitionMultiSourceForExpression;

            if (multi != null)
            {
                objetPourFiltreActions = multi.DefinitionObjetPrincipal;
            }
            CFiltreData filtre = null;

            if (objetPourFiltreActions == null || objetPourFiltreActions.TypeAnalyse == null)
            {
                filtre = new CFiltreData(CProcessInDb.c_champTypeCible + "=@1", "");
            }
            else
            {
                filtre = new CFiltreData(CProcessInDb.c_champTypeCible + "=@1 or " +
                                         CProcessInDb.c_champTypeCible + "=@2 or " +
                                         CProcessInDb.c_champTypeCible + "=@3",
                                         "",
                                         objetPourFiltreActions.TypeAnalyse.ToString(),
                                         typeof(CObjetDonneeAIdNumerique).ToString());
            }

            m_selectionneurProcess.InitAvecFiltreDeBase <CProcessInDb>("Libelle", filtre, true);
            CProcessInDb process = new CProcessInDb(CSc2iWin32DataClient.ContexteCourant);
            CProcess     processPourParametres = null;

            if (process.ReadIfExists(((CActionSur2iLinkExecuterProcess)m_actionEditee).IdProcessInDb))
            {
                m_selectionneurProcess.ElementSelectionne = process;
                processPourParametres = process.Process;
            }


            if (objetPourFiltreActions != null && objetPourFiltreActions.TypeAnalyse != null)
            {
                m_panelEvenementManuel.Visible = true;
                CFiltreData filtreDeBase = new CFiltreData(
                    CEvenement.c_champTypeEvenement + "=@1 and " +
                    CEvenement.c_champTypeCible + "=@2",
                    (int)TypeEvenement.Manuel,
                    objetPourFiltreActions.TypeAnalyse.ToString());

                m_selectionneurEvenementManuel.InitAvecFiltreDeBase <CEvenement>(
                    "Libelle",
                    filtreDeBase, true);

                CEvenement evt = new CEvenement(CSc2iWin32DataClient.ContexteCourant);
                if (evt.ReadIfExists(((CActionSur2iLinkExecuterProcess)m_actionEditee).IdEvenement))
                {
                    m_selectionneurEvenementManuel.ElementSelectionne = evt;
                    processPourParametres = null;
                }
            }
            else
            {
                m_panelEvenementManuel.Visible = false;
                m_selectionneurEvenementManuel.ElementSelectionne = null;
            }
            m_chkHideProgress.Checked = ((CActionSur2iLinkExecuterProcess)m_actionEditee).MasquerProgressProcess;
            InitListeFormulesParametres(processPourParametres, m_actionEditee);
        }