Exemple #1
0
        protected TermGroup FindGroup(TermStoreModelHost storeModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore = storeModelHost.HostTermStore;
            var context   = termStore.Context;

            TermGroup currentGroup = null;

            if (groupModel.IsSiteCollectionGroup)
            {
                currentGroup = FindSiteCollectionGroup(storeModelHost, groupModel);
                return(currentGroup);
            }

            if (groupModel.Id.HasValue)
            {
                var scope = new ExceptionHandlingScope(context);
                using (scope.StartScope())
                {
                    using (scope.StartTry())
                    {
                        currentGroup = termStore.Groups.GetById(groupModel.Id.Value);
                        context.Load(currentGroup);
                    }

                    using (scope.StartCatch())
                    {
                    }
                }
            }
            else if (!string.IsNullOrEmpty(groupModel.Name))
            {
                var scope = new ExceptionHandlingScope(context);
                using (scope.StartScope())
                {
                    using (scope.StartTry())
                    {
                        currentGroup = termStore.Groups.GetByName(groupModel.Name);
                        context.Load(currentGroup);
                    }

                    using (scope.StartCatch())
                    {
                    }
                }
            }

            context.ExecuteQueryWithTrace();

            if (currentGroup != null && currentGroup.ServerObjectIsNull == false)
            {
                context.Load(currentGroup, g => g.Id);
                context.Load(currentGroup, g => g.Name);

                context.ExecuteQueryWithTrace();

                return(currentGroup);
            }

            return(null);
        }
        private void DeployTaxonomyGroup(object modelHost, TermStoreModelHost siteModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore    = siteModelHost.HostTermStore;
            var currentGroup = FindGroup(siteModelHost, groupModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentGroup,
                ObjectType       = typeof(Group),
                ObjectDefinition = groupModel,
                ModelHost        = modelHost
            });

            if (currentGroup == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term Group");

#if !NET35
                currentGroup = groupModel.Id.HasValue
                                        ? termStore.CreateGroup(groupModel.Name, groupModel.Id.Value)
                                        : termStore.CreateGroup(groupModel.Name);
#endif

#if NET35
                // SP2010 API does not support creating groups with particular ID
                currentGroup = termStore.CreateGroup(groupModel.Name);
#endif

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentGroup,
                    ObjectType       = typeof(Group),
                    ObjectDefinition = groupModel,
                    ModelHost        = modelHost
                });
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term Group");

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentGroup,
                    ObjectType       = typeof(Group),
                    ObjectDefinition = groupModel,
                    ModelHost        = modelHost
                });
            }

            siteModelHost.HostTermStore.CommitAll();
        }
        protected Group FindGroup(TermStoreModelHost termStoreHost, TaxonomyTermGroupDefinition groupModel)
        {
            Group currentGroup = null;

            var termStore = termStoreHost.HostTermStore;

            if (groupModel.IsSiteCollectionGroup)
            {
                currentGroup = FindSiteCollectionGroup(termStoreHost, groupModel);
                return(currentGroup);
            }

            //if (groupModel.IsSystemGroup)
            //{
            //    currentGroup = FindSystemGroup(termStoreHost, groupModel);
            //    return currentGroup;
            //}

            if (groupModel.Id.HasValue)
            {
                currentGroup = termStore.GetGroup(groupModel.Id.Value);
            }
            else if (!string.IsNullOrEmpty(groupModel.Name))
            {
                currentGroup = termStore.Groups.FirstOrDefault(g => g.Name.ToUpper() == groupModel.Name.ToUpper());
            }

            return(currentGroup);
        }
        private void SharePointOnlineWait(TermStoreModelHost siteModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            // wait until the group is there
            // Nested terms provisioning in Office 365 fails #995
            // TermSet not found #994
            var context = siteModelHost.HostClientContext;

            if (IsSharePointOnlineContext(context))
            {
                var currentGroup = FindGroup(siteModelHost, groupModel);

                if (currentGroup == null)
                {
                    TryRetryService.TryWithRetry(() =>
                    {
                        currentGroup = FindGroup(siteModelHost, groupModel);
                        return(currentGroup != null);
                    });
                }

                if (currentGroup == null)
                {
                    throw new SPMeta2Exception(string.Format("Cannot find a taxonomy group after provision"));
                }
            }
        }
Exemple #5
0
        private void DeployTaxonomyGroup(object modelHost, TermStoreModelHost siteModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore    = siteModelHost.HostTermStore;
            var currentGroup = FindGroup(siteModelHost, groupModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentGroup,
                ObjectType       = typeof(TermGroup),
                ObjectDefinition = groupModel,
                ModelHost        = modelHost
            });

            if (currentGroup == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term Group");

                currentGroup = groupModel.Id.HasValue
                                        ? termStore.CreateGroup(groupModel.Name, groupModel.Id.Value)
                                        : termStore.CreateGroup(groupModel.Name, Guid.NewGuid());

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentGroup,
                    ObjectType       = typeof(TermGroup),
                    ObjectDefinition = groupModel,
                    ModelHost        = modelHost
                });
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term Group");

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentGroup,
                    ObjectType       = typeof(TermGroup),
                    ObjectDefinition = groupModel,
                    ModelHost        = modelHost
                });
            }

            termStore.CommitAll();
            termStore.Context.ExecuteQueryWithTrace();
        }
        protected Group FindSiteCollectionGroup(TermStoreModelHost termStoreHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore = termStoreHost.HostTermStore;

#if NET35
            return(termStore.GetSiteCollectionGroup(termStoreHost.HostSite));
#endif

#if !NET35
            return(termStore.GetSiteCollectionGroup(termStoreHost.HostSite, true));
#endif
        }
Exemple #7
0
        protected TermGroup FindSiteCollectionGroup(TermStoreModelHost storeModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore = storeModelHost.HostTermStore;
            var site      = storeModelHost.HostSite;

            var context = termStore.Context;

            TermGroup currentGroup = termStore.GetSiteCollectionGroup(site, true);

            context.Load(currentGroup);
            context.ExecuteQueryWithTrace();
            return(currentGroup);
        }
 protected Group FindSystemGroup(TermStoreModelHost termStoreHost, TaxonomyTermGroupDefinition groupModel)
 {
     return(termStoreHost.HostTermStore.SystemGroup);
 }
        protected Group FindSiteCollectionGroup(TermStoreModelHost termStoreHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore = termStoreHost.HostTermStore;

            return(termStore.GetSiteCollectionGroup(termStoreHost.HostSite));
        }
        private void DeployTaxonomyGroup(object modelHost, TermStoreModelHost siteModelHost, TaxonomyTermGroupDefinition groupModel)
        {
            var termStore    = siteModelHost.HostTermStore;
            var currentGroup = FindGroup(siteModelHost, groupModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentGroup,
                ObjectType       = typeof(TermGroup),
                ObjectDefinition = groupModel,
                ModelHost        = modelHost
            });

            if (currentGroup == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term Group");

                currentGroup = groupModel.Id.HasValue
                                        ? termStore.CreateGroup(groupModel.Name, groupModel.Id.Value)
                                        : termStore.CreateGroup(groupModel.Name, Guid.NewGuid());

                if (!string.IsNullOrEmpty(groupModel.Description))
                {
                    currentGroup.Description = groupModel.Description;
                }

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = currentGroup,
                    ObjectType       = typeof(TermGroup),
                    ObjectDefinition = groupModel,
                    ModelHost        = modelHost
                });
            }
            else
            {
                UpdateExistingTaxonomyGroup(modelHost, groupModel, currentGroup);
            }

            termStore.CommitAll();

            termStore.Groups.RefreshLoad();
            termStore.RefreshLoad();

            try
            {
                termStore.Context.ExecuteQueryWithTrace();
            }
            catch (Exception e)
            {
                var context = siteModelHost.HostClientContext;

                if (!IsSharePointOnlineContext(context))
                {
                    throw;
                }

                // SPMeta2 Provisioning Taxonomy Group with CSOM Standard #959
                // https://github.com/SubPointSolutions/spmeta2/issues/959

                // seems that newly created group might not be available for the time being
                // handling that "Group names must be unique." exception
                // trying to find the group and only update description
                var serverException = e as ServerException;

                if (serverException != null &&
                    serverException.ServerErrorCode == -2147024809)
                {
                    currentGroup = FindGroup(siteModelHost, groupModel);

                    if (currentGroup == null)
                    {
                        TryRetryService.TryWithRetry(() =>
                        {
                            currentGroup = FindGroup(siteModelHost, groupModel);
                            return(currentGroup != null);
                        });
                    }

                    UpdateExistingTaxonomyGroup(modelHost, groupModel, currentGroup);

                    termStore.CommitAll();

                    termStore.Groups.RefreshLoad();
                    termStore.RefreshLoad();

                    termStore.Context.ExecuteQueryWithTrace();
                }
            }

            siteModelHost.ShouldUpdateHost = false;
        }