private void DeployTermUnderTerm(object modelHost, TermModelHost groupModelHost, TaxonomyTermDefinition termModel) { var termStore = groupModelHost.HostTermStore; var termSet = groupModelHost.HostTerm; var currentTerm = FindTermInTerm(termSet, termModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); if (currentTerm == null) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term"); currentTerm = termModel.Id.HasValue ? termSet.CreateTerm(termModel.Name, termModel.LCID, termModel.Id.Value) : termSet.CreateTerm(termModel.Name, termModel.LCID, Guid.NewGuid()); MapTermProperties(currentTerm, termModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term"); MapTermProperties(currentTerm, termModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } termStore.CommitAll(); termStore.Context.ExecuteQueryWithTrace(); }
private void SharePointOnlineWait(TermModelHost termModelHost, TaxonomyTermLabelDefinition definition) { // wait until the group is there // Nested terms provisioning in Office 365 fails #995 // TermSet not found #994 var context = termModelHost.HostClientContext; if (IsSharePointOnlineContext(context)) { var term = termModelHost.HostTerm; var currentLabel = FindLabelInTerm(term, definition); if (currentLabel == null) { TryRetryService.TryWithRetry(() => { currentLabel = FindLabelInTerm(term, definition); return(currentLabel != null); }); } if (currentLabel == null) { throw new SPMeta2Exception(string.Format("Cannot find a term label after provision")); } } }
private void DeployTermUnderTerm(object modelHost, TermModelHost termModelHost, TaxonomyTermDefinition termModel) { var term = termModelHost.HostTerm; var currentTerm = FindTermInTerm(term, termModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); if (currentTerm == null) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term"); currentTerm = termModel.Id.HasValue ? term.CreateTerm(termModel.Name, termModel.LCID, termModel.Id.Value) : term.CreateTerm(termModel.Name, termModel.LCID); currentTerm.SetDescription(termModel.Description, termModel.LCID); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term"); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } termModelHost.HostTermStore.CommitAll(); }
private void DeployTermLabel(object modelHost, TermModelHost termModelHost, TaxonomyTermLabelDefinition labelModel) { var termStore = termModelHost.HostTermStore; var context = termStore.Context; var term = termModelHost.HostTerm; var currentLabel = FindLabelInTerm(term, labelModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentLabel, ObjectType = typeof(Label), ObjectDefinition = labelModel, ModelHost = modelHost }); if (currentLabel == null) { TraceService.Verbose((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Label"); currentLabel = term.CreateLabel(labelModel.Name, labelModel.LCID, labelModel.IsDefault); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentLabel, ObjectType = typeof(Label), ObjectDefinition = labelModel, ModelHost = modelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term"); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentLabel, ObjectType = typeof(Label), ObjectDefinition = labelModel, ModelHost = modelHost }); } termStore.CommitAll(); context.ExecuteQueryWithTrace(); }
public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext) { var modelHost = modelHostContext.ModelHost; var model = modelHostContext.Model; var childModelType = modelHostContext.ChildModelType; var action = modelHostContext.Action; var definition = model.WithAssertAndCast <TaxonomyTermDefinition>("model", value => value.RequireNotNull()); Term currentTerm = null; TermGroup group = null; TermSet termSet = null; TermStore termStore = null; TermModelHost localModelHost = new TermModelHost(); if (modelHost is TermModelHost) { var h = (modelHost as TermModelHost); group = h.HostGroup; termSet = h.HostTermSet; termStore = h.HostTermStore; currentTerm = FindTermInTerm(h.HostTerm, definition); localModelHost.HostGroup = group; localModelHost.HostTermSet = termSet; localModelHost.HostTerm = currentTerm; localModelHost.HostTermStore = termStore; } else if (modelHost is TermSetModelHost) { var h = (modelHost as TermSetModelHost); termStore = h.HostTermStore; group = h.HostGroup; termSet = h.HostTermSet; currentTerm = FindTermInTermSet(h.HostTermSet, definition); localModelHost.HostGroup = group; localModelHost.HostTermSet = termSet; localModelHost.HostTerm = currentTerm; localModelHost.HostTermStore = termStore; } action(localModelHost); }
public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action) { var definition = model.WithAssertAndCast <TaxonomyTermDefinition>("model", value => value.RequireNotNull()); Term currentTerm = null; TermGroup group = null; TermSet termSet = null; TermStore termStore = null; TermModelHost localModelHost = new TermModelHost(); if (modelHost is TermModelHost) { var h = (modelHost as TermModelHost); group = h.HostGroup; termSet = h.HostTermSet; termStore = h.HostTermStore; currentTerm = FindTermInTerm(h.HostTerm, definition); localModelHost.HostGroup = group; localModelHost.HostTermSet = termSet; localModelHost.HostTerm = currentTerm; localModelHost.HostTermStore = termStore; } else if (modelHost is TermSetModelHost) { var h = (modelHost as TermSetModelHost); termStore = h.HostTermStore; group = h.HostGroup; termSet = h.HostTermSet; currentTerm = FindTermInTermSet(h.HostTermSet, definition); localModelHost.HostGroup = group; localModelHost.HostTermSet = termSet; localModelHost.HostTerm = currentTerm; localModelHost.HostTermStore = termStore; } action(localModelHost); }
private void DeployTermUnderTerm(object modelHost, TermModelHost groupModelHost, TaxonomyTermDefinition termModel) { var termStore = groupModelHost.HostTermStore; var termSet = groupModelHost.HostTerm; var currentTerm = FindTermInTerm(termSet, termModel); var termName = NormalizeTermName(termModel.Name); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); if (currentTerm == null) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new Term"); currentTerm = termModel.Id.HasValue ? termSet.CreateTerm(termName, termModel.LCID, termModel.Id.Value) : termSet.CreateTerm(termName, termModel.LCID, Guid.NewGuid()); MapTermProperties(currentTerm, termModel, true); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term"); MapTermProperties(currentTerm, termModel, false); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); } try { termStore.CommitAll(); currentTerm.RefreshLoad(); termStore.Context.ExecuteQueryWithTrace(); } catch (Exception e) { var context = groupModelHost.HostClientContext; if (!IsSharePointOnlineContext(context)) { throw; } var serverException = e as ServerException; if (serverException != null && ReflectionUtils.GetHResultValue(serverException).Value == -2146233088 && serverException.ServerErrorTypeName == "Microsoft.SharePoint.Taxonomy.TermStoreOperationException") { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing Term"); currentTerm = FindTermInTerm(termSet, termModel); if (currentTerm == null) { TryRetryService.TryWithRetry(() => { currentTerm = FindTermInTerm(termSet, termModel); return(currentTerm != null); }); } MapTermProperties(currentTerm, termModel, false); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentTerm, ObjectType = typeof(Term), ObjectDefinition = termModel, ModelHost = modelHost }); termStore.CommitAll(); termStore.Context.ExecuteQueryWithTrace(); } } }