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