示例#1
0
        public override void UnProvision(bool ignoreErrors = false, ProvisionLevel level = ProvisionLevel.Default)
        {
            base.UnProvision(ignoreErrors, level);

            var model = new ProjectProvisionModel <TContext>(Context);

            model.UnProvision(ignoreErrors, level);
        }
示例#2
0
        public override void UnProvision(bool ignoreErrors = false, ProvisionLevel level = ProvisionLevel.Default)
        {
            base.UnProvision(ignoreErrors, level);

            var model = Context.CreateModel <Department>();

            model.UnProvision(ignoreErrors, level);
        }
示例#3
0
        public override void Provision(bool forceOverwrite = false, ProvisionLevel level = ProvisionLevel.Default)
        {
            var model = new ProjectProvisionModel <TContext>(Context);

            model.Provision(forceOverwrite, level);

            base.Provision(forceOverwrite, level);
        }
示例#4
0
        public override void Provision(bool forceOverwrite = false, ProvisionLevel level = ProvisionLevel.Default)
        {
            var model = Context.CreateModel <Department>();

            model.Provision(forceOverwrite, level);

            base.Provision(forceOverwrite, level);
        }
示例#5
0
 public virtual void UnProvision(bool ignoreErrors = false, ProvisionLevel level = ProvisionLevel.Default)
 {
     if (ProvisionHandlers != null)
     {
         foreach (var provisionHandler in ProvisionHandlers)
         {
             if (provisionHandler != null)
             {
                 if (ignoreErrors)
                 {
                     try
                     {
                         provisionHandler.UnProvision(level);
                     }
                     catch { continue; }
                 }
                 else
                 {
                     provisionHandler.UnProvision(level);
                 }
             }
         }
     }
 }
示例#6
0
        private void SetContentTypeToList(ContentType contentType, ContentTypeProvisionHandler <TContext, TEntity> contentTypeHandler, ListProvisionHandler <TContext, TEntity> listHandler, ProvisionLevel level, Comparison <string> comparison)
        {
            if ((contentTypeHandler.ContentType.Level == ProvisionLevel.Web || level == ProvisionLevel.Web) &&
                _list != null && listHandler != null && listHandler.List.Behavior != ProvisionBehavior.None)
            {
                string ctName;
                string ctId             = contentType.Id.StringValue;
                var    listContentTypes = _list.Context.LoadQuery(_list.ContentTypes.Where(ct => ct.Id.StringValue == ctId ||
                                                                                           ct.Parent.Id.StringValue == ctId));
                ContentType listContentType;
                try
                {
                    _list.Context.ExecuteQuery();
                    listContentType = listContentTypes.FirstOrDefault();
                    if (listContentType != null)
                    {
                        ctName = listContentType.Name;
                    }
                }
                catch
                {
                    listContentType = null;
                }
                if (listContentType == null)
                {
                    listContentType = _list.ContentTypes.AddExistingContentType(contentType);
                    _list.Context.Load(listContentType);
                    _list.Context.ExecuteQuery();

                    if (_fields != null)
                    {
                        SetFieldLinks(contentType, _fields.Values, comparison);
                    }
                }
            }
        }
示例#7
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();
                }
            }
        }
示例#8
0
 private void SetFieldsToList(ListProvisionHandler <TContext, TEntity> listHandler, ProvisionLevel level, bool forceOverwrite)
 {
     if (_list != null && listHandler.List.Behavior != ProvisionBehavior.None && _fields != null)
     {
         foreach (var field in _fields)
         {
             SetFieldToList(field.Value, field.Key, level, forceOverwrite);
         }
     }
 }
示例#9
0
        public override void Provision(bool forceOverwrite, ProvisionLevel level)
        {
            if (ContentType != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                if (ContentType.Behavior == ProvisionBehavior.None)
                {
                    return;
                }

                if (level != ProvisionLevel.Default)
                {
                    //ContentType.Level = level;
                }
                else
                {
                    level = ContentType.Level;
                    if (level == ProvisionLevel.Default)
                    {
                        level = List != null ? ProvisionLevel.List : ProvisionLevel.Web;
                    }
                }

                var         context           = Model.Context.Context;
                Web         web               = context.Web;
                List        list              = null;
                ContentType parentContentType = null;
                ContentType contentType       = null;
                ContentType webContentType    = null;
                ContentType listContentType   = null;

                if (string.IsNullOrEmpty(ContentType.Id) && !string.IsNullOrEmpty(ContentType.ParentId))
                {
                    parentContentType = web.AvailableContentTypes.GetById(ContentType.ParentId);
                    //context.Load(parentContentType);
                    //context.ExecuteQuery();
                }
                if (List != null && List.Behavior != ProvisionBehavior.None)
                {
                    if (List.Id != default)
                    {
                        list = context.Web.Lists.GetById(List.Id);
                    }
                    else if (List.Url != null)
                    {
                        list = context.Web.GetList/*ByUrl*/ ($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                    }
                    else if (!string.IsNullOrEmpty(List.Title))
                    {
                        list = context.Web.Lists.GetByTitle(List.Title);
                    }
                }
                //if (list != null)
                //{
                //  context.Load(list);
                //  try
                //  {
                //    context.ExecuteQuery();
                //  }
                //  catch (Exception ex)
                //  {
                //    list = null;
                //  }
                //}

                var newContentType = !string.IsNullOrEmpty(ContentType.Name)
                    ? new ContentTypeCreationInformation()
                {
                    Id                = ContentType.Id,
                    Name              = ContentType.Name,
                    Group             = ContentType.Group,
                    ParentContentType = parentContentType
                } : null;

                string ctName = ContentType.Name;
                string ctId   = ContentType.Id;

                if (!string.IsNullOrEmpty(ctId))
                {
                    if (level == ProvisionLevel.List && list != null)
                    {
                        var listContentTypes = context.LoadQuery(list.ContentTypes.Where(ct => ct.Id.StringValue == ctId || ct.Parent.Id.StringValue == ctId));
                        try
                        {
                            context.ExecuteQuery();
                            listContentType = listContentTypes.FirstOrDefault();
                            if (listContentType != null)
                            {
                                ctName = listContentType.Name;
                            }
                        }
                        catch
                        {
                            listContentType = null;
                        }

                        if ((forceOverwrite || ContentType.Behavior == ProvisionBehavior.Overwrite) && listContentType != null)
                        {
                            if (!listContentType.ReadOnly && !listContentType.Sealed)
                            {
                                if (listContentType.Name != ContentType.Name || (!string.IsNullOrEmpty(ContentType.Group) && listContentType.Group != ContentType.Group))
                                {
                                    listContentType.Name  = ContentType.Name;
                                    listContentType.Group = ContentType.Group;
                                    OnProvisioning?.Invoke(this, listContentType);
                                    listContentType.Update(false);
                                }
                            }

                            if (!listContentType.Sealed)
                            {
                                OnProvisioned?.Invoke(this, listContentType);
                            }
                            return;
                        }
                    }
                    if (listContentType == null)
                    {
                        webContentType = web.AvailableContentTypes.GetById(ctId);
                        context.Load(webContentType);
                        try
                        {
                            context.ExecuteQuery();
                            ctName = webContentType.Name;
                        }
                        catch
                        {
                            webContentType = null;
                        }
                    }
                }
                else if (!string.IsNullOrEmpty(ctName))
                {
                    if (level == ProvisionLevel.List && list != null)
                    {
                        var listContentTypes = context.LoadQuery(list.ContentTypes.Where(ct => ct.Name == ctName));
                        try
                        {
                            context.ExecuteQuery();
                            listContentType = listContentTypes.FirstOrDefault();
                            if (listContentType != null)
                            {
                                ctName = listContentType.Name;
                            }
                        }
                        catch
                        {
                            listContentType = null;
                        }

                        if ((forceOverwrite || ContentType.Behavior == ProvisionBehavior.Overwrite) && listContentType != null)
                        {
                            if (!listContentType.ReadOnly && !listContentType.Sealed)
                            {
                                if (listContentType.Name != ContentType.Name || (!string.IsNullOrEmpty(ContentType.Group) && listContentType.Group != ContentType.Group))
                                {
                                    listContentType.Name  = ContentType.Name;
                                    listContentType.Group = ContentType.Group;
                                    OnProvisioning?.Invoke(this, listContentType);
                                    listContentType.Update(false);
                                }
                            }
                            if (!listContentType.Sealed)
                            {
                                OnProvisioned?.Invoke(this, listContentType);
                            }
                            return;
                        }
                    }
                    if (listContentType == null)
                    {
                        var webContentTypes = context.LoadQuery(web.AvailableContentTypes.Where(ct => ct.Name == ctName));
                        try
                        {
                            context.ExecuteQuery();
                            webContentType = webContentTypes.FirstOrDefault();
                        }
                        catch
                        {
                            webContentType = null;
                        }
                    }
                }

                if (level == ProvisionLevel.Web)
                {
                    if ((forceOverwrite || ContentType.Behavior == ProvisionBehavior.Overwrite) && webContentType != null /*&& webContentType.Group == ContentType.Group*/)
                    {
                        if (!webContentType.ReadOnly && !webContentType.Sealed)
                        {
                            if (webContentType.Name != ContentType.Name || (!string.IsNullOrEmpty(ContentType.Group) && webContentType.Group != ContentType.Group))
                            {
                                webContentType.Name  = ContentType.Name;
                                webContentType.Group = ContentType.Group;
                                OnProvisioning?.Invoke(this, webContentType);
                                webContentType.Update(false);
                            }
                        }
                        if (!webContentType.Sealed)
                        {
                            OnProvisioned?.Invoke(this, webContentType);
                        }
                        return;
                    }
                    else if (webContentType == null && newContentType != null)
                    {
                        contentType = web.ContentTypes.Add(newContentType);
                        OnProvisioning?.Invoke(this, contentType);
                        contentType.Update(false);
                        webContentType = contentType;
                    }
                }
                else if (level == ProvisionLevel.List)
                {
                    if (list != null && List.Behavior != ProvisionBehavior.None)
                    {
                        if (webContentType != null)
                        {
                            contentType = list.ContentTypes.AddExistingContentType(webContentType);
                        }
                        else if (listContentType == null && newContentType != null)
                        {
                            contentType = list.ContentTypes.Add(newContentType);
                            OnProvisioning?.Invoke(this, contentType);
                            contentType.Update(false);
                        }
                    }
                }

                if (contentType != null)
                {
                    context.Load(contentType);
                    context.ExecuteQuery();
                    //if (newContentType != null)
                    //{
                    OnProvisioned?.Invoke(this, contentType);
                    //}
                }
            }
        }
示例#10
0
 public abstract void UnProvision(ProvisionLevel level);
示例#11
0
        public override void Provision(bool forceOverwrite, ProvisionLevel level)
        {
            if (List != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                //if (level == ProvisionLevel.Web) return;
                if (List.Behavior == ProvisionBehavior.None)
                {
                    return;
                }
                var  context = Model.Context.Context;
                Web  web     = context.Web;
                List list    = null;
                if (List.Id != default)
                {
                    list = web.Lists.GetById(List.Id);
                }
                else if (List.Url != null)
                {
                    list = web.GetList($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                }
                else if (!string.IsNullOrEmpty(List.Title))
                {
                    list = web.Lists.GetByTitle(List.Title);
                }
                if (list != null)
                {
                    context.Load(list);
                    try
                    {
                        context.ExecuteQuery();
                    }
                    catch (Exception)
                    {
                        list = null;
                    }
                }
                if (list != null)
                {
                    if (forceOverwrite || List.Behavior == ProvisionBehavior.Overwrite)
                    {
                        if (list.Title != List.Title)
                        {
                            list.Title = List.Title;
                            OnProvisioning?.Invoke(this, list);
                            list.Update();
                        }
                        //context.Load(list);
                        context.ExecuteQuery();
                        OnProvisioned?.Invoke(this, list);
                        return;
                    }
                }
                else
                {
                    var newList = new ListCreationInformation()
                    {
                        Title             = List.Title,
                        Url               = List.Url,
                        TemplateType      = (int)List.Type,
                        TemplateFeatureId = List.TemplateFeatureId
                    };

                    list = web.Lists.Add(newList);
                    OnProvisioning?.Invoke(this, list);
                    list.Update();
                    context.Load(list);
                    context.ExecuteQuery();
                }
                List.Id = list.Id;
                OnProvisioned?.Invoke(this, list);
            }
        }
示例#12
0
        public override void UnProvision(ProvisionLevel level)
        {
            if (List != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                //if (level == ProvisionLevel.Web) return;
                if (List.Behavior == ProvisionBehavior.None)
                {
                    return;
                }
                if (level != ProvisionLevel.Default)
                {
                }
                var  context = Model.Context.Context;
                Web  web     = context.Web;
                List list    = null;
                if (List.Id != default)
                {
                    list = web.Lists.GetById(List.Id);
                }
                else if (List.Url != null)
                {
                    list = web.GetList($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                }
                else if (!string.IsNullOrEmpty(List.Title))
                {
                    list = web.Lists.GetByTitle(List.Title);
                }
                if (list != null)
                {
                    context.Load(list);
#if !SP2013 && !SP2016
                    context.Load(list, l => l.AllowDeletion);
#endif
                    try
                    {
                        context.ExecuteQuery();
                    }
                    catch (Exception ex)
                    {
                        list = null;
                    }
                }
                if (list != null)
                {
#if !SP2013 && !SP2016
                    if (list.AllowDeletion)
#endif
                    {
                        if (OnUnProvisioning != null)
                        {
                            OnUnProvisioning.Invoke(this, list);
                        }
                        list.DeleteObject();
                        context.ExecuteQuery();
                        if (OnUnProvisioned != null)
                        {
                            OnUnProvisioned.Invoke(this, list);
                        }
                    }
                }
            }
        }
示例#13
0
        public override void UnProvision(ProvisionLevel level)
        {
            if (Field != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                if (Field.Behavior == ProvisionBehavior.None)
                {
                    return;
                }

                if (level != ProvisionLevel.Default)
                {
                    //Field.Level = level;
                }
                else
                {
                    level = Field.Level;
                    if (level == ProvisionLevel.Default)
                    {
                        if (ContentType != null)
                        {
                            level = ContentType.Level;
                        }
                        if (level == ProvisionLevel.Default)
                        {
                            level = List != null ? ProvisionLevel.List : ProvisionLevel.Web;
                        }
                    }
                }

                if (Field.DataType == FieldType.ContentTypeId ||
                    Field.DataType == FieldType.Counter
                    //|| Field.DataType == FieldType.Computed
                    || Field.DataType == FieldType.File)
                {
                    return;
                }

                var   context = Model.Context.Context;
                Web   web     = context.Web;
                List  list    = null;
                Field field   = null;
                if (List != null)
                {
                    if (List.Id != default)
                    {
                        list = context.Web.Lists.GetById(List.Id);
                    }
                    else if (List.Url != null)
                    {
                        list = context.Web.GetList($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                    }
                    else if (!string.IsNullOrEmpty(List.Title))
                    {
                        list = context.Web.Lists.GetByTitle(List.Title);
                    }
                    //if (list != null)
                    //{
                    //  context.Load(list);
                    //  try
                    //  {
                    //    context.ExecuteQuery();
                    //  }
                    //  catch (Exception ex)
                    //  {
                    //    list = null;
                    //  }
                    //}
                }

                bool deleted = false;
                if (level == ProvisionLevel.Web)
                {
                    field = web.Fields.GetByInternalNameOrTitle(Field.Name);

                    context.Load(field);
                    try
                    {
                        context.ExecuteQuery();
                    }
                    catch (Exception ex)
                    {
                        field = null;
                    }
                    if (field != null && list == null)
                    {
                        if (field.CanBeDeleted)
                        {
                            field.DeleteObject();
                            OnUnProvisioning?.Invoke(this, field);
                            deleted = true;
                        }
                    }
                }
                if (list != null)
                {
                    Field existField = list.Fields.GetByInternalNameOrTitle(Field.Name);
                    context.Load(existField);
                    try
                    {
                        context.ExecuteQuery();
                    }
                    catch (Exception ex)
                    {
                        existField = null;
                    }
                    if (existField != null)
                    {
                        if (existField.CanBeDeleted)
                        {
                            existField.DeleteObject();
                            OnUnProvisioning?.Invoke(this, field);
                            deleted = true;
                        }
                    }
                    if (field != null)
                    {
                        if (field.CanBeDeleted)
                        {
                            field.DeleteObject();
                            OnUnProvisioning?.Invoke(this, field);
                            deleted = true;
                        }
                    }
                    else
                    {
                        field = existField;
                    }
                }

                if (deleted)
                {
                    context.ExecuteQuery();
                    OnUnProvisioned?.Invoke(this, field);
                }
            }
        }
示例#14
0
        public override void Provision(bool forceOverwrite, ProvisionLevel level)
        {
            if (Field != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                if (Field.Behavior == ProvisionBehavior.None)
                {
                    return;
                }

                if (level != ProvisionLevel.Default)
                {
                    //Field.Level = level;
                }
                else if (Field.Level == ProvisionLevel.Default)
                {
                    if (ContentType != null)
                    {
                        level = ContentType.Level;
                    }
                    if (level == ProvisionLevel.Default)
                    {
                        level = List != null && List.Behavior != ProvisionBehavior.None ? ProvisionLevel.List : ProvisionLevel.Web;
                    }
                }

                if (Field.Behavior == ProvisionBehavior.Default)
                {
                    if (level == ProvisionLevel.List)
                    {
                        if (List != null)
                        {
                            Field.Behavior = List.Behavior;
                        }
                    }
                    if (Field.Behavior == ProvisionBehavior.Default && ContentType != null)
                    {
                        Field.Behavior = ContentType.Behavior;
                    }
                }

                if (Field.DataType == FieldType.ContentTypeId ||
                    Field.DataType == FieldType.Counter ||
                    Field.DataType == FieldType.Computed ||
                    Field.DataType == FieldType.File)
                {
                    return;
                }

                var   context = Model.Context.Context;
                Web   web     = context.Web;
                List  list    = null;
                Field field   = null;
                if (List != null && List.Behavior != ProvisionBehavior.None)
                {
                    if (List.Id != default)
                    {
                        list = context.Web.Lists.GetById(List.Id);
                    }
                    else if (List.Url != null)
                    {
                        list = context.Web.GetList($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                    }
                    else if (!string.IsNullOrEmpty(List.Title))
                    {
                        list = context.Web.Lists.GetByTitle(List.Title);
                    }
                    //if (list != null)
                    //{
                    //  context.Load(list);
                    //  try
                    //  {
                    //    context.ExecuteQuery();
                    //  }
                    //  catch (Exception ex)
                    //  {
                    //    list = null;
                    //  }
                    //}
                }

                FieldCollection fields = null;

                field  = web.AvailableFields.GetByInternalNameOrTitle(Field.Name);
                fields = web.Fields;

                context.Load(field);
                try
                {
                    context.ExecuteQuery();
                }
                catch (Exception)
                {
                    field = null;
                }

                if (level == ProvisionLevel.List && list != null)
                {
                    Field existField = list.Fields.GetByInternalNameOrTitle(Field.Name);
                    context.Load(existField);
                    try
                    {
                        context.ExecuteQuery();
                    }
                    catch (Exception ex)
                    {
                        existField = null;
                    }
                    if (existField != null)
                    {
                        field = existField;
                    }
                    else
                    {
                        field = null;
                    }
                    fields = list.Fields;
                }

                if (!forceOverwrite /*&& !Field.Overwrite*/ && Field.Behavior != ProvisionBehavior.Overwrite && field != null)
                {
                    OnProvisioned?.Invoke(this, field);
                    return;
                }

                if (fields != null)
                {
                    if (Field.DataType == FieldType.Calculated)
                    {
                        string formula    = null;
                        string fieldRefs  = null;
                        string newFormula = null;

                        if (typeof(CalculatedFieldAttribute).IsAssignableFrom(Field.GetType()))
                        {
                            fieldRefs = (Field as CalculatedFieldAttribute).FieldRefs == null
                                ? null
                                : string.Join("", (Field as CalculatedFieldAttribute).FieldRefs.Select(fieldRef => new Caml.CamlFieldRef()
                            {
                                Name = fieldRef
                            }.ToString()));
                            formula = (Field as CalculatedFieldAttribute).Formula;

                            if (!string.IsNullOrEmpty(fieldRefs) && !string.IsNullOrEmpty(formula))
                            {
                                if (level == ProvisionLevel.List)
                                {
                                    var refFields = new List <Field>();
                                    foreach (string fieldName in (Field as CalculatedFieldAttribute).FieldRefs)
                                    {
                                        var refField = (level == ProvisionLevel.Web ? web.AvailableFields : fields).GetByInternalNameOrTitle(fieldName);
                                        context.Load(refField, f => f.Title, f => f.InternalName, f => f.Id);
                                        refFields.Add(refField);
                                    }
                                    context.ExecuteQuery();
                                    foreach (Field refField in refFields)
                                    {
                                        newFormula = formula.Replace($"[{refField.InternalName}]", $"[{refField.Title}]");
                                    }
                                }
                            }
                        }
                        if (field == null)
                        {
                            string fieldXml = $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' ResultType='{{2}}'><Formula>{{0}}</Formula><FieldRefs>{{1}}</FieldRefs></Field>";
                            fieldXml = string.Format(fieldXml, System.Security.SecurityElement.Escape(newFormula), fieldRefs, (Field as CalculatedFieldAttribute).ResultType);

                            field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                        }

                        if (Field is CalculatedFieldAttribute)
                        {
                            (Field as CalculatedFieldAttribute).Formula = newFormula;
                        }

                        try
                        {
                            field = ApplyField(field);
                        }
                        finally
                        {
                            if (Field is CalculatedFieldAttribute)
                            {
                                (Field as CalculatedFieldAttribute).Formula = formula;
                            }
                        }

                        OnProvisioning?.Invoke(this, field);
                    }
                    else
                    {
                        if (Field.DataType == FieldType.Lookup)
                        {
                            if (_valueType != null &&
                                (typeof(ISpEntityLookup).IsAssignableFrom(_valueType) || typeof(ISpEntityLookupCollection).IsAssignableFrom(_valueType)) ||
                                typeof(IListItemEntity).IsAssignableFrom(_valueType))
                            {
                                bool allowMultipleValues = false;
                                if (typeof(LookupFieldAttribute).IsAssignableFrom(Field.GetType()))
                                {
                                    allowMultipleValues = (Field as LookupFieldAttribute).IsMultiple;
                                }
                                if (field == null)
                                {
                                    string fieldXml = allowMultipleValues
                                      ? $"<Field Type='LookupMulti' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' Mult='TRUE' />"
                                      : $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' />";
                                    field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                                }
                                field = ApplyField(field);
                                OnProvisioning?.Invoke(this, field);
                            }
                            else
                            {
                                field = null;
                            }
                        }
                        else if (Field.DataType == FieldType.User)
                        {
                            bool allowMultipleValues = false;
                            if (typeof(LookupFieldAttribute).IsAssignableFrom(Field.GetType()))
                            {
                                allowMultipleValues = (Field as LookupFieldAttribute).IsMultiple;
                            }
                            if (field == null)
                            {
                                string fieldXml = allowMultipleValues
                                  ? $"<Field Type='UserMulti' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' Mult='TRUE' />"
                                  : $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' />";
                                field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                            }
                            field = ApplyField(field);
                            OnProvisioning?.Invoke(this, field);
                        }
                        else if ((Field.DataType == FieldType.Choice || Field.DataType == FieldType.MultiChoice) && _valueType.IsEnum)
                        {
                            if (field == null)
                            {
                                string fieldXml = $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' />";
                                field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                            }

                            field = ApplyField(field);
                            OnProvisioning?.Invoke(this, field);
                        }
                        else if (Field.DataType == FieldType.Note)
                        {
                            if (field == null)
                            {
                                string fieldXml = $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' RichText='{(Field is NoteFieldAttribute && (Field as NoteFieldAttribute).RichText ? "TRUE" : "FALSE")}' RichTextMode='{(Field is NoteFieldAttribute && (Field as NoteFieldAttribute).RichText ? "FullHtml" : "Compatible")}' IsolateStyles='{(Field is NoteFieldAttribute && (Field as NoteFieldAttribute).RichText ? "TRUE" : "FALSE")}' />";
                                field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                            }
                            field = ApplyField(field);
                            OnProvisioning?.Invoke(this, field);
                        }
                        else
                        {
                            if (field == null)
                            {
                                string fieldXml = $"<Field Type='{Field.DataType}' Name='{Field.Name}' StaticName='{Field.Name}' DisplayName='{Field.Title ?? Field.Name}' />";
                                field = fields.AddFieldAsXml(fieldXml, true, AddFieldOptions.AddFieldInternalNameHint);
                            }
                            field = ApplyField(field);
                            OnProvisioning?.Invoke(this, field);
                        }
                    }
                    if (field != null)
                    {
                        field.Update();
                        context.Load(field);
                        context.ExecuteQuery();

                        OnProvisioned?.Invoke(this, field);
                    }
                }
            }
        }
示例#15
0
        public virtual void Provision(bool forceOverwrite = false, ProvisionLevel level = ProvisionLevel.Default)
        {
            if (ProvisionHandlers != null)
            {
                _list = null;
                ListProvisionHandler <TContext, TEntity> listHandler = null;
                _contentTypes = new Dictionary <ContentTypeProvisionHandler <TContext, TEntity>, ContentType>();
                _fields       = new Dictionary <FieldProvisionHandler <TContext, TEntity>, Field>();
                var allFields = new Dictionary <string, int>();

                foreach (var provisionHandler in ProvisionHandlers)
                {
                    if (provisionHandler != null)
                    {
                        if (provisionHandler is ListProvisionHandler <TContext, TEntity> )
                        {
                            listHandler = provisionHandler as ListProvisionHandler <TContext, TEntity>;
                        }
                        else if (provisionHandler is FieldProvisionHandler <TContext, TEntity> )
                        {
                            allFields[(provisionHandler as FieldProvisionHandler <TContext, TEntity>).Field.Name]
                                = (provisionHandler as FieldProvisionHandler <TContext, TEntity>).Field.Order;
                        }
                        provisionHandler.Provision(forceOverwrite, level);
                    }
                }

                var comparison = new Comparison <string>(
                    (f1, f2) =>
                {
                    if (allFields.ContainsKey(f1) && allFields.ContainsKey(f2))
                    {
                        return(allFields[f1].CompareTo(allFields[f2]));
                    }
                    else if (allFields.ContainsKey(f1))
                    {
                        return(1);
                    }
                    else if (allFields.ContainsKey(f2))
                    {
                        return(-1);
                    }
                    return(0);
                });

                if (_contentTypes.Count > 0)
                {
                    foreach (var contentType in _contentTypes)
                    {
                        SetFieldLinks(contentType.Value,
                                      _fields.Where(f => contentType.Key.ContentType.Level == f.Key.Field.Level || level == f.Key.Field.Level || f.Key.Field.Level == ProvisionLevel.Default).Select(f => f.Value), comparison);

                        SetContentTypeToList(contentType.Value, contentType.Key, listHandler, level, comparison);
                    }
                }

                SetFieldsToList(listHandler, level, forceOverwrite);

                UpdateDefaultListView(listHandler, comparison);
            }
        }
示例#16
0
        public override void UnProvision(ProvisionLevel level)
        {
            if (ContentType != null && Model != null && Model.Context != null && Model.Context.Context != null)
            {
                if (ContentType.Behavior == ProvisionBehavior.None)
                {
                    return;
                }

                if (level != ProvisionLevel.Default)
                {
                    //ContentType.Level = level;
                }
                else if (ContentType.Level == ProvisionLevel.Default)
                {
                    level = List != null ? ProvisionLevel.List : ProvisionLevel.Web;
                }

                var         context         = Model.Context.Context;
                Web         web             = context.Web;
                List        list            = null;
                ContentType webContentType  = null;
                ContentType listContentType = null;

                if (List != null)
                {
                    if (List.Id != default)
                    {
                        list = context.Web.Lists.GetById(List.Id);
                    }
                    else if (List.Url != null)
                    {
                        list = context.Web.GetList/*ByUrl*/ ($"{ new Uri(Model.Context.SiteUrl).LocalPath.TrimEnd('/')}/{List.Url.TrimStart('/')}");
                    }
                    else if (!string.IsNullOrEmpty(List.Title))
                    {
                        list = context.Web.Lists.GetByTitle(List.Title);
                    }
                }
                //if (list != null)
                //{
                //  context.Load(list);
                //  try
                //  {
                //    context.ExecuteQuery();
                //  }
                //  catch (Exception ex)
                //  {
                //    list = null;
                //  }
                //}

                string ctName = ContentType.Name;
                string ctId   = ContentType.Id;

                if (!string.IsNullOrEmpty(ctId))
                {
                    if (list != null)
                    {
                        var listContentTypes = context.LoadQuery(list.ContentTypes.Where(ct => ct.Id.StringValue == ctId || ct.Parent.Id.StringValue == ctId));
                        try
                        {
                            context.ExecuteQuery();
                            listContentType = listContentTypes.FirstOrDefault();
                            if (listContentType != null)
                            {
                                ctName = listContentType.Name;
                            }
                        }
                        catch
                        {
                            listContentType = null;
                        }
                    }
                    if (level == ProvisionLevel.Web)
                    {
                        webContentType = web.AvailableContentTypes.GetById(ctId);
                        context.Load(webContentType);
                        try
                        {
                            context.ExecuteQuery();
                            ctName = webContentType.Name;
                        }
                        catch
                        {
                            webContentType = null;
                        }
                    }
                }
                else if (!string.IsNullOrEmpty(ctName))
                {
                    if (list != null)
                    {
                        var listContentTypes = context.LoadQuery(list.ContentTypes.Where(ct => ct.Name == ctName));
                        try
                        {
                            context.ExecuteQuery();
                            listContentType = listContentTypes.FirstOrDefault();
                            if (listContentType != null)
                            {
                                ctName = listContentType.Name;
                            }
                        }
                        catch
                        {
                            listContentType = null;
                        }
                    }
                    if (level == ProvisionLevel.Web)
                    {
                        var webContentTypes = context.LoadQuery(web.AvailableContentTypes.Where(ct => ct.Name == ctName));
                        try
                        {
                            context.ExecuteQuery();
                            webContentType = webContentTypes.FirstOrDefault();
                        }
                        catch
                        {
                            webContentType = null;
                        }
                    }
                }

                if (listContentType != null)
                {
                    if (!listContentType.ReadOnly && !listContentType.Sealed)
                    {
                        OnUnProvisioning?.Invoke(this, listContentType);
                        listContentType.DeleteObject();
                        context.ExecuteQuery();
                        OnUnProvisioned?.Invoke(this, listContentType);
                    }
                }
                if (webContentType != null)
                {
                    if (!webContentType.ReadOnly && !webContentType.Sealed)
                    {
                        OnUnProvisioning?.Invoke(this, webContentType);
                        webContentType.DeleteObject();
                        context.ExecuteQuery();
                        OnUnProvisioned?.Invoke(this, webContentType);
                    }
                }
            }
        }
示例#17
0
 public abstract void Provision(bool forceOverwrite, ProvisionLevel level);