Пример #1
0
        public void SetupList(ClientContext context, Web web, ShList listConfig)
        {
            var listCollection = web.Lists;

            context.Load(listCollection);
            context.ExecuteQuery();

            var setupList = listCollection.FirstOrDefault(l => l.Title == listConfig.Title);

            if (setupList == null)
            {
                var listCreationInfo = GetListCreationInfoFromConfig(listConfig);
                setupList = listCollection.Add(listCreationInfo);
                context.ExecuteQuery();
            }
            if (listConfig.Hidden.HasValue)
            {
                setupList.Hidden = listConfig.Hidden.Value;
            }
            if (listConfig.OnQuickLaunch.HasValue)
            {
                setupList.OnQuickLaunch = listConfig.OnQuickLaunch.Value;
            }
            if (listConfig.VersioningEnabled.HasValue)
            {
                setupList.EnableVersioning = listConfig.VersioningEnabled.Value;
            }
            setupList.Update();

            SetupFieldsOfList(context, setupList, listConfig);
            SetupContentTypesOfList(context, setupList, listConfig);
            SetupPermissionSchemeOfList(context, setupList, listConfig);
            SetupViewsOfList(context, setupList, listConfig);
            SetupEventReceiversOfList(context, setupList, listConfig);
        }
Пример #2
0
        public void SetupList(ClientContext context, Web web, ShList listConfig)
        {
            var listCollection = web.Lists;

            context.Load(listCollection);
            context.ExecuteQuery();

            var setupList = listCollection.FirstOrDefault(l => l.Title == listConfig.Title);

            if (setupList == null)
            {
                var listCreationInfo = GetListCreationInfoFromConfig(listConfig);
                setupList = listCollection.Add(listCreationInfo);
                context.ExecuteQuery();
            }
            setupList.OnQuickLaunch    = listConfig.OnQuickLaunch;
            setupList.EnableVersioning = listConfig.VersioningEnabled;
            setupList.Update();

            context.Load(setupList.Views);
            context.ExecuteQuery();

            foreach (ShView view in listConfig.Views)
            {
                SetupView(context, setupList, view);
            }
        }
Пример #3
0
 private void SetupViewsOfList(ClientContext context, List list, ShList listConfig)
 {
     context.Load(list.Views);
     context.ExecuteQuery();
     foreach (ShView view in listConfig.Views)
     {
         SetupView(context, list, view);
     }
 }
Пример #4
0
 private ListCreationInformation GetListCreationInfoFromConfig(ShList listConfig)
 {
     return(new ListCreationInformation
     {
         Description = listConfig.Description,
         Title = listConfig.Title,
         TemplateType = listConfig.TemplateType,
         Url = listConfig.Url
     });
 }
Пример #5
0
 private void SetupFieldsOfList(ClientContext context, List setupList, ShList listConfig)
 {
     foreach (string fieldName in listConfig.Fields)
     {
         if (!setupList.FieldExistsByName(fieldName))
         {
             Log.DebugFormat("Adding field {0} to list {1}", fieldName, listConfig.Title);
             var field = context.Site.RootWeb.Fields.GetByInternalNameOrTitle(fieldName);
             setupList.Fields.Add(field);
         }
         else
         {
             Log.DebugFormat("Field {0} was not added to list {1} because it already exists", fieldName, listConfig.Title);
         }
     }
     setupList.Update();
     context.Load(setupList);
     context.ExecuteQuery();
 }
Пример #6
0
        private void SetupPermissionSchemeOfList(ClientContext context, List list, ShList listConfig)
        {
            if (listConfig.PermissionScheme != null)
            {
                if (listConfig.PermissionScheme.BreakInheritance)
                {
                    list.BreakRoleInheritance(true, false);
                    list.Update();
                    context.ExecuteQuery();
                }
                if (listConfig.PermissionScheme.RemoveDefaultRoleAssignments)
                {
                    context.Load(list.RoleAssignments);
                    context.ExecuteQuery();
                    for (var i = list.RoleAssignments.Count - 1; i >= 0; i--)
                    {
                        list.RoleAssignments[i].DeleteObject();
                    }
                }
                foreach (var roleAssignment in listConfig.PermissionScheme.RoleAssignments)
                {
                    Group group = null;
                    if (roleAssignment.Group.Name != "")
                    {
                        group = context.Web.SiteGroups.GetByName(roleAssignment.Group.Name);
                    }
                    else
                    {
                        group = GetAssociatedGroup(context, roleAssignment.Group.AssociatedGroup);
                    }

                    RoleDefinitionBindingCollection roleDefBinding = new RoleDefinitionBindingCollection(context);
                    RoleDefinition roleDef = context.Web.RoleDefinitions.GetByName(roleAssignment.PermissionLevel);
                    roleDefBinding.Add(roleDef);
                    list.RoleAssignments.Add(group, roleDefBinding);
                    context.Load(group);
                    context.Load(roleDef);
                    context.ExecuteQuery();
                }
            }
        }
Пример #7
0
        private void SetupEventReceiversOfList(ClientContext context, List setupList, ShList listConfig)
        {
            if (listConfig.AddMetadataDefaultsReceiver)
            {
                var metadataDefaultsEventReceiver = new EventReceiverDefinitionCreationInformation
                {
                    ReceiverName     = "LocationBasedMetadataDefaultsReceiver ItemAdded",
                    EventType        = EventReceiverType.ItemAdded,
                    Synchronization  = EventReceiverSynchronization.Synchronous,
                    ReceiverAssembly = "Microsoft.Office.DocumentManagement, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
                    ReceiverClass    = "Microsoft.Office.DocumentManagement.LocationBasedMetadataDefaultsReceiver",
                    SequenceNumber   = 1000
                };

                if (setupList.GetEventReceiverByName(metadataDefaultsEventReceiver.ReceiverName) == null)
                {
                    Log.DebugFormat("Adding Metadata Event Receiver to list {0}", listConfig.Title);
                    setupList.EventReceivers.Add(metadataDefaultsEventReceiver);
                }
                else
                {
                    Log.DebugFormat("Metadata Event Receiver already added to list {0}", listConfig.Title);
                }
                setupList.Update();
                context.ExecuteQuery();
            }
        }
Пример #8
0
        private void SetupContentTypesOfList(ClientContext context, List list, ShList listConfig)
        {
            if (listConfig.ContentTypes.Count > 0)
            {
                Log.Debug("Starting to configure content types for list " + listConfig.Title);
                var rootWeb             = context.Site.RootWeb;
                var rootWebContentTypes = rootWeb.ContentTypes;
                var listContentTypes    = list.ContentTypes;
                context.Load(list.RootFolder);
                context.Load(rootWebContentTypes);
                context.Load(listContentTypes);
                context.LoadQuery(rootWebContentTypes.Include(ct => ct.Name));
                context.LoadQuery(listContentTypes.Include(ct => ct.Name));

                list.ContentTypesEnabled = true;
                list.Update();
                context.ExecuteQuery();

                var contentTypesToAdd = new List <ContentType>();
                foreach (var configContentType in listConfig.ContentTypes)
                {
                    Log.Debug("Attempting to add content type " + configContentType);
                    if (listContentTypes.FirstOrDefault(ct => ct.Name == configContentType) == null)
                    {
                        var rootContenttype = rootWebContentTypes.FirstOrDefault(ct => ct.Name == configContentType);
                        if (rootContenttype != null)
                        {
                            // listContentTypes.AddExistingContentType(rootContenttype);
                            contentTypesToAdd.Add(rootContenttype);
                        }
                    }
                }

                foreach (ContentType contentType in contentTypesToAdd)
                {
                    listContentTypes.AddExistingContentType(contentType);
                }

                context.Load(listContentTypes);
                context.LoadQuery(listContentTypes.Include(ct => ct.Name));
                context.ExecuteQuery();

                if (!listConfig.RemoveExisitingContentTypes)
                {
                    return;
                }

                var contentTypesToRemove = new List <ContentType>();
                foreach (ContentType listContentType in listContentTypes)
                {
                    if (!listConfig.ContentTypes.Contains(listContentType.Name))
                    {
                        contentTypesToRemove.Add(listContentType);
                    }
                }
                //Need to do two iterations to avoid deleting from collection that is being iterated
                for (int i = 0; i < contentTypesToRemove.Count; i++)
                {
                    Log.Debug("Attempting to delete content type " + contentTypesToRemove[i].Name);
                    contentTypesToRemove[i].DeleteObject();
                }
                try
                {
                    context.ExecuteQuery();
                }
                catch (Exception)
                {
                    Log.Info("Could not delete ContentTypes from list " + list.RootFolder.ServerRelativeUrl);
                }
            }
        }