protected override void OnActivated() { base.OnActivated(); if (Application.Info.GetChildNode("Options").GetAttributeBoolValue(CreateIndexForAllMembers)) { Active["RunOnlyOnce"] = false; var indexAdded = new List<ITypeInfo>(); foreach (var classInfoNodeWrapper in new ApplicationNodeWrapper(Application.Info).BOModel.Classes.Where(wrapper => wrapper.ClassTypeInfo.IsPersistent&&!wrapper.Node.GetAttributeBoolValue(SkipIndexing))) { foreach (var propertyInfoNodeWrapper in classInfoNodeWrapper.Properties) { var memberInfo = classInfoNodeWrapper.ClassTypeInfo.FindMember(propertyInfoNodeWrapper.Name); if (memberInfo != null && (!propertyInfoNodeWrapper.Node.GetAttributeBoolValue(SkipIndexing) && !Equals(memberInfo.MemberType, typeof (byte[])) && !memberInfo.IsAssociation)) { var findAttribute = memberInfo.FindAttribute<SizeAttribute>(); if (findAttribute != null && findAttribute.Size == SizeAttribute.Unlimited) continue; if (memberInfo.FindAttribute<NonIndexedAttribute>() != null) continue; if (memberInfo.FindAttribute<IndexedAttribute>() == null) { var args = new MemberInfoEventArgs(memberInfo); InvokeIndexAdding(args); if (!args.Handled) { if (!indexAdded.Contains(classInfoNodeWrapper.ClassTypeInfo)) indexAdded.Add(classInfoNodeWrapper.ClassTypeInfo); memberInfo.AddAttribute(new IndexedAttribute()); } } } } } // foreach (XPClassInfo typeInfo in dictionary.Classes) //// if (typeInfo.ClassType != null && typeInfo.ClassType.FullName.EndsWith("Contact")) // if (typeInfo.IsPersistent) // foreach (XPMemberInfo memberInfo in typeInfo.PersistentProperties) // { // if (!Equals(memberInfo.MemberType, typeof(byte[])) && !memberInfo.IsAssociation) // { // if (memberInfo.HasAttribute(typeof(SizeAttribute)) && // ((SizeAttribute)memberInfo.FindAttributeInfo(typeof(SizeAttribute))).Size == // SizeAttribute.Unlimited) // continue; // if (memberInfo.HasAttribute(typeof(NonIndexedAttribute))) // continue; // if (!memberInfo.HasAttribute(typeof(IndexedAttribute))) // { // var args = new MemberInfoEventArgs(memberInfo); // InvokeIndexAdding(args); // if (!args.Handled) // { // if (!indexAdded.Contains(typeInfo)) // indexAdded.Add(typeInfo); // memberInfo.AddAttribute(new IndexedAttribute()); // } // } // } // } if (indexAdded.Count>0) { var classInfos = new List<XPClassInfo>(); foreach (var typeInfo in indexAdded) classInfos.Add(ObjectSpace.Session.GetClassInfo(typeInfo.Type)); ObjectSpace.Session.DataLayer.UpdateSchema(false, classInfos.ToArray()); } } }
protected virtual void InvokeIndexAdding(MemberInfoEventArgs e) { EventHandler<MemberInfoEventArgs> adding = IndexAdding; if (adding != null) adding(this, e); }