コード例 #1
0
        private void m_mnuStockInVariable_Click(object sender, EventArgs e)
        {
            if (Selection.Count != 1 || AskCreationVariable == null)
            {
                return;
            }
            CRepresentationExpressionGraphique rep = Selection[0] as CRepresentationExpressionGraphique;

            if (rep == null || rep.Formule == null)
            {
                return;
            }
            CTypeResultatExpression typeRes = rep.Formule.TypeDonnee;
            CDefinitionProprieteDynamiqueVariableFormule def = new CDefinitionProprieteDynamiqueVariableFormule(
                "", typeRes, true);

            def = CFormEditVariableFormule.EditeVariable(def);
            if (def != null)
            {
                if (AskCreationVariable(def))
                {
                    C2iExpressionSetVariable exp    = new C2iExpressionSetVariable();
                    C2iExpressionChamp       expVar = new C2iExpressionChamp(def);
                    exp.Parametres.Add(expVar);
                    exp.Parametres.Add(rep.Formule);
                    rep.Formule = exp;
                    Refresh();
                }
            }
        }
コード例 #2
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantExpression(CFiltreDynamique filtreDynamique)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(filtreDynamique);

            if (ConditionApplication != null)
            {
                result = ConditionApplication.Eval(ctx);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                    return(result);
                }

                if (!((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1"))
                {
                    result.Data = null;
                    return(result);
                }
            }
            C2iExpressionChamp expChamp         = new C2iExpressionChamp(m_champ);
            C2iExpression      expressionIsNull = new C2iExpressionEstNull();

            expressionIsNull.Parametres.Add(expChamp);
            result.Data = expressionIsNull;
            if (!TestNull)
            {
                C2iExpression expNon = new C2iExpressionNon();
                expNon.Parametres.Add(expressionIsNull);
                result.Data = expNon;
            }
            return(result);
        }
コード例 #3
0
ファイル: CMapLineGenerator.cs プロジェクト: ykebaili/Timos
        //-------------------------------------------------------------
        private int?GetIdChampOptimFromFormule(C2iExpression formule)
        {
            C2iExpressionChamp exp = formule as C2iExpressionChamp;

            if (exp != null)
            {
                //TESTDBKEYOK
                CDefinitionProprieteDynamiqueChampCustom prop = exp.DefinitionPropriete as CDefinitionProprieteDynamiqueChampCustom;
                if (prop != null)
                {
                    return(CChampCustom.GetIdFromDbKey(prop.DbKeyChamp));
                }
            }
            return(null);
        }
コード例 #4
0
        //---------------------------------------------------
        public static CResultAErreur GetDicValeurs(
            IEnumerable <DataRow> rows,
            C2iExpression formule,
            ref Dictionary <object, List <DataRow> > dicRetour)
        {
            CResultAErreur result = CResultAErreur.True;

            dicRetour = new Dictionary <object, List <DataRow> >(rows.Count());
            string             strColonne = null;
            C2iExpressionChamp expChamp   = formule as C2iExpressionChamp;

            if (expChamp != null)
            {
                CDefinitionProprieteDynamiqueDataColumn champCol = expChamp.DefinitionPropriete as CDefinitionProprieteDynamiqueDataColumn;
                if (champCol != null)
                {
                    strColonne = champCol.NomProprieteSansCleTypeChamp;
                }
            }
            foreach (DataRow row in rows)
            {
                object valeur = null;
                if (strColonne != null)
                {
                    valeur = row[strColonne];
                }
                else
                {
                    CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(row);
                    result = formule.Eval(ctx);
                    if (!result)
                    {
                        return(result);
                    }
                    valeur = result.Data == null ? DBNull.Value : result.Data;
                }

                List <DataRow> lstRows = null;
                if (!dicRetour.TryGetValue(valeur, out lstRows))
                {
                    lstRows           = new List <DataRow>();
                    dicRetour[valeur] = lstRows;
                }
                lstRows.Add(row);
            }
            return(result);
        }
コード例 #5
0
        //----------------------------------
        private bool FillMacroValeurWithValue(CMacroObjetValeur mv, object data, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacroObjet)
        {
            C2iExpression            formule          = null;
            string                   strIdVariableRef = "";
            CObjetDonneeAIdNumerique obj = data as CObjetDonneeAIdNumerique;

            if (obj != null)
            {
                CMacroObjet mr = null;
                if (dicObjetToMacroObjet.TryGetValue(obj, out mr))
                {
                    strIdVariableRef = mr.IdVariableAssociee;
                }
                else
                {
                    CMacroObjet macroObjet = new CMacroObjet(Macro);
                    macroObjet.TypeObjet        = obj.GetType();
                    macroObjet.TypeOperation    = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune);
                    macroObjet.DesignationObjet = obj.DescriptionElement;
                    macroObjet.IdObjet          = obj.Id;
                    Macro.AddObjet(macroObjet);
                    dicObjetToMacroObjet[obj] = macroObjet;
                    macroObjet.CreateVariable(obj);
                    strIdVariableRef = macroObjet.IdVariableAssociee;
                }
            }
            if (strIdVariableRef == "")
            {
                formule = GetFormuleValeur(data);
            }
            if (formule == null && strIdVariableRef == "")
            {
                return(false);
            }
            if (strIdVariableRef != "")
            {
                CVariableDynamique variable = Macro.GetVariable(strIdVariableRef);
                formule = new C2iExpressionChamp(new CDefinitionProprieteDynamiqueVariableDynamique(variable));
            }
            mv.FormuleValeur = formule;
            return(true);
        }
コード例 #6
0
        /// <summary>
        /// retourne l'objet donné sélectionné à partir de la valeur retournée
        /// </summary>
        /// <remarks>
        /// Ne fonctionne pas toujours, ça ne fonctionne que si la valeur retournée
        /// est un champ DOTNET de l'entité sélectionnée
        /// </remarks>
        /// <param name="valeurRetournee"></param>
        /// <param name="contexte"></param>
        /// <returns></returns>
        public CReferenceObjetDonnee GetObjetFromValeurRetournee(object valeurRetournee)
        {
            if (valeurRetournee == null)
            {
                return(null);
            }
            C2iExpressionChamp exp = ExpressionRetournee as C2iExpressionChamp;

            if (exp != null)
            {
                CDefinitionProprieteDynamique       propDyn   = exp.DefinitionPropriete;
                CDefinitionProprieteDynamiqueDotNet defDotNet = propDyn as CDefinitionProprieteDynamiqueDotNet;
                if (defDotNet != null)
                {
                    CObjetDonnee    objet     = (CObjetDonnee)Activator.CreateInstance(m_filtreSelection.TypeElements, new object[] { CContexteDonneeSysteme.GetInstance() });
                    CStructureTable structure = CStructureTable.GetStructure(m_filtreSelection.TypeElements);
                    CInfoChampTable info      = structure.GetChampFromPropriete(defDotNet.NomProprieteSansCleTypeChamp);
                    if (info != null)
                    {
                        CResultAErreur result = m_filtreSelection.GetFiltreData();
                        CFiltreData    filtre = null;
                        if (result && result.Data is CFiltreData)
                        {
                            filtre = result.Data as CFiltreData;
                        }

                        filtre = CFiltreData.GetAndFiltre(filtre,
                                                          new CFiltreData(info.NomChamp + "=@1",
                                                                          valeurRetournee));
                        if (objet.ReadIfExists(filtre))
                        {
                            return(new CReferenceObjetDonnee(objet));
                        }
                    }
                }
            }
            return(null);
        }
コード例 #7
0
        internal void CreateVariable(CObjetDonnee objet)
        {
            CVariableDynamiqueSelectionObjetDonnee variable = new CVariableDynamiqueSelectionObjetDonnee(Macro);

            if (objet != null)
            {
                variable.Nom = objet.DescriptionElement.Trim().Replace("[", "-").Replace("]", "-");
            }
            else
            {
                variable.Nom = "V" + variable.IdVariable;
            }
            CFiltreDynamique filtre = new CFiltreDynamique(Macro, Macro.ContexteDonnee);

            filtre.TypeElements          = TypeObjet;
            variable.FiltreSelection     = filtre;
            variable.ExpressionRetournee = new C2iExpressionThis(TypeObjet);
            string strField = DescriptionFieldAttribute.GetDescriptionField(TypeObjet, "DescriptionElement");

            if (strField != "")
            {
                CDefinitionProprieteDynamiqueDotNet def = new CDefinitionProprieteDynamiqueDotNet(
                    strField,
                    strField,
                    new CTypeResultatExpression(typeof(string), false),
                    false,
                    true,
                    "");
                variable.ExpressionAffichee = new C2iExpressionChamp(def);
            }
            Macro.AddVariable(variable);
            Macro.SetInitialValue(variable, objet as CObjetDonneeAIdNumerique);
            m_strIdVariableAssociee = variable.IdVariable;
            CDefinitionProprieteDynamiqueVariableDynamique defSource = new CDefinitionProprieteDynamiqueVariableDynamique(variable);

            FormuleSelectionObjet = new C2iExpressionChamp(defSource);
        }
コード例 #8
0
        /// //////////////////////////////////////////
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] listeParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CDbKey dbKeyIdChamp    = null;
                object valeurRetournee = null;
                //TESTDBKEYOK : le premier paramètre peut être un Id ou un UniversalId de champ
                if (listeParametres.Length == 2)
                {
                    if (listeParametres[0] is int)
                    {
                        int nIdChamp = (int)listeParametres[0];
                        dbKeyIdChamp = CDbKey.GetNewDbKeyOnIdAUtiliserPourCeuxQuiNeGerentPasLeDbKey(nIdChamp);
                    }
                    else
                    {
                        dbKeyIdChamp = CDbKey.CreateFromStringValue((string)listeParametres[0]);
                    }

                    valeurRetournee = listeParametres[1];
                }

                if (listeParametres.Length == 1)
                {
                    //1 seul paramètre, ce doit être une expression variable avec une variable champ
                    C2iExpressionChamp exChamp = Parametres2i[0] as C2iExpressionChamp;
                    if (exChamp != null)
                    {
                        CDefinitionProprieteDynamiqueChampCustom def = exChamp.DefinitionPropriete as CDefinitionProprieteDynamiqueChampCustom;
                        if (def != null)
                        {
                            dbKeyIdChamp = def.DbKeyChamp;
                        }
                    }
                    valeurRetournee = listeParametres[0];
                }
                if (valeurRetournee == null || dbKeyIdChamp == null)
                {
                    result.Data = "";
                    return(result);
                }

                CContexteDonnee contexteDonnee = (CContexteDonnee)ctx.GetObjetAttache(typeof(CContexteDonnee));
                if (contexteDonnee == null)
                {
                    contexteDonnee = new CContexteDonnee(CSessionClient.GetSessionUnique().IdSession, true, false);
                    ctx.AttacheObjet(typeof(CContexteDonnee), contexteDonnee);
                }
                CChampCustom champ = new CChampCustom(contexteDonnee);
                if (champ.ReadIfExists(dbKeyIdChamp))
                {
                    if (!champ.IsChoixParmis())
                    {
                        result.Data = valeurRetournee.ToString();
                    }
                    else
                    {
                        foreach (CValeurChampCustom valeur in champ.ListeValeurs)
                        {
                            if (valeur.Value.Equals(valeurRetournee))
                            {
                                result.Data = valeur.Display;
                                return(result);
                            }
                        }
                    }
                }
                result.Data = "";
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }
コード例 #9
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantExpression(CFiltreDynamique filtre)
        {
            CResultAErreur result = CResultAErreur.True;
            //Vérifie que l'expression condition est OK
            CContexteEvaluationExpression contexteEvaluation = new CContexteEvaluationExpression(filtre);

            result = ConditionApplication.Eval(contexteEvaluation);
            if (!result)
            {
                result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                return(result);
            }

            if ((result.Data is bool && !((bool)result.Data)) || result.Data.ToString() == "0")
            {
                result.Data = null;
                return(result);
            }
            result = ExpressionValeur.Eval(contexteEvaluation);
            object valeur = result.Data;


            C2iExpression expChamp = new C2iExpressionChamp(Champ);

            C2iExpression expOp     = null;
            C2iExpression expRacine = null;

            switch (IdOperateur)
            {
            case CComposantFiltreOperateur.c_IdOperateurEgal:
                expOp     = new C2iExpressionEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurContains:
                expOp     = new C2iExpressionContient();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurDifferent:
                expOp     = new C2iExpressionDifferent();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurIn:
                expOp     = new C2iExpressionDans();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurInf:
                expOp     = new C2iExpressionInferieur();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurInfEgal:
                expOp     = new C2iExpressionInferieurOuEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurLike:
                expOp = new C2iExpressionMatchRegex();
                if (valeur != null)
                {
                    valeur = GetRegExFromLike(valeur.ToString());
                }
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurNotIn:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionDans();
                expRacine.Parametres.Add(expOp);
                break;

            case CComposantFiltreOperateur.c_IdOperateurNotLike:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionMatchRegex();
                if (valeur != null)
                {
                    valeur = GetRegExFromLike(valeur.ToString());
                }
                expRacine.Parametres.Add(expOp);
                break;

            case CComposantFiltreOperateur.c_IdOperateurSup:
                expOp     = new C2iExpressionSuperieur();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurSuperieurOuEgal:
                expOp     = new C2iExpressionSuperieurOuEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurWithout:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionContient();
                expRacine.Parametres.Add(expOp);
                break;

            default:
                result.EmpileErreur(I.T("Can not use this operator in filter|20011"));
                return(result);
            }

            if (valeur is IList || valeur is Array)
            {
                C2iExpressionListe lst = new C2iExpressionListe();
                foreach (object val in (IEnumerable)valeur)
                {
                    lst.Parametres.Add(new C2iExpressionConstante(val));
                }
                valeur = lst;
            }
            else
            {
                valeur = new C2iExpressionConstante(valeur);
            }

            if (expChamp.TypeDonnee.IsArrayOfTypeNatif)
            {
                //Recherche dans des données filles (tableau)
                C2iExpressionSelectFirst expSelFirst = new C2iExpressionSelectFirst();
                expSelFirst.Parametres.Add(expRacine);
                C2iExpressionObjet expObjet = new C2iExpressionObjet();
                expObjet.Parametres.Add(expChamp);
                expObjet.Parametres.Add(expSelFirst);
                expChamp = new C2iExpressionThis();
                C2iExpression expNull = new C2iExpressionNull();
                expNull.Parametres.Add(expObjet);
                C2iExpression expNon = new C2iExpressionNon();
                expNon.Parametres.Add(expNull);
                expRacine = expNon;
            }

            expOp.Parametres.Add(expChamp);
            expOp.Parametres.Add(valeur);
            result.Data = expRacine;
            string strExp = expRacine.GetString();

            return(result);
        }