protected void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel)
        {
            if (!string.IsNullOrEmpty(termModel.Description))
            {
                currentTerm.SetDescription(termModel.Description, termModel.LCID);
            }

            if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
            {
                currentTerm.CustomSortOrder = termModel.CustomSortOrder;
            }

            if (termModel.IsAvailableForTagging.HasValue)
            {
                currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
            }

#if !NET35
            foreach (var customProp in termModel.CustomProperties.Where(p => p.Override))
            {
                currentTerm.SetCustomProperty(customProp.Name, customProp.Value);
            }
#endif

#if !NET35
            foreach (var customProp in termModel.LocalCustomProperties.Where(p => p.Override))
            {
                currentTerm.SetLocalCustomProperty(customProp.Name, customProp.Value);
            }
#endif
        }
Ejemplo n.º 2
0
        private void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel)
        {
            currentTerm.SetDescription(termModel.Description, termModel.LCID);

            foreach (var customProp in termModel.CustomProperties.Where(p => p.Override))
            {
                currentTerm.SetCustomProperty(customProp.Name, customProp.Value);
            }
        }
Ejemplo n.º 3
0
        protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
        {
            Term result = null;

            var context = termSet.Context;

            if (termModel.Id.HasValue)
            {
                var scope = new ExceptionHandlingScope(context);
                using (scope.StartScope())
                {
                    using (scope.StartTry())
                    {
                        result = termSet.Terms.GetById(termModel.Id.Value);
                        context.Load(result);
                    }

                    using (scope.StartCatch())
                    {
                    }
                }

                context.ExecuteQueryWithTrace();
            }
            else if (!string.IsNullOrEmpty(termModel.Name))
            {
                var termName = NormalizeTermName(termModel.Name);

                var terms = termSet.GetTerms(new LabelMatchInformation(context)
                {
                    Lcid            = termModel.LCID,
                    TermLabel       = termName,
                    TrimUnavailable = false
                });

                context.Load(terms);
                context.ExecuteQueryWithTrace();

                result = terms.FirstOrDefault();
            }

            if (result != null &&
                result.ServerObjectIsNull.HasValue &&
                result.ServerObjectIsNull == false)
            {
                context.Load(result);
                context.ExecuteQueryWithTrace();

                return(result);
            }

            return(null);
        }
Ejemplo n.º 4
0
        protected Term FindTermInTermSet(TermSet termSet, TaxonomyTermDefinition termModel)
        {
            Term result = null;

            if (termModel.Id.HasValue)
            {
                result = termSet.GetTerm(termModel.Id.Value);
            }
            else if (!string.IsNullOrEmpty(termModel.Name))
            {
                result = termSet.GetTerms(termModel.Name, termModel.LCID, false).FirstOrDefault();
            }

            return(result);
        }
Ejemplo n.º 5
0
        private Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
        {
            Term result = null;

            if (termModel.Id.HasValue)
            {
                result = term.Terms.FirstOrDefault(t => t.Id == termModel.Id.Value);
            }
            else if (!string.IsNullOrEmpty(termModel.Name))
            {
                result = term.Terms.FirstOrDefault(t => t.Name == termModel.Name);
            }

            return(result);
        }
Ejemplo n.º 6
0
        protected Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
        {
            Term result = null;

            var context = term.Context;

            // TODO

            if (termModel.Id.HasValue)
            {
                var scope = new ExceptionHandlingScope(context);
                using (scope.StartScope())
                {
                    using (scope.StartTry())
                    {
                        result = term.Terms.GetById(termModel.Id.Value);
                        context.Load(result);
                    }

                    using (scope.StartCatch())
                    {
                    }
                }
            }
            else if (!string.IsNullOrEmpty(termModel.Name))
            {
                var terms = term.Terms;

                context.Load(terms);
                context.ExecuteQueryWithTrace();

                result = term.Terms.FirstOrDefault(t => t.Name == termModel.Name);
            }

            if (result != null && result.ServerObjectIsNull == false)
            {
                context.Load(result);
                context.ExecuteQueryWithTrace();

                return(result);
            }

            return(null);
        }
Ejemplo n.º 7
0
        public void CanDeploy_TaxonomyFieldBindedToTermById()
        {
            var termSet = new TaxonomyTermSetDefinition
            {
                Name        = Rnd.String(),
                Description = Rnd.String(),
            };

            var term = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Description = Rnd.String(),
                Id          = Guid.NewGuid()
            };

            var taxField = ModelGeneratorService.GetRandomDefinition <TaxonomyFieldDefinition>(def =>
            {
                def.TermSetName = termSet.Name;
                def.TermId      = term.Id.Value;
            });

            var taxonomyModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddRandomTermStore(termStore =>
                {
                    termStore.AddRandomTermGroup(group =>
                    {
                        group.AddTaxonomyTermSet(termSet, t =>
                        {
                            t.AddTaxonomyTerm(term);
                        });
                    });
                });
            });

            var fieldModel = SPMeta2Model
                             .NewSiteModel(site =>
            {
                site.AddTaxonomyField(taxField);
            });

            TestModels(new[] { taxonomyModel, fieldModel });
        }
Ejemplo n.º 8
0
        protected Term FindTermInTerm(Term term, TaxonomyTermDefinition termModel)
        {
            Term result = null;
            IEnumerable <Term> results = null;

            var context = term.Context;

            // TODO

            if (termModel.Id.HasValue)
            {
                var id = termModel.Id.Value;

                results = context.LoadQuery(term.Terms.Where(t => t.Id == id));
                context.ExecuteQueryWithTrace();
            }
            else if (!string.IsNullOrEmpty(termModel.Name))
            {
                var name = termModel.Name;

                //var terms = term.Terms;

                //context.Load(terms);
                //context.ExecuteQueryWithTrace();


                results = context.LoadQuery(term.Terms.Where(t => t.Name == name));
                context.ExecuteQueryWithTrace();
                //result = term.Terms.FirstOrDefault(t => t.Name == termModel.Name);
            }

            result = results.FirstOrDefault();

            if (result != null)
            {
                context.Load(result);
                context.ExecuteQueryWithTrace();

                return(result);
            }

            return(null);
        }
Ejemplo n.º 9
0
        private void MapTermProperties(Term currentTerm, TaxonomyTermDefinition termModel, bool isNewObject)
        {
            if (!string.IsNullOrEmpty(termModel.Description))
            {
                currentTerm.SetDescription(termModel.Description, termModel.LCID);
            }

            if (!string.IsNullOrEmpty(termModel.CustomSortOrder))
            {
                currentTerm.CustomSortOrder = termModel.CustomSortOrder;
            }

            if (termModel.IsAvailableForTagging.HasValue)
            {
                currentTerm.IsAvailableForTagging = termModel.IsAvailableForTagging.Value;
            }

            UpdateTermProperties(currentTerm, termModel, false, isNewObject);
            UpdateTermProperties(currentTerm, termModel, true, isNewObject);
        }
Ejemplo n.º 10
0
        public override ModelNode ReverseSingleHost(object reverseHost, ReverseOptions options)
        {
            var typedHost = (reverseHost as TaxonomyTermReverseHost);
            var item      = typedHost.HostTerm;

            var def = new TaxonomyTermDefinition();

            def.Id = item.Id;

            def.Name        = item.Name;
            def.Description = item.Description;


            def.IsAvailableForTagging = item.IsAvailableForTagging;

            return(new TaxonomyTermModelNode
            {
                Options = { RequireSelfProcessing = true },
                Value = def
            });
        }
Ejemplo n.º 11
0
 public static ModelNode AddHostTaxonomyTerm(this ModelNode model, TaxonomyTermDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }
Ejemplo n.º 12
0
        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();
                }
            }
        }
Ejemplo n.º 13
0
        private void UpdateTermProperties(Term currentTerm, TaxonomyTermDefinition termModel, bool isLocalProperties, bool isNewObject)
        {
            // TaxonomyTermCustomProperty.Overwrite set to false - No properties are created. #932
            // https://github.com/SubPointSolutions/spmeta2/issues/932

            // 1 - set everything what is not there
            var srcProperties = termModel.CustomProperties;
            IDictionary <string, string> dstProperties = null;

            if (!isNewObject)
            {
                dstProperties = currentTerm.CustomProperties;
            }

            if (isLocalProperties)
            {
                TraceService.Information((int)LogEventId.ModelProvision, "Processing local custom properties");

                srcProperties = termModel.LocalCustomProperties;

                if (!isNewObject)
                {
                    dstProperties = currentTerm.LocalCustomProperties;
                }
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvision, "Processing custom properties");

                srcProperties = termModel.CustomProperties;

                if (!isNewObject)
                {
                    dstProperties = currentTerm.CustomProperties;
                }
            }

            foreach (var prop in srcProperties)
            {
                var propName  = prop.Name;
                var propValue = prop.Value;

                var propExist = false;

                if (isNewObject)
                {
                    propExist = false;
                }
                else
                {
                    propExist = dstProperties.Keys
                                .FirstOrDefault(k => k.ToUpper() == propName.ToUpper())
                                != null;
                }

                if (!propExist)
                {
                    TraceService.Information((int)LogEventId.ModelProvision,
                                             string.Format("Property [{0}] does not exist. Adding with value:[{1}]",
                                                           new object[] { prop.Name, prop.Value }));

                    if (isLocalProperties)
                    {
                        currentTerm.SetLocalCustomProperty(propName, propValue);
                    }
                    else
                    {
                        currentTerm.SetCustomProperty(propName, propValue);
                    }
                }
                else
                {
                    TraceService.Information((int)LogEventId.ModelProvision,
                                             string.Format("Property [{0}] exists. No need to add it. Optionally, it will be owerwritten if .Override is set 'true'",
                                                           new object[] { propName, propValue }));
                }
            }

            // 2 - override as needed
            foreach (var prop in srcProperties.Where(p => p.Override))
            {
                var propName  = prop.Name;
                var propValue = prop.Value;

                TraceService.Information((int)LogEventId.ModelProvision,
                                         string.Format("Overwriting property [{0}] with value:[{1}] as .Override is set 'true'",
                                                       new object[] { propName, propValue }));

                if (isLocalProperties)
                {
                    currentTerm.SetLocalCustomProperty(propName, propValue);
                }
                else
                {
                    currentTerm.SetCustomProperty(propName, propValue);
                }
            }
        }
Ejemplo n.º 14
0
        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
                });
            }

            termStore.CommitAll();
            termStore.Context.ExecuteQueryWithTrace();
        }
 public static TModelNode AddHostTaxonomyTerm <TModelNode>(this TModelNode model, TaxonomyTermDefinition definition,
                                                           Action <TaxonomyTermModelNode> action)
     where TModelNode : ModelNode, ITaxonomyTermHostModelNode, new()
 {
     return(model.AddTypedDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }
        public void Can_Reverse_Terms()
        {
            var siteTermStore = new TaxonomyTermStoreDefinition
            {
                Id   = null,
                Name = string.Empty,
                UseDefaultSiteCollectionTermStore = true
            };

            var termGroup1 = new TaxonomyTermGroupDefinition
            {
                Name = Rnd.String(),
                Id   = Rnd.Guid()
            };

            var termSet1 = new TaxonomyTermSetDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Contact     = Rnd.String(),
                Description = Rnd.String()
            };

            var term1 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            var term2 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            var term3 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            // only witin a tes term group
            // performance boost
            var groupName = termGroup1.Name;
            var options   = ReverseOptions.Default
                            .AddFilterOption <TaxonomyTermGroupDefinition>(g => g.Name == groupName);

            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddTaxonomyTermStore(siteTermStore, store =>
                {
                    store.AddTaxonomyTermGroup(termGroup1, group =>
                    {
                        group.AddTaxonomyTermSet(termSet1, termSet =>
                        {
                            termSet.AddTaxonomyTerm(term1, t =>
                            {
                                t.AddTaxonomyTerm(term3);
                            });
                            termSet.AddTaxonomyTerm(term2);
                        });
                    });
                });
            });

            DeployReverseAndTestModel(model, options);
        }
Ejemplo n.º 17
0
 public static ModelNode AddHostTaxonomyTerm(this ModelNode model, TaxonomyTermDefinition definition)
 {
     return(AddHostTaxonomyTerm(model, definition, null));
 }
Ejemplo n.º 18
0
 public static ModelNode AddTaxonomyTerm(this ModelNode model, TaxonomyTermDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
Ejemplo n.º 19
0
        public void CanDeployTaxonomyField()
        {
            // define a taxonomy
            // term store -> group -> term set -> terms
            var taxDefaultTermStore = new TaxonomyTermStoreDefinition
            {
                UseDefaultSiteCollectionTermStore = true
            };

            var taxTermGroup = new TaxonomyTermGroupDefinition
            {
                Name = "M2 Taxonomy"
            };

            var taxTermSet = new TaxonomyTermSetDefinition
            {
                Name = "Locations"
            };

            var taxTermLondon = new TaxonomyTermDefinition
            {
                Name = "London"
            };

            var taxTermSydney = new TaxonomyTermDefinition
            {
                Name = "Sydney"
            };

            // define the field
            var location = new TaxonomyFieldDefinition
            {
                Title        = "Location",
                InternalName = "dcs_LocationTax",
                Group        = "SPMeta2.Samples",
                Id           = new Guid("FE709AC2-E3A1-4A25-8F71-3480667CD98F"),
                IsMulti      = false,
                UseDefaultSiteCollectionTermStore = true,
                TermSetName = taxTermSet.Name
            };

            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site
                .AddHostTaxonomyTermStore(taxDefaultTermStore, store =>
                {
                    store.AddTaxonomyTermGroup(taxTermGroup, group =>
                    {
                        group.AddTaxonomyTermSet(taxTermSet, termSet =>
                        {
                            termSet
                            .AddTaxonomyTerm(taxTermLondon)
                            .AddTaxonomyTerm(taxTermSydney);
                        });
                    });
                })
                .AddTaxonomyField(location);
            });

            DeployModel(model);
        }
Ejemplo n.º 20
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeploySimpleTaxonomyTerms()
        {
            // define term store
            var defaultSiteTermStore = new TaxonomyTermStoreDefinition
            {
                UseDefaultSiteCollectionTermStore = true
            };

            // define group
            var clientsGroup = new TaxonomyTermGroupDefinition
            {
                Name = "Clients"
            };

            // define term sets
            var smallBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Small Business"
            };

            var mediumBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Medium Business"
            };

            var enterpriseBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Enterprise Business"
            };

            // define terms
            var microsoft = new TaxonomyTermDefinition
            {
                Name = "Microsoft"
            };

            var apple = new TaxonomyTermDefinition
            {
                Name = "Apple"
            };

            var oracle = new TaxonomyTermDefinition
            {
                Name = "Oracle"
            };

            var subPointSolutions = new TaxonomyTermDefinition
            {
                Name = "SubPoint Solutions"
            };

            // setup the model
            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddTaxonomyTermStore(defaultSiteTermStore, termStore =>
                {
                    termStore.AddTaxonomyTermGroup(clientsGroup, group =>
                    {
                        group
                        .AddTaxonomyTermSet(smallBusiness, termSet =>
                        {
                            termSet.AddTaxonomyTerm(subPointSolutions);
                        })
                        .AddTaxonomyTermSet(mediumBusiness)
                        .AddTaxonomyTermSet(enterpriseBusiness, termSet =>
                        {
                            termSet
                            .AddTaxonomyTerm(microsoft)
                            .AddTaxonomyTerm(apple)
                            .AddTaxonomyTerm(oracle);
                        });
                    });
                });
            });

            DeployModel(model);
        }
Ejemplo n.º 21
0
        private void DeployTermUnderTermSet(object modelHost, TermSetModelHost groupModelHost, TaxonomyTermDefinition termModel)
        {
            var termSet = groupModelHost.HostTermSet;

            var currentTerm = FindTermInTermSet(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);

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

            groupModelHost.HostTermStore.CommitAll();
        }
 public static TModelNode AddTaxonomyTerm <TModelNode>(this TModelNode model, TaxonomyTermDefinition definition,
                                                       Action <TaxonomyTermModelNode> action)
     where TModelNode : ModelNode, ITaxonomyTermHostModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
 public static TModelNode AddHostTaxonomyTerm <TModelNode>(this TModelNode model, TaxonomyTermDefinition definition)
     where TModelNode : ModelNode, ITaxonomyTermHostModelNode, new()
 {
     return(AddHostTaxonomyTerm(model, definition, null));
 }
Ejemplo n.º 24
0
        private void Internal_TaxonomyFieldBinded_ById_Within_SiteCollectionGroup(bool isTermSet, bool isTerm)
        {
            var termSetName = Rnd.String();
            var termName    = Rnd.String();

            var termSet1Id = Rnd.Guid();
            var termSet2Id = Rnd.Guid();
            var termSet3Id = Rnd.Guid();

            var term1Id = Rnd.Guid();
            var term2Id = Rnd.Guid();
            var term3Id = Rnd.Guid();

            // same same names
            var termSet1 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Description = Rnd.String(),
            };

            var termSet2 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Id          = termSet2Id,
                Description = Rnd.String(),
            };

            var termSet3 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Description = Rnd.String(),
            };

            var term1 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term1Id
            };

            var term2 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term2Id,
            };

            var term3 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term3Id
            };

            var termGroup1 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
            });

            var termGroup2 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
                def.IsSiteCollectionGroup = true;
            });

            var termGroup3 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
            });

            // binding to the 2nd one
            var taxField = ModelGeneratorService.GetRandomDefinition <TaxonomyFieldDefinition>(def =>
            {
                def.IsSiteCollectionGroup = true;

                // these should be resolvbed as we are scoped to the 2nd group within site collection group

                if (isTermSet)
                {
                    def.TermSetId = termSet2.Id;
                }

                if (isTerm)
                {
                    def.TermId = term2.Id;
                }
            });

            var taxonomyModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddRandomTermStore(termStore =>
                {
                    termStore.AddTaxonomyTermGroup(termGroup1, group =>
                    {
                        group.AddTaxonomyTermSet(termSet1, t =>
                        {
                            t.AddTaxonomyTerm(term1);
                        });
                    });

                    termStore.AddTaxonomyTermGroup(termGroup2, group =>
                    {
                        group.AddTaxonomyTermSet(termSet2, t =>
                        {
                            t.AddTaxonomyTerm(term2);
                        });
                    });

                    termStore.AddTaxonomyTermGroup(termGroup3, group =>
                    {
                        group.AddTaxonomyTermSet(termSet3, t =>
                        {
                            t.AddTaxonomyTerm(term3);
                        });
                    });
                });
            });

            var fieldModel = SPMeta2Model
                             .NewSiteModel(site =>
            {
                site.AddTaxonomyField(taxField);
            });

            TestModels(new ModelNode[] { taxonomyModel, fieldModel });
        }