Пример #1
0
        //--------------------------------------------------------------
        public List <CReferenceObjetDependant> GetDependances(CEntitiesManager manager, CObjetDonnee objet)
        {
            objet.Refresh();
            List <CReferenceObjetDependant> lst = new List <CReferenceObjetDependant>();

            if (objet == null)
            {
                return(lst);
            }
            Type tp = objet.GetType();

            foreach (PropertyInfo info in tp.GetProperties())
            {
                if (info.GetCustomAttribute <BlobDecoderAttribute>(true) != null)
                {
                    try
                    {
                        DynamicFieldAttribute df = info.GetCustomAttribute <DynamicFieldAttribute>();
                        string        strNomProp = df == null?info.Name:df.NomConvivial;
                        MethodInfo    methode    = info.GetGetMethod();
                        List <CDbKey> lstKeys    = new List <CDbKey>();
                        using (CDbKeyReaderTracker tracker = new CDbKeyReaderTracker())
                        {
                            if (methode != null)
                            {
                                methode.Invoke(objet, new object[0]);
                            }
                            ;
                            lstKeys.AddRange(tracker.TrackedKeys);
                        }
                        foreach (CDbKey key in lstKeys)
                        {
                            Type tpChild = manager.GetTypeForUniversalId(key.StringValue);
                            if (tpChild != null && !manager.ConfigurationRecherche.IsIgnore(tpChild))
                            {
                                lst.Add(new CReferenceObjetDependant(strNomProp, tpChild, key));
                            }
                        }
                    }
                    catch { }
                }
            }
            return(lst);
        }
Пример #2
0
        //----------------------------------------------------------------------
        public List <CReferenceObjetDependant> GetDependances(CEntitiesManager manager, CObjetDonnee objet)
        {
            List <CReferenceObjetDependant> lstRefs = new List <CReferenceObjetDependant>();

            if (objet == null)
            {
                return(lstRefs);
            }
            Type tpObjet = objet.GetType();
            List <MethodInfo> lstMethodes = new List <MethodInfo>();

            foreach (MemberInfo member in from m in tpObjet.GetMembers() where
                     m.GetCustomAttribute <DependanceObjetDonneeAttribute>(true) != null
                     select m)
            {
                MethodInfo method = member as MethodInfo;
                if (method == null && member is PropertyInfo)
                {
                    method = ((PropertyInfo)member).GetGetMethod();
                }
                string strNom = member.Name;
                DynamicFieldAttribute fieldAtt = member.GetCustomAttribute <DynamicFieldAttribute>(true);
                if (fieldAtt != null)
                {
                    strNom = fieldAtt.NomConvivial;
                }
                if (method != null)
                {
                    try
                    {
                        CObjetDonnee dep = method.Invoke(objet, new object[0]) as CObjetDonnee;
                        if (dep != null)
                        {
                            lstRefs.Add(new CReferenceObjetDependant(strNom, dep));
                        }
                    }
                    catch {}
                }
            }
            return(lstRefs);
        }
Пример #3
0
        public CDefinitionProprieteDynamique[] GetDefinitionsChamps(
            CObjetPourSousProprietes objet,
            CDefinitionProprieteDynamique defParente)
        {
            if (objet == null)
            {
                return(new CDefinitionProprieteDynamique[0]);
            }
            Type tp = objet.TypeAnalyse;

            if (tp == null)
            {
                return(new CDefinitionProprieteDynamique[0]);
            }
            CDefinitionProprieteDynamique[] defCache = null;
            if (m_cache.TryGetValue(tp, out defCache))
            {
                return(defCache);
            }
            List <CDefinitionProprieteDynamique> lstDefs = new List <CDefinitionProprieteDynamique>();

            Dictionary <string, PropertyInfo> dicInfos = new Dictionary <string, PropertyInfo>();

            foreach (PropertyInfo info in tp.GetProperties())
            {
                object[] attribs = info.GetCustomAttributes(typeof(DynamicFieldAttribute), true);
                if (attribs.Length == 0)
                {
                    attribs = info.GetCustomAttributes(typeof(DynamicChildsAttribute), true);
                }
                if (attribs.Length == 1)
                {
                    dicInfos[info.Name] = info;
                }
            }
            foreach (Type tpInterface in tp.GetInterfaces())
            {
                foreach (PropertyInfo info in tpInterface.GetProperties())
                {
                    if (!dicInfos.ContainsKey(info.Name))
                    {
                        object[] attribs = info.GetCustomAttributes(typeof(DynamicFieldAttribute), true);
                        if (attribs.Length == 0)
                        {
                            attribs = info.GetCustomAttributes(typeof(DynamicChildsAttribute), true);
                        }
                        if (attribs.Length == 1)
                        {
                            dicInfos[info.Name] = info;
                        }
                    }
                }
            }

            //Proprietes
            foreach (PropertyInfo info in dicInfos.Values)
            {
                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            = CFournisseurGeneriqueProprietesDynamiques.HasSubProperties(tpProp);
                    CDefinitionProprieteDynamique def = new CDefinitionProprieteDynamiqueDotNet(
                        attrib.NomConvivial,
                        info.Name,
                        new CTypeResultatExpression(tpProp, bIsArray),
                        bHasSubProprietes,
                        bReadOnly,
                        attrib.Rubrique);
                    lstDefs.Add(def);
                }
                attribs = info.GetCustomAttributes(typeof(DynamicChildsAttribute), true);
                {
                    if (attribs.Length == 1)
                    {
                        DynamicChildsAttribute        attrib = (DynamicChildsAttribute)attribs[0];
                        CDefinitionProprieteDynamique def    = new CDefinitionProprieteDynamiqueDotNet(
                            attrib.NomConvivial,
                            info.Name,
                            new CTypeResultatExpression(attrib.TypeFils, true),
                            true,
                            true,
                            attrib.Rubrique);
                        lstDefs.Add(def);
                    }
                }
            }
            defCache    = lstDefs.ToArray();
            m_cache[tp] = defCache;
            return(defCache);
        }
Пример #4
0
        private void FillListeChamps()
        {
            m_panelFormules.SuspendDrawing();
            foreach (Control ctrl in m_panelFormules.Controls)
            {
                if (ctrl is CEditeurFormuleNommee)
                {
                    ctrl.Visible = false;
                    m_reserveEditeurs.Add(ctrl);
                }
            }
            ArrayList lst = new ArrayList();

            if (m_cmbTypeEntite.SelectedValue is Type && m_cmbTypeEntite.SelectedValue != typeof(DBNull))
            {
                Type tp = (Type)m_cmbTypeEntite.SelectedValue;
                foreach (PropertyInfo info in tp.GetProperties())
                {
                    if (info.GetSetMethod() != null)
                    {
                        object[] attrs = info.GetCustomAttributes(typeof(DynamicFieldAttribute), true);
                        if (attrs.Length > 0)
                        {
                            DynamicFieldAttribute attr    = (DynamicFieldAttribute)attrs[0];
                            CFormuleForPropriete  formule = new CFormuleForPropriete(info.Name, attr.NomConvivial);
                            formule.Formule = ActionCreerEntite.GetFormuleForPropriete(info.Name);
                            lst.Add(formule);
                        }
                    }
                }
            }
            lst.Sort();
            m_listeExpressions = lst;
            int nY = 0;

            foreach (CFormuleForPropriete formule in lst)
            {
                CEditeurFormuleNommee editeur = null;
                if (m_reserveEditeurs.Count > 0)
                {
                    editeur = (CEditeurFormuleNommee)m_reserveEditeurs[0];
                    m_reserveEditeurs.Remove(editeur);
                }
                else
                {
                    editeur        = new CEditeurFormuleNommee();
                    editeur.Parent = m_panelFormules;
                }
                editeur.Visible            = true;
                editeur.Width              = m_panelFormules.ClientRectangle.Width;
                editeur.Location           = new Point(0, nY);
                formule.Editeur            = editeur;
                editeur.TextFormule.Enter += new EventHandler(OnEnterZoneFormule);
                editeur.Init(m_wndAideFormule.FournisseurProprietes, m_wndAideFormule.ObjetInterroge);
                editeur.Libelle  = formule.NomConvivial;
                editeur.TabIndex = nY;
                nY += editeur.Size.Height + 1;
                editeur.Formule = formule.Formule;
            }
            m_panelFormules.ResumeDrawing();
        }
Пример #5
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*/);
                }
            }
        }