# Fieldvalueselectortype on productmodel

**URL:** <https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239>\
**Category:** Questions\
**Tags:** litium-7\
**Created:** [October 6, 2021, 8:18am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239 "2021-10-06T08:18:58Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![totte.perera](https://avatars.discourse-cdn.com/v4/letter/t/4af34b/32.png) [@totte.perera](https://forum.litium.com/u/totte.perera)\
**Post date:** [October 6, 2021, 8:18am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/1 "2021-10-06T08:18:58Z")

</div>

How can I use [FieldValueSelectorType](https://docs.litium.com/api-reference/api?product=Litium&version=7.3&xref=Litium.Web.Models.Products.ProductModel.FieldValueSelectorType) value on the [productmodel](https://docs.litium.com/api-reference/api?product=Litium&version=7.3&xref=Litium.Web.Models.Products.ProductModel#Litium_Web_Models_Products_ProductModel_FieldValueSelector)?

It says here in the description that it

> “Gets or sets the field value selector.”

But its defined as:

```auto
public virtual ProductModel.FieldValueSelectorType FieldValueSelector { get; }

```

Im interested in having it as `VariantAndBaseProduct = 8` How can I make that happen?

Version 7.7.1

---

<div class="post-metadata">

**Author:** ![steve.redstorm](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/steve.redstorm/32/14_2.png) [@steve.redstorm](https://forum.litium.com/u/steve.redstorm)\
**Post date:** [October 6, 2021, 8:47am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/2 "2021-10-06T08:47:47Z")

</div>

Yes it is only “get” we must fix the documentation.  
This needs to be set on ProductModel initialization:

```auto
public ProductModel(BaseProduct baseProduct, Variant selectedVariant, FieldValueSelectorType fieldValueSelector, Lazy<ProductFieldTemplate> fieldTemplate, Lazy<ProductDisplayTemplate> displayTemplate)
        {
            BaseProduct = baseProduct;
            SelectedVariant = selectedVariant;
            FieldValueSelector = fieldValueSelector;
            _fieldTemplate = fieldTemplate;
            _displayTemplate = displayTemplate;
        }
```

---

<div class="post-metadata">

**Author:** ![totte.perera](https://avatars.discourse-cdn.com/v4/letter/t/4af34b/32.png) [@totte.perera](https://forum.litium.com/u/totte.perera)\
**Post date:** [October 7, 2021, 5:29am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/3 "2021-10-07T05:29:33Z")

</div>

What is the `FieldValueSelectorType` set to when using `ProductModelBuilder`?

---

<div class="post-metadata">

**Author:** ![steve.redstorm](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/steve.redstorm/32/14_2.png) [@steve.redstorm](https://forum.litium.com/u/steve.redstorm)\
**Post date:** [October 7, 2021, 1:14pm UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/4 "2021-10-07T13:14:41Z")

</div>

Not sure what you mean but this gets set in _ProductModelBuilderImpl.cs_ depending on what method (eg. _BuildFromVariant_ or _BuildFromBaseProduct_) is called to generate the _ProductModel_.  
Why do you need to set _FieldValueSelectorType_ your self, what are you trying to do?

---

<div class="post-metadata">

**Author:** ![totte.perera](https://avatars.discourse-cdn.com/v4/letter/t/4af34b/32.png) [@totte.perera](https://forum.litium.com/u/totte.perera)\
**Post date:** [October 8, 2021, 11:32am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/5 "2021-10-08T11:32:29Z")

</div>

I would like to know what FieldValueSelectorType is set to when using the different methods in ProductModelBuilder

---

<div class="post-metadata">

**Author:** ![steve.redstorm](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/steve.redstorm/32/14_2.png) [@steve.redstorm](https://forum.litium.com/u/steve.redstorm)\
**Post date:** [October 11, 2021, 7:43am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/6 "2021-10-11T07:43:57Z")

</div>

> [@steve.redstorm](#):
>
> ProductModelBuilderImpl.cs

```auto
        [Obsolete("Channel is mandatory, use overload.")]
        public override ProductModel BuildFromBaseProduct(BaseProduct baseProduct, WebSite webSite)
        {
            throw new NotSupportedException("Building ProductModel from baseProduct and website is not supported.");
        }

        public override ProductModel BuildFromBaseProduct(BaseProduct baseProduct, Channel channel)
        {
            if (baseProduct == null)
            {
                return null;
            }

            var variant = _variantService
                .GetByBaseProduct(baseProduct.SystemId)
                .FirstOrDefault(x => x.ChannelLinks.Any(z => z.ChannelSystemId == channel.SystemId));
            return variant == null ? null : BuildFromBaseProduct(baseProduct, variant);
        }

        public override ProductModel BuildFromBaseProduct(BaseProduct baseProduct, Variant selectedVariant)
        {
            return Create(baseProduct, selectedVariant);
        }

        public override ProductModel BuildFromBaseProduct(BaseProduct baseProduct)
        {
            if (baseProduct == null)
            {
                return null;
            }

            var channel = _routeRequestLookupInfoAccessor.RouteRequestLookupInfo?.Channel;
            if (channel == null)
            {
                return null;
            }

            var variant = _variantService
                .GetByBaseProduct(baseProduct.SystemId)
                .FirstOrDefault(x => x.ChannelLinks.Any(z => z.ChannelSystemId == channel.SystemId));
            return variant == null ? null : BuildFromBaseProduct(baseProduct, variant);
        }

        public override ProductModel BuildFromVariant(Variant variant)
        {
            if (variant == null)
            {
                return null;
            }

            return Create(null, variant);
        }

        public override ProductModel BuildFromVariant(Variant variant, BaseProduct baseProduct)
        {
            if (variant == null)
            {
                return null;
            }

            return Create(baseProduct, variant, ProductModel.FieldValueSelectorType.VariantAndBaseProduct);
        }

        private ProductModel Create(BaseProduct baseProduct, [NotNull] Variant selectedVariant, ProductModel.FieldValueSelectorType? fieldValueSelectorTypeDefault = null)
        {
            var fieldValueSelector = fieldValueSelectorTypeDefault ??
                (baseProduct == null ? ProductModel.FieldValueSelectorType.VariantAndBaseProduct : ProductModel.FieldValueSelectorType.BaseProductAndVariant);

            if (baseProduct == null)
            {
                baseProduct = _baseProductService.Get(selectedVariant.BaseProductSystemId);
            }
            else if (baseProduct.SystemId != selectedVariant.BaseProductSystemId)
            {
                throw new ArgumentException("Variant does not belong to the BaseProduct.", nameof(selectedVariant));
            }

            foreach (var validator in _renderingValidators)
            {
                if (!validator.Validate(baseProduct))
                {
                    return null;
                }
            }

            var fieldTemplate = new Lazy<ProductFieldTemplate>(() => _fieldTemplateService.Get<ProductFieldTemplate>(baseProduct.FieldTemplateSystemId));
            var displayTemplate = new Lazy<ProductDisplayTemplate>(() => _displayTemplateService.Get<ProductDisplayTemplate>(fieldTemplate.Value.DisplayTemplateSystemId));

            return new ProductModel(baseProduct, selectedVariant, fieldValueSelector, fieldTemplate, displayTemplate);
        }

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex030/uploads/litium/original/1X/12eddac3b8b661de1db86af10ac8151b571e6fb9.png) [@system](https://forum.litium.com/u/system)\
**Post date:** [November 8, 2021, 7:44am UTC](https://forum.litium.com/t/fieldvalueselectortype-on-productmodel/2239/7 "2021-11-08T07:44:26Z")

</div>

Closed on November 8, 2021, 7:44am UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
