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); } }
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(); } } }
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); } }
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); } }
protected virtual void FieldHandler_OnUnProvisioning(FieldProvisionHandler <TContext, TEntity> handler, Field field) { }
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); }
protected virtual void FieldHandler_OnProvisioned(FieldProvisionHandler <TContext, TEntity> handler, Field field) { _fields.Add(field, handler); }