//---------------------------------------------------------- /// <summary> /// Le data du result contient la valeur de la propriété pour l'objet /// </summary> /// <param name="objet"></param> /// <param name="strPropriete"></param> /// <returns></returns> public static string[] GetProprietesAccedees(Type typeSource, string strProprieteComplete) { string strSuitePropriete = ""; List <string> lstProps = new List <string>(); string strProprieteCompleteOriginale = strProprieteComplete; string strChemin = ""; do { strSuitePropriete = ""; string[] strProprietes = strProprieteComplete.Split('.'); string strPropriete = strProprietes[0]; if (strProprieteComplete.Length > strPropriete.Length) { strSuitePropriete = strProprieteComplete.Substring(strPropriete.Length + 1); } string strCleType = ""; string strProprieteSansCle = ""; if (CDefinitionMethodeDynamique.DecomposeNomProprieteUnique(strPropriete, ref strCleType, ref strProprieteSansCle)) { Type tpInterpreteur = null; if (m_tableCleTypeToTypeInterpreteur.TryGetValue(strCleType.ToUpper(), out tpInterpreteur)) { IInterpreteurProprieteDynamiqueAccedantADautresProprietes interpreteur = Activator.CreateInstance(tpInterpreteur) as IInterpreteurProprieteDynamiqueAccedantADautresProprietes; if (interpreteur != null) { CArbreDefinitionsDynamiques arbreProps = new CArbreDefinitionsDynamiques(null); interpreteur.AddProprietesAccedees(arbreProps, typeSource, strProprieteSansCle); foreach (string strProp in arbreProps.GetListeProprietesAccedees()) { lstProps.Add(strChemin + strProp); } } else { lstProps.Add(strChemin + strPropriete); } strChemin += strPropriete + "."; } else { strChemin += strPropriete + "."; } strProprieteComplete = strSuitePropriete; } else { return(lstProps.ToArray()); } }while (strSuitePropriete.Length > 0); return(lstProps.ToArray()); }
//---------------------------------------------------------- /// <summary> /// Le data du result contient la valeur de la propriété pour l'objet /// </summary> /// <param name="objet"></param> /// <param name="strPropriete"></param> /// <returns></returns> public static IOptimiseurGetValueDynamic GetOptimiseur(Type tp, string strProprieteComplete) { COptimiseurGetValueDynamicMultiple optimiseur = new COptimiseurGetValueDynamicMultiple(); string strSuitePropriete = ""; do { strSuitePropriete = ""; string[] strProprietes = strProprieteComplete.Split('.'); string strPropriete = strProprietes[0]; if (strProprieteComplete.Length > strPropriete.Length) { strSuitePropriete = strProprieteComplete.Substring(strPropriete.Length + 1); } string strCleType = ""; string strProprieteSansCle = ""; if (CDefinitionMethodeDynamique.DecomposeNomProprieteUnique(strPropriete, ref strCleType, ref strProprieteSansCle)) { strPropriete = strProprieteSansCle; Type tpInterpreteur = null; if (m_tableCleTypeToTypeInterpreteur.TryGetValue(strCleType.ToUpper(), out tpInterpreteur)) { IInterpreteurProprieteDynamique interpreteur = Activator.CreateInstance(tpInterpreteur) as IInterpreteurProprieteDynamique; if (interpreteur != null) { IOptimiseurGetValueDynamic sousOptim = interpreteur.GetOptimiseur(tp, strPropriete); if (sousOptim == null) { return(null); } optimiseur.AddOptimiseur(sousOptim); tp = optimiseur.GetTypeRetourne(); } } else { return(null); } strProprieteComplete = strSuitePropriete; } else { return(null); } }while (strSuitePropriete.Length > 0); return(optimiseur); }
public static CResultAErreur SetValue(object objet, string strPropriete, object valeur) { CResultAErreur result = CResultAErreur.True; //Nettoie la propriété pour enlever les éléments de fin qui ne sont pas //à prendre en compte lors d'un SetValue strPropriete = NettoieProprieteSetValue(strPropriete); //Récupère la valeur source int nPos = strPropriete.LastIndexOf('.'); string strLastProp = strPropriete; if (nPos > 0) { strLastProp = strPropriete.Substring(nPos + 1); string strPropDebut = strPropriete.Substring(0, nPos); result = GetValue(objet, strPropDebut); if (!result) { return(result); } objet = result.Data; } if (objet == null) { result.EmpileErreur(I.T("Trying to affect a value to a null object |20002")); return(result); } string strCleType = ""; string strProprieteSansCle = ""; if (CDefinitionMethodeDynamique.DecomposeNomProprieteUnique(strLastProp, ref strCleType, ref strProprieteSansCle)) { Type tpInterpreteur = null; if (m_tableCleTypeToTypeInterpreteur.TryGetValue(strCleType.ToUpper(), out tpInterpreteur)) { IInterpreteurProprieteDynamique interpreteur = Activator.CreateInstance(tpInterpreteur) as IInterpreteurProprieteDynamique; if (interpreteur != null) { return(interpreteur.SetValue(objet, strProprieteSansCle, valeur)); } } } result.EmpileErreur(I.T("Bad property format (@1)|20000", strPropriete)); return(result); }