示例#1
0
 protected virtual void FieldHandler_OnUnProvisioned(FieldProvisionHandler <TContext, TEntity> handler, Field field)
 {
     Debug.WriteLine($"Field '{field.Title}' has been unprovisioned on {handler.Field.Level}.");
     if (_fields != null && _fields.ContainsKey(handler))
     {
         _fields.Remove(handler);
     }
 }
示例#2
0
        private void SetFieldToList(Field field, FieldProvisionHandler <TContext, TEntity> fieldHandler, ProvisionLevel level, bool forceOverwrite)
        {
            if (fieldHandler != null && (fieldHandler.Field.Level == ProvisionLevel.Web || level == ProvisionLevel.Web))
            {
                Field existField = _list.Fields.GetByInternalNameOrTitle(fieldHandler.Field.Name);
                _list.Context.Load(existField);
                try
                {
                    _list.Context.ExecuteQuery();
                }
                catch (Exception)
                {
                    existField = null;
                }
                if (existField == null)
                {
                    if (forceOverwrite || fieldHandler.Field.Behavior == ProvisionBehavior.Overwrite)
                    {
                        if (typeof(CalculatedFieldAttribute).IsAssignableFrom(fieldHandler.Field.GetType()))
                        {
                            string fieldRefs = (fieldHandler.Field as CalculatedFieldAttribute).FieldRefs == null
                                ? null
                                : string.Join("", (fieldHandler.Field as CalculatedFieldAttribute).FieldRefs.Select(fieldRef => new Caml.CamlFieldRef()
                            {
                                Name = fieldRef
                            }.ToString()));
                            string formula = (fieldHandler.Field as CalculatedFieldAttribute).Formula;

                            if (!string.IsNullOrEmpty(fieldRefs) && !string.IsNullOrEmpty(formula))
                            {
                                var refFields = new List <Field>();
                                foreach (string fieldName in (fieldHandler.Field as CalculatedFieldAttribute).FieldRefs)
                                {
                                    var refField = _list.Fields.GetByInternalNameOrTitle(fieldName);
                                    _list.Context.Load(refField, f => f.Title, f => f.InternalName, f => f.Id);
                                    refFields.Add(refField);
                                }
                                _list.Context.ExecuteQuery();
                                foreach (Field refField in refFields)
                                {
                                    formula = formula.Replace($"[{refField.InternalName}]", $"[{refField.Title}]");
                                }
                                (fieldHandler.Field as CalculatedFieldAttribute).Formula = formula;
                                field.ReplaceFormula(formula, (fieldHandler.Field as CalculatedFieldAttribute).FieldRefs);
                            }
                        }
                    }

                    Field newField = _list.Fields.Add(field);
                    if (forceOverwrite || fieldHandler.Field.Behavior == ProvisionBehavior.Overwrite)
                    {
                        newField = fieldHandler.ApplyField(newField);
                        newField.Update();
                    }
                    newField.Context.ExecuteQuery();
                }
            }
        }
示例#3
0
        private void RetrieveHandlers()
        {
            ProvisionHandlers = new List <SpProvisionHandler <TContext, TEntity> >();
            var contentTypes = AttributeHelper.GetCustomAttributes <TEntity, ContentTypeAttribute>(true);
            var list         = AttributeHelper.GetCustomAttributes <TEntity, ListAttribute>(false).FirstOrDefault();
            var fields       = AttributeHelper.GetFieldAttributes <TEntity, FieldAttribute>().Concat(AttributeHelper.GetPropertyAttributes <TEntity, FieldAttribute>()).OrderBy(f => f.Value.Order);

            if (list != null)
            {
                var listHandler = new ListProvisionHandler <TContext, TEntity>(list, this);
                listHandler.OnProvisioning += ListHandler_OnProvisioning;
                listHandler.OnProvisioned  += ListHandler_OnProvisioned;
                ProvisionHandlers.Add(listHandler);
            }
            foreach (var contentType in contentTypes)
            {
                if (contentType != null)
                {
                    var contentTypeHandler = new ContentTypeProvisionHandler <TContext, TEntity>(contentType, list, this);
                    contentTypeHandler.OnProvisioned  += ContentTypeHandler_OnProvisioned;
                    contentTypeHandler.OnProvisioning += ContentTypeHandler_OnProvisioning;
                    ProvisionHandlers.Add(contentTypeHandler);
                }
            }

            foreach (var field in fields.OrderBy(f => typeof(CalculatedFieldAttribute).IsAssignableFrom(f.Value.GetType()) ? 1 : 0))
            {
                if (typeof(DependentLookupFieldAttribute).IsAssignableFrom(field.Value.GetType()))
                {
                    continue;
                }

                //if (typeof(LookupFieldAttribute).IsAssignableFrom(field.Value.GetType()))
                //{
                //}

                Type valueType = null;
                if (field.Key is PropertyInfo)
                {
                    valueType = (field.Key as PropertyInfo).PropertyType;
                }
                else if (field.Key is FieldInfo)
                {
                    valueType = (field.Key as FieldInfo).FieldType;
                }
                var fieldHandler = new FieldProvisionHandler <TContext, TEntity>(field.Value,
                                                                                 AttributeHelper.GetCustomAttributes <TEntity, ContentTypeAttribute>(false).FirstOrDefault(), list, this, valueType);
                fieldHandler.OnProvisioned  += FieldHandler_OnProvisioned;
                fieldHandler.OnProvisioning += FieldHandler_OnProvisioning;

                ProvisionHandlers.Add(fieldHandler);
            }
        }
示例#4
0
        private void RetrieveHandlers()
        {
            ProvisionHandlers = new List <SpProvisionHandler <TContext, TEntity> >();
            var contentTypes = AttributeHelper.GetCustomAttributes <TEntity, ContentTypeAttribute>(true);
            var list         = AttributeHelper.GetCustomAttributes <TEntity, ListAttribute>(false).FirstOrDefault();
            var fields       = AttributeHelper.GetFieldAttributes <TEntity, FieldAttribute>().Concat(AttributeHelper.GetPropertyAttributes <TEntity, FieldAttribute>()).OrderBy(f => f.Value.Order);

            if (list != null && list.Behavior != ProvisionBehavior.None)
            {
                var listHandler = new ListProvisionHandler <TContext, TEntity>(list, this);
                listHandler.OnProvisioning   += ListHandler_OnProvisioning;
                listHandler.OnProvisioned    += ListHandler_OnProvisioned;
                listHandler.OnUnProvisioning += ListHandler_OnUnProvisioning;
                listHandler.OnUnProvisioned  += ListHandler_OnUnProvisioned;

                ProvisionHandlers.Add(listHandler);
            }

            foreach (var contentType in contentTypes)
            {
                if (contentType != null && contentType.Behavior != ProvisionBehavior.None)
                {
                    var contentTypeHandler = new ContentTypeProvisionHandler <TContext, TEntity>(contentType, list, this);
                    contentTypeHandler.OnProvisioned    += ContentTypeHandler_OnProvisioned;
                    contentTypeHandler.OnProvisioning   += ContentTypeHandler_OnProvisioning;
                    contentTypeHandler.OnUnProvisioned  += ContentTypeHandler_OnUnProvisioned;
                    contentTypeHandler.OnUnProvisioning += ContentTypeHandler_OnUnProvisioning;
                    ProvisionHandlers.Add(contentTypeHandler);
                }
            }

            foreach (var field in fields.OrderBy(f => typeof(CalculatedFieldAttribute).IsAssignableFrom(f.Value.GetType()) ? 1 : 0))
            {
                if (field.Value.Behavior == ProvisionBehavior.None)
                {
                    continue;
                }

                if (typeof(DependentLookupFieldAttribute).IsAssignableFrom(field.Value.GetType()))
                {
                    continue;
                }

                //if (typeof(LookupFieldAttribute).IsAssignableFrom(field.Value.GetType()))
                //{
                //}

                Type valueType = null;
                if (field.Key is PropertyInfo)
                {
                    valueType = (field.Key as PropertyInfo).PropertyType;
                }
                else if (field.Key is FieldInfo)
                {
                    valueType = (field.Key as FieldInfo).FieldType;
                }

                if (field.Value.DataType == FieldType.Lookup)
                {
                    if (/*!typeof(IListItemEntity).IsAssignableFrom(valueType) &&*/ !typeof(ISpEntityLookup).IsAssignableFrom(valueType) && !typeof(ISpEntityLookupCollection).IsAssignableFrom(valueType))
                    {
                        continue;
                    }
                }

                var duplicateField = ProvisionHandlers.OfType <FieldProvisionHandler <TContext, TEntity> >().FirstOrDefault(f => f.Field.Name == field.Value.Name);

                if (duplicateField != null)
                {
                    throw new Exception($"Duplicate field: {duplicateField.Field}.");
                }

                var fieldHandler = new FieldProvisionHandler <TContext, TEntity>(field.Value,
                                                                                 AttributeHelper.GetCustomAttributes <TEntity, ContentTypeAttribute>(true).LastOrDefault(), list, this, valueType);
                fieldHandler.OnProvisioned    += FieldHandler_OnProvisioned;
                fieldHandler.OnProvisioning   += FieldHandler_OnProvisioning;
                fieldHandler.OnUnProvisioned  += FieldHandler_OnUnProvisioned;
                fieldHandler.OnUnProvisioning += FieldHandler_OnUnProvisioning;

                ProvisionHandlers.Add(fieldHandler);
            }
        }
示例#5
0
 protected virtual void FieldHandler_OnUnProvisioning(FieldProvisionHandler <TContext, TEntity> handler, Field field)
 {
 }
示例#6
0
 protected virtual void FieldHandler_OnProvisioned(FieldProvisionHandler <TContext, TEntity> handler, Field field)
 {
     Debug.WriteLine($"Field '{field.Title}' has been provisioned on {handler.Field.Level}.");
     _fields.Add(handler, field);
 }
示例#7
0
 protected virtual void FieldHandler_OnProvisioned(FieldProvisionHandler <TContext, TEntity> handler, Field field)
 {
     _fields.Add(field, handler);
 }