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")); } } }
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 }
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; }