//-----------------------------------------------------------
            private C2iRequeteAvancee GetRequete(CParametreInspirationProprieteDeType parametre)
            {
                C2iRequeteAvancee requete = null;

                if (m_dicRequetes.TryGetValue(parametre, out requete))
                {
                    return(requete);
                }
                if (parametre.Type == null)
                {
                    return(null);
                }
                CDefinitionProprieteDynamiqueChampCustom defCustom = parametre.Champ as CDefinitionProprieteDynamiqueChampCustom;

                if (defCustom != null)
                {
                    requete = GetRequeteChampCustom(parametre);
                }
                CDefinitionProprieteDynamiqueDotNet defDotNet = parametre.Champ as CDefinitionProprieteDynamiqueDotNet;

                if (defDotNet != null)
                {
                    requete = GetRequeteChampDotNet(parametre);
                }
                m_dicRequetes[parametre] = requete;
                return(requete);
            }
Пример #2
0
        public CRequeteRechercheObjet GetRequeteRecherche()
        {
            CDefinitionProprieteDynamiqueChampCustom defC = new CDefinitionProprieteDynamiqueChampCustom(this);

            return(new CRequeteRechercheObjet(
                       I.T("Search field '@1'|20038", Nom),
                       defC));
        }
Пример #3
0
        //-------------------------------------------------------------
        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 override bool DoesUse(object objetCherche)
        {
            if (base.DoesUse(objetCherche))
            {
                return(true);
            }
            CDefinitionProprieteDynamiqueChampCustom defChamp = objetCherche as CDefinitionProprieteDynamiqueChampCustom;

            if (defChamp != null && m_champCustom != null)
            {
                if (defChamp.DbKeyChamp == m_champCustom.DbKey)
                {
                    return(true);
                }
            }
            return(false);
        }
Пример #5
0
        //-------------------------------------------------
        private CResultAErreurType <C2iExpression> GetFormuleFinaleForEntite(CEntiteSnmp entite)
        {
            CResultAErreurType <C2iExpression> result = new CResultAErreurType <C2iExpression>();

            if (m_formulePolling == null)
            {
                result.EmpileErreur(I.T("Can not apply formula to entity @1|20254",
                                        entite.Libelle));
                return(result);
            }
            C2iExpression formule = CCloner2iSerializable.Clone(m_formulePolling) as C2iExpression;
            ArrayList     lst     = formule.ExtractExpressionsType(typeof(C2iExpressionChamp));

            foreach (C2iExpressionChamp exp in lst)
            {
                CDefinitionProprieteDynamiqueChampCustom def = exp.DefinitionPropriete as CDefinitionProprieteDynamiqueChampCustom;
                string strOID = null;
                if (def != null)
                {
                    CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                    if (champ.ReadIfExists(def.DbKeyChamp))
                    {
                        strOID = entite.GetFieldOID(champ.Id);
                        if (strOID.Trim().Length == 0)
                        {
                            strOID = null;
                        }
                        else
                        {
                            exp.DefinitionPropriete = new CDefinitionProprieteDynamiqueOID(strOID);
                        }
                    }
                }
                if (strOID == null)
                {
                    result.EmpileErreur(I.T("Can not find SNMP field for @1|20255", def.Nom));
                    return(result);
                }
            }
            result.Data = formule;
            return(result);
        }
Пример #6
0
        //-------------------------------------------------------------------
        //S'il n'y a pas de paramètres, lit tous les champs custom
        public static void ReadChampsCustom(CListeObjetsDonnees lstObjets, params int[] idsChamps)
        {
            if (lstObjets.Count == 0)
            {
                return;
            }
            IObjetDonneeAChamps eltAChamps = lstObjets[0] as IObjetDonneeAChamps;

            if (eltAChamps == null)
            {
                return;
            }
            if (idsChamps.Length == 0)
            {
                lstObjets.ReadDependances("RelationsChampsCustom");
                foreach (IObjetDonneeAChamps eltAChamp in lstObjets)
                {
                    SetTousChampsLus(eltAChamp);
                }
                return;
            }
            List <string> lstChamps = new List <string>();

            foreach (int nIdChamp in idsChamps)
            {
                CChampCustom champ = new CChampCustom(eltAChamps.ContexteDonnee);
                if (champ.ReadIfExists(nIdChamp))
                {
                    CDefinitionProprieteDynamiqueChampCustom def = new CDefinitionProprieteDynamiqueChampCustom(champ);
                    lstChamps.Add(def.NomPropriete);
                }
            }
            lstObjets.ReadDependances(lstChamps.ToArray());
            foreach (IObjetDonneeAChamps eltAChamp in lstObjets)
            {
                foreach (int nIdChamp in idsChamps)
                {
                    SetChampsLus(eltAChamp, nIdChamp);
                }
            }
        }
            //-----------------------------------------------------------
            private C2iRequeteAvancee GetRequeteChampCustom(CParametreInspirationProprieteDeType parametre)
            {
                CDefinitionProprieteDynamiqueChampCustom defChampCustom = parametre.Champ as CDefinitionProprieteDynamiqueChampCustom;

                if (defChampCustom == null || parametre.Type == null || defChampCustom.DbKeyChamp == null)
                {
                    return(null);
                }

                DataTable           table = new DataTable();
                DataRow             row   = table.NewRow();
                IObjetDonneeAChamps objet = Activator.CreateInstance(parametre.Type, new object[] { row }) as IObjetDonneeAChamps;

                if (objet != null)
                {
                    string            strTableValeurs = objet.GetNomTableRelationToChamps();
                    C2iRequeteAvancee requete         = new C2iRequeteAvancee();
                    requete.TableInterrogee = strTableValeurs;
                    requete.ListeChamps.Add(new C2iChampDeRequete("LABEL",
                                                                  new CSourceDeChampDeRequete(CRelationElementAChamp_ChampCustom.c_champValeurString),
                                                                  typeof(string),
                                                                  OperationsAgregation.None,
                                                                  true));
                    int nIdChamp = -1;
                    //TESTDBKEYOK SC 31/03/2014
                    if (defChampCustom.DbKeyChamp.IsNumericalId())
                    {
                        nIdChamp = (int)defChampCustom.DbKeyChamp.GetValeurInDb();
                    }
                    else
                    {
                        nIdChamp = CChampCustom.GetIdFromDbKey(defChampCustom.DbKeyChamp);
                    }
                    requete.FiltreAAppliquer = new CFiltreData(CChampCustom.c_champId + "=@1", nIdChamp);
                    return(requete);
                }
                return(null);
            }
Пример #8
0
        //---------------------------------------------------------------
        private void CalculeValeurs(IEnumerable <CDefinitionProprieteDynamique> lstChamps)
        {
            m_dicValeursSimples  = new Dictionary <CDefinitionProprieteDynamique, object>();
            m_dicValeursParentes = new Dictionary <CDefinitionProprieteDynamique, CValeursProprietes>();
            m_dicValeursFilles   = new Dictionary <CDefinitionProprieteDynamique, List <CValeursProprietes> >();
            if (m_objetAssocie == null)
            {
                return;
            }

            DataRowVersion oldVers = m_objetAssocie.VersionToReturn;

            m_objetAssocie.VersionToReturn = m_versionObjetStocke;

            m_strLibelleObjet = m_objetAssocie.DescriptionElement;


            HashSet <CDbKey> dicChampsAffectes = new HashSet <CDbKey>();
            //Optimisation des champs custom
            IElementAChamps eltAChamps = m_objetAssocie as IElementAChamps;

            if (eltAChamps != null)
            {
                foreach (CRelationElementAChamp_ChampCustom rel in eltAChamps.RelationsChampsCustom)
                {
                    dicChampsAffectes.Add(rel.ChampCustom.DbKey);
                }
            }


            CResultAErreur res = CResultAErreur.True;

            foreach (CDefinitionProprieteDynamique def in lstChamps)
            {
                if (IsChampCompatibleImport(m_objetAssocie.GetType(), def))
                {
                    try
                    {
                        bool bInterprete = true;
                        CDefinitionProprieteDynamiqueChampCustom defCust = def as CDefinitionProprieteDynamiqueChampCustom;
                        if (defCust != null)
                        {
                            bInterprete = dicChampsAffectes.Contains(defCust.DbKeyChamp);
                        }
                        if (bInterprete)
                        {
                            DateTime dt = DateTime.Now;
                            res = CInterpreteurProprieteDynamique.GetValue(m_objetAssocie, def);
                            TimeSpan sp = DateTime.Now - dt;
                            if (sp.TotalMilliseconds > 400)
                            {
                                dt = DateTime.Now;
                            }
                            if (res)
                            {
                                object obj = res.Data;
                                if (obj is CObjetDonnee)
                                {
                                    CValeursProprietes val = new CValeursProprietes((CObjetDonnee)obj, m_bAvecValeursOriginales);
                                    m_dicValeursParentes[def] = val;
                                }
                                else if (obj is IEnumerable && !(obj is string))
                                {
                                    List <CValeursProprietes> lst = new List <CValeursProprietes>();
                                    foreach (object valDeListe in (IEnumerable)obj)
                                    {
                                        if (valDeListe is CObjetDonnee)
                                        {
                                            lst.Add(new CValeursProprietes((CObjetDonnee)valDeListe, m_bAvecValeursOriginales));
                                        }
                                    }
                                    if (lst.Count > 0)
                                    {
                                        m_dicValeursFilles[def] = lst;
                                    }
                                }
                                else if (obj != null && C2iSerializer.IsObjetSimple(obj))
                                {
                                    m_dicValeursSimples[def] = obj;
                                }
                            }
                        }
                    }

                    catch { }
                }
            }
            if (m_bAvecValeursOriginales && m_objetAssocie.Row.RowState == DataRowState.Modified)
            {
                m_objetAssocie.VersionToReturn = DataRowVersion.Original;
                m_valeursOriginales            = new CValeursProprietes(m_objetAssocie, false);
            }
            m_objetAssocie.VersionToReturn = oldVers;
        }
Пример #9
0
        /// ///////////////////////////////////////////////////////////
        protected virtual void GetDefinitionsChamps(
            Type tp,
            int nProfondeur,
            ArrayList lstProps,
            string strCheminConvivial,
            string strCheminReel,
            CDefinitionProprieteDynamique definitionParente
            )
        {
            /*ITraducteurNomChamps traducteur = null;
             * if ( definitionParente is ITraducteurNomChamps )
             *      traducteur = (ITraducteurNomChamps)definitionParente;*/
            if (nProfondeur < 0)
            {
                return;
            }
            if (tp == null)
            {
                return;
            }

            //Proprietes
            foreach (PropertyInfo info in tp.GetProperties())
            {
                object[] attribs = info.GetCustomAttributes(typeof(DynamicFieldAttribute), true);
                if (attribs.Length == 1)
                {
                    DynamicFieldAttribute attrib = (DynamicFieldAttribute)attribs[0];
                    bool bReadOnly = info.GetSetMethod() == null;
                    Type tpProp    = info.PropertyType;
                    bool bIsArray  = tpProp.IsArray;
                    if (bIsArray)
                    {
                        tpProp = tpProp.GetElementType();
                    }
                    bool bHasSubProprietes = HasSubProperties(tpProp);
                    if (m_bAvecReadOnly || !bReadOnly || bHasSubProprietes)
                    {
                        CDefinitionProprieteDynamique def = new CDefinitionProprieteDynamiqueDotNet(
                            strCheminConvivial + attrib.NomConvivial,
                            strCheminReel + info.Name,
                            new CTypeResultatExpression(tpProp, bIsArray),
                            bHasSubProprietes,
                            bReadOnly,
                            attrib.Rubrique);
                        if (AddDefinition(lstProps, def /*, traducteur*/))
                        {
                            GetDefinitionsChamps(info.PropertyType, nProfondeur - 1, lstProps, strCheminConvivial + attrib.NomConvivial + ".", strCheminReel + info.Name + ".", def);
                        }
                    }
                }
                attribs = info.GetCustomAttributes(typeof(DynamicChildsAttribute), true);
                {
                    if (attribs.Length == 1)
                    {
                        DynamicChildsAttribute        attrib = (DynamicChildsAttribute)attribs[0];
                        CDefinitionProprieteDynamique def    = new CDefinitionProprieteDynamiqueDotNet(
                            strCheminConvivial + attrib.NomConvivial,
                            strCheminReel + info.Name,
                            new CTypeResultatExpression(attrib.TypeFils, true)
                            , true,
                            true,
                            attrib.Rubrique);
                        if (AddDefinition(lstProps, def /*, traducteur*/))
                        {
                            GetDefinitionsChamps(attrib.TypeFils, nProfondeur - 1, lstProps, strCheminConvivial + attrib.NomConvivial + ".", strCheminReel + info.Name + ".", def);
                        }
                    }
                }
            }

            //Champs custom
            CRoleChampCustom role = CRoleChampCustom.GetRoleForType(tp);

            if (role != null)
            {
                CListeObjetsDonnees listeChamps = CChampCustom.GetListeChampsForRole(ContexteDonneeCache, role.CodeRole);
                foreach (CChampCustom champ in listeChamps)
                {
                    CDefinitionProprieteDynamiqueChampCustom def = new CDefinitionProprieteDynamiqueChampCustom(champ);
                    if (champ.Categorie.Trim() != "")
                    {
                        def.Rubrique = champ.Categorie;
                    }
                    else
                    {
                        def.Rubrique = I.T("Complementary informations|59");
                    }
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }

            //Champs calculés
            if (AvecReadOnly)
            {
                CListeObjetsDonnees liste = new CListeObjetsDonnees(ContexteDonneeCache, typeof(CChampCalcule));
                liste.Filtre = new CFiltreData(CChampCalcule.c_champTypeObjets + "=@1", tp.ToString());
                foreach (CChampCalcule champ in liste)
                {
                    CDefinitionProprieteDynamiqueChampCalcule def = new CDefinitionProprieteDynamiqueChampCalcule(champ);
                    def.HasSubProperties = HasSubProperties(def.TypeDonnee.TypeDotNetNatif);
                    def.Rubrique         = I.T("Complementary informations|59");
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }

            //Méthodes
            if (m_bAvecMethodes && AvecReadOnly)
            {
                //Va chercher les propriétés
                foreach (MethodInfo methode in tp.GetMethods())
                {
                    object[] attribs = methode.GetCustomAttributes(typeof(DynamicMethodAttribute), true);
                    if (attribs.Length == 1)
                    {
                        DynamicMethodAttribute  attrib  = (DynamicMethodAttribute)attribs[0];
                        CTypeResultatExpression typeRes = new CTypeResultatExpression(methode.ReturnType, false);
                        if (methode.ReturnType.HasElementType)
                        {
                            typeRes = new CTypeResultatExpression(methode.ReturnType.GetElementType(), true);
                        }
                        CDefinitionProprieteDynamique def = new CDefinitionMethodeDynamique(
                            strCheminConvivial + methode.Name,
                            strCheminReel + methode.Name,
                            typeRes,
                            HasSubProperties(methode.ReturnType),
                            attrib.Descriptif,
                            attrib.InfosParametres);
                        def.Rubrique = I.T("Methods|58");
                        lstProps.Add(def);
                        GetDefinitionsChamps(methode.ReturnType, nProfondeur - 1, lstProps, strCheminConvivial + methode.Name + ".", strCheminReel + methode.Name + ".", def);
                    }
                }
                foreach (CMethodeSupplementaire methode in CGestionnaireMethodesSupplementaires.GetMethodsForType(tp))
                {
                    CDefinitionProprieteDynamique def = new CDefinitionMethodeDynamique(
                        strCheminConvivial + methode.Name,
                        strCheminReel + methode.Name,
                        new CTypeResultatExpression(methode.ReturnType, methode.ReturnArrayOfReturnType),
                        HasSubProperties(methode.ReturnType));
                    def.Rubrique = I.T("Methods|58");
                    lstProps.Add(def);
                    GetDefinitionsChamps(methode.ReturnType, nProfondeur - 1, lstProps, strCheminConvivial + methode.Name + ".", strCheminReel + methode.Name + ".", def);
                }
            }

            //Relations TypeID
            foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds)
            {
                if (relation.NomConvivialPourParent != "" && relation.IsAppliqueToType(tp))
                {
                    CDefinitionProprieteDynamiqueRelationTypeId def = new CDefinitionProprieteDynamiqueRelationTypeId(relation);
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }

            //Données ucmulées
            if (m_bAvecReadOnly)
            {
                CTypeDonneeCumulee[] donnees = GetTypesDonneesPourType(tp);
                foreach (CTypeDonneeCumulee typeDonnee in donnees)
                {
                    int nCle = 0;
                    foreach (CCleDonneeCumulee cle in typeDonnee.Parametre.ChampsCle)
                    {
                        if (cle.TypeLie == tp)
                        {
                            CDefinitionProprieteDynamiqueDonneeCumulee def =
                                new CDefinitionProprieteDynamiqueDonneeCumulee(
                                    typeDonnee,
                                    nCle);
                            AddDefinition(lstProps, def /*, traducteur*/);
                            break;
                        }
                    }
                }
            }

            //Liens sur champs custom fils
            if (m_bAvecReadOnly)
            {
                //Liens sur champs custom
                CListeObjetsDonnees listeChamps = new CListeObjetsDonnees(ContexteDonneeCache, typeof(CChampCustom));
                listeChamps.Filtre = new CFiltreData(
                    CChampCustom.c_champTypeObjetDonnee + "=@1",
                    tp.ToString());
                foreach (CChampCustom champ in listeChamps)
                {
                    CDefinitionProprieteDynamiqueChampCustomFils def = new CDefinitionProprieteDynamiqueChampCustomFils(
                        champ);
                    if (champ.Categorie.Trim() != "")
                    {
                        def.Rubrique = champ.Categorie;
                    }
                    else
                    {
                        def.Rubrique = I.T("Complementary informations|59");
                    }
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }

            //Liens par CListeEntite
            if (m_bAvecReadOnly)
            {
                CListeObjetsDonnees listeEntites = new CListeObjetsDonnees(ContexteDonneeCache, typeof(CListeEntites));
                listeEntites.Filtre = new CFiltreData(
                    CListeEntites.c_champTypeElementSourceDeRecherche + "=@1",
                    tp.ToString());
                foreach (CListeEntites liste in listeEntites)
                {
                    CDefinitionProprieteDynamiqueListeEntites def = new CDefinitionProprieteDynamiqueListeEntites(liste);
                    def.Rubrique = I.T("Lists|60");
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }
        }
Пример #10
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);
        }
        /// ///////////////////////////////////////////////////////////
        protected virtual void GetDefinitionsChamps(Type tp, int nProfondeur, ArrayList lstProps, string strCheminConvivial, string strCheminReel, CDefinitionProprieteDynamique defParente)
        {
            /*ITraducteurNomChamps traducteur = null;
             * if ( defParente is ITraducteurNomChamps )
             *      traducteur = (ITraducteurNomChamps)defParente;*/
            if (nProfondeur < 0)
            {
                return;
            }

            CStructureTable structure = null;

            try
            {
                structure = CStructureTable.GetStructure(tp);
            }
            catch
            {
                return;
            }
            foreach (CInfoChampTable info in structure.Champs)
            {
                //Trouve la méthode correspondante

                //18/09 bug : si un classe générique surcharge une propriété de sa classe de base,
                //GetProperty retourne une erreur sur cette propriété
                PropertyInfo propInfo = GetPropertySafe(tp, info.Propriete);
                if (propInfo != null)
                {
                    CDefinitionProprieteDynamique def = new CDefinitionProprieteDynamiqueDotNet(
                        strCheminConvivial + info.NomConvivial,
                        strCheminReel + info.Propriete,
                        new CTypeResultatExpression(propInfo.PropertyType, false), false, true,
                        ""
                        );
                    AddDefinition(lstProps, def /*, traducteur*/);
                    GetDefinitionsChamps(propInfo.PropertyType, nProfondeur - 1, lstProps, strCheminConvivial + info.NomConvivial + ".", strCheminReel + info.Propriete + ".", def);
                }
            }

            //Ajoute les relations parentes
            foreach (CInfoRelation relation in structure.RelationsParentes)
            {
                PropertyInfo propInfo = GetPropertySafe(tp, relation.Propriete);
                if (propInfo != null)
                {
                    CDefinitionProprieteDynamique def = new CDefinitionProprieteDynamiqueRelation(
                        strCheminConvivial + relation.NomConvivial,
                        strCheminReel + relation.Propriete,
                        relation,
                        new CTypeResultatExpression(propInfo.PropertyType, false));
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }
            //Ajoute les relations filles
            foreach (CInfoRelation relation in structure.RelationsFilles)
            {
                PropertyInfo propInfo = GetPropertySafe(tp, relation.Propriete);
                if (propInfo != null)
                {
                    object[] attribs = propInfo.GetCustomAttributes(typeof(RelationFilleAttribute), true);
                    if (attribs.Length != 0)
                    {
                        string   strNomConvivial = strCheminConvivial + relation.NomConvivial;
                        object[] attrsDynCh      = propInfo.GetCustomAttributes(typeof(DynamicChildsAttribute), true);
                        if (attrsDynCh.Length != 0)
                        {
                            DynamicChildsAttribute dynAtt = attrsDynCh[0] as DynamicChildsAttribute;
                            strNomConvivial = strCheminConvivial + dynAtt.NomConvivial;
                        }

                        Type tpFille = ((RelationFilleAttribute)attribs[0]).TypeFille;
                        //Pas les relations aux champs custom, elles sont gerées en dessous
                        //30/11/2011 stef : Euh, en fait, si, ça peut servir ! pour accélerer des filtres
                        /*if ( !tpFille.IsSubclassOf ( typeof(CRelationElementAChamp_ChampCustom) ))*/
                        AddDefinition(lstProps,
                                      new CDefinitionProprieteDynamiqueRelation(
                                          strNomConvivial,
                                          strCheminReel + relation.Propriete,
                                          relation,
                                          new CTypeResultatExpression(tpFille, true)) /*,
                                                                                       * traducteur*/);
                    }
                }
            }

            CRoleChampCustom role = CRoleChampCustom.GetRoleForType(tp);

            if (role != null)
            {
                CListeObjetsDonnees listeChamps = CChampCustom.GetListeChampsForRole(m_contexteDonneeCache, role.CodeRole);
                foreach (CChampCustom champ in listeChamps)
                {
                    CDefinitionProprieteDynamiqueChampCustom def = new CDefinitionProprieteDynamiqueChampCustom(champ);
                    AddDefinition(lstProps, def /*, traducteur*/);
                }
            }

            //Ajoute les relations TypeId
            foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds)
            {
                if (relation.NomConvivialPourParent != "" && relation.IsAppliqueToType(tp))
                {
                    AddDefinition(lstProps, new CDefinitionProprieteDynamiqueRelationTypeId(relation) /*, traducteur*/);
                }
            }

            //Ajoute les données cumulées
            CTypeDonneeCumulee[] donnees = CFournisseurPropDynStd.GetTypesDonneesPourType(tp);
            foreach (CTypeDonneeCumulee typeDonnee in donnees)
            {
                int nCle = 0;
                foreach (CCleDonneeCumulee cle in typeDonnee.Parametre.ChampsCle)
                {
                    if (cle.TypeLie == tp)
                    {
                        CDefinitionProprieteDynamiqueDonneeCumulee def =
                            new CDefinitionProprieteDynamiqueDonneeCumulee(
                                typeDonnee,
                                nCle);
                        AddDefinition(lstProps, def /*, traducteur*/);
                        break;
                    }
                }
            }

            //Liens sur champs custom fils
            //Liens sur champs custom
            CListeObjetsDonnees listeChampsFils = new CListeObjetsDonnees(m_contexteDonneeCache, typeof(CChampCustom));

            listeChampsFils.Filtre = new CFiltreData(
                CChampCustom.c_champTypeObjetDonnee + "=@1",
                tp.ToString());
            foreach (CChampCustom champ in listeChampsFils)
            {
                CDefinitionProprieteDynamiqueChampCustomFils def = new CDefinitionProprieteDynamiqueChampCustomFils(
                    champ);
                if (champ.Categorie.Trim() != "")
                {
                    def.Rubrique = champ.Categorie;
                }
                else
                {
                    def.Rubrique = I.T("Complementary informations|59");
                }
                AddDefinition(lstProps, def /*, traducteur*/);
            }
        }
Пример #12
0
        /// ///////////////////////////////////////////////////////////
        public object GetValue(object objetInterroge, string strPropriete)
        {
            CFournisseurPropDynStd fournisseur = new CFournisseurPropDynStd(false);

            if (objetInterroge == null)
            {
                return(null);
            }
            //Est-ce une propriété simple ?(majorité des cas )
            object     objetAInterroger = null;
            MemberInfo membre           = null;

            if (CInterpreteurTextePropriete.GetObjetFinalEtMemberInfo(objetInterroge, strPropriete, ref objetAInterroger, ref membre) && membre != null)
            {
                return(CInterpreteurTextePropriete.GetValue(objetAInterroger, membre));
            }

            //Bon pas de bol, c'est autre chose, il faut donc chercher ce que c'est
            Type   tp           = objetInterroge.GetType();
            string strPropDebut = strPropriete.Split('.')[0];
            object objetPremier = CInterpreteurTextePropriete.GetValue(objetInterroge, strPropDebut);

            if (objetPremier == null)
            {
                string strIdChamp = CDefinitionProprieteDynamiqueChampCustom.GetIdPropriete(strPropDebut);
                foreach (CDefinitionProprieteDynamique def in fournisseur.GetDefinitionsChamps(tp, 0))
                {
                    if (def.NomPropriete == strPropDebut ||
                        (strIdChamp != "" && def is CDefinitionProprieteDynamiqueChampCustom) &&
                        ((CDefinitionProprieteDynamiqueChampCustom)def).DbKeyChamp == CDbKey.CreateFromStringValue(strIdChamp))
                    {
                        objetPremier = GetValue(objetInterroge, def);
                        //Si la suite est une relation de la valeur champ vers l'objet, il ne faut pas
                        //traier la suite
                        if (strPropDebut != strPropriete)
                        {
                            string strSuiteTmp = strPropriete.Substring(strPropDebut.Length + 1);
                            if (CInfoRelationComposantFiltreChampToEntite.IsRelationFromChampToEntite(strSuiteTmp))
                            {
                                //On a déjà traité ce lien par GetValeurPropriété (qui retourne la valeur
                                //et nom pas le lien vers la valeur)
                                strPropDebut += "." + strPropriete.Split('.')[1];
                            }
                        }

                        break;
                    }
                }
            }
            if (objetPremier == null)
            {
                return(null);
            }
            if (strPropDebut == strPropriete)
            {
                return(objetPremier);
            }
            string strSuite = strPropriete.Substring(strPropDebut.Length + 1);

            return(GetValue(objetPremier, strSuite));
        }
Пример #13
0
 /// ////////////////////////////////////////////////////////////////
 public void ConvertNomProprieteFromIdToDbKey()
 {
     SetNomPropriete(CDefinitionProprieteDynamiqueChampCustom.ConvertNomProprieteFromIdToDbKey(NomPropriete));
 }