/// //////////////////////////////////////////////////////
 private static string GetKeyChamp(CChampCustom champ)
 {
     //TESTDBKEYOK
     return(CInfoRelationComposantFiltreEntiteToChampEntite.GetKeyChamp(champ, true) + "." +
            CDefinitionProprieteDynamique.c_strCaractereStartCleType + c_strCleType +
            CDefinitionProprieteDynamique.c_strCaractereEndCleType +
            CInfoRelationEValeurChampCustomToDisplay.GetKeyChamp(champ));
 }
        //------------------------------------------------------------
        public override CResultAErreur GetValue(object objet, string strPropriete)
        {
            CResultAErreur result = CResultAErreur.True;

            result.Data = null;
            string strIdChamp     = null;
            bool   bEntiteToChamp = false;

            if (

                /*Pour compatibilité, avant modifs de décembre 2015, le nom du champ était en fait le même qu'une propriété champ custom.
                 * En décembre 2015, ajout de la possiblité de retourner les valeurs display de champ custom dans les requêtes,
                 * ce qui a changé le nom de la propriétés
                 * */
                CInfoRelationEntiteToValeurChampCustom.DecomposeNomPropriete(strPropriete, ref strIdChamp) ||
                /*fin pour compatiblité*/
                CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bEntiteToChamp))
            {
                IElementAChamps eltAChamps = objet as IElementAChamps;
                if (eltAChamps == null)
                {
                    return(result);
                }
                result.Data = eltAChamps.GetValeurChamp(strIdChamp);
                CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                if (result.Data != null && champ.ReadIfExists(CDbKey.CreateFromStringValue(strIdChamp)))
                {
                    if (!champ.IsChoixParmis())
                    {
                        result.Data = result.Data.ToString();
                    }
                    else
                    {
                        foreach (CValeurChampCustom valeur in champ.ListeValeurs)
                        {
                            if (valeur.Value.Equals(result.Data))
                            {
                                result.Data = valeur.Display;
                                return(result);
                            }
                        }
                    }
                }
            }
            else if (CInfoRelationEValeurChampCustomToDisplay.DecomposeNomPropriete(strPropriete, ref strIdChamp))
            {
                //Rien de spécial, il s'agit de la navigation vers la valeur du champ qui a déjà été reprise par le composant filtre to champ entité
                //car la propriété complète d'un definitionDisplayValue est donnée par GetKeyChamp qui ajoute un composant Element->ValeurChamp + ValeurChamp->Display value
                result.Data = objet;
            }

            return(result);
        }
        /// ////////////////////////////////////////////////////////////////
        public static void FindRelation(string strTable, Type type, ref CInfoRelationComposantFiltre relationTrouvee)
        {
            //TESTDBKEYTODO
            if (relationTrouvee != null)
            {
                return;
            }
            string strKeyChamp = "";

            if (DecomposeNomPropriete(strTable, ref strKeyChamp))
            {
                string strTableEntite = CContexteDonnee.GetNomTableForType(type);
                //Si strKeyChamp est un int, il s'agit d'un id de champ custom
                //ce cas peut se présenter lors de la relecture d'un filtre sous forme de
                //test par exemple dans une fonction ObjectList
                relationTrouvee = new CInfoRelationEValeurChampCustomToDisplay(CDbKey.CreateFromStringValue(strKeyChamp), strTableEntite);
            }
            //relationTrouvee = new CInfoRelationEValeurChampCustomToDisplay(relToChamp.DbKeyChamp, relToChamp.TableFille);
        }