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(); } } }
/// ////////////////////////////////////////////////// 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); }
//------------------------------------------------------------- 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); }
//--------------------------------------------------- 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); }
//---------------------------------- 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); }
/// <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); }
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); }
/// ////////////////////////////////////////// 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); }
/// ////////////////////////////////////////////////// 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); }