# Manage product categories in InRiver \*and\* Litium

**URL:** <https://forum.litium.com/t/manage-product-categories-in-inriver-and-litium/89>\
**Category:** Questions\
**Tags:** inriver\
**Created:** [May 18, 2018, 12:57pm UTC](https://forum.litium.com/t/manage-product-categories-in-inriver-and-litium/89 "2018-05-18T12:57:28Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Daniel](https://avatars.discourse-cdn.com/v4/letter/d/3ec8ea/32.png) [@Daniel](https://forum.litium.com/u/Daniel)\
**Post date:** [May 18, 2018, 12:57pm UTC](https://forum.litium.com/t/manage-product-categories-in-inriver-and-litium/89/1 "2018-05-18T12:57:28Z")

</div>

My customer wants to be able to manage product structures both in InRiver and in Litium. But when products are imported into Litium all non-InRiver categories get wiped. Any ideas of how to get around this?

Litium version: 6.0.0

---

<div class="post-metadata">

**Author:** ![anusha.ganegoda](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/anusha.ganegoda/32/58_2.png) [@anusha.ganegoda](https://forum.litium.com/u/anusha.ganegoda)\
**Post date:** [May 18, 2018, 1:00pm UTC](https://forum.litium.com/t/manage-product-categories-in-inriver-and-litium/89/2 "2018-05-18T13:00:13Z")

</div>

So, if products are planned in new categories from Litium backoffice, you wants “inRiver” to not remove them, and only add/remove categories planned from inRiver.

Following is the place to modify with sample code: (the code is done in inRiver addOn 5.3.9, and would be same in inRiver addOn 6.0.1  
Remember to add the field “inRiverCategories” to the product field template.

\Src\Litium.AddOns.InRiver.Integration\Import\BaseProductImport.cs

```auto
     private void SetPublishInCategories(BaseProduct baseProduct, BaseProductPostProcessArgs postProcessArgs)
        {
            if (postProcessArgs.CategoryIdsToPublishIn != null)
            {
                var publishedIn = new List<BaseProductToCategoryLink>();
                var categoryIds = postProcessArgs.CategoryIdsToPublishIn.OrderBy(x => x.Length).ToList();

                var currentCategoryIds = baseProduct.CategoryLinks.Select(x => _categoryService.Get(x.CategorySystemId)?.Id).ToList();
                var prevCategoryIdsFromInRiver = (baseProduct.Fields["inRiverCategories"] as string)?.Split(",")?.ToList() ?? new List<string>();
                baseProduct.Fields["inRiverCategories"] = string.Join(",", categoryIds);

                var categoryIdsAddedFromLitiumBo = currentCategoryIds.Except(prevCategoryIdsFromInRiver).ToList();
                categoryIdsAddedFromLitiumBo.RemoveAll(x => string.IsNullOrEmpty(x));

                categoryIds.AddRange(categoryIdsAddedFromLitiumBo);
                categoryIds = categoryIds.Distinct().ToList();

                var variantSystemIds = _variantService.GetByBaseProduct(baseProduct.SystemId).Select(x => x.SystemId).ToList();
                for (var i = 0; i < categoryIds.Count; i++)
                {
                    var publishedInCategory = _categoryService.Get(categoryIds[i]);
                    if (publishedInCategory != null)
                    {
                        var baseProductCategoryLink = new BaseProductToCategoryLink(publishedInCategory.SystemId)
                        {
                            MainCategory = i == 0,
                            ActiveVariantSystemIds = new HashSet<Guid>(variantSystemIds)
                        };
                        publishedIn.Add(baseProductCategoryLink);
                    }
                }

               
                baseProduct.CategoryLinks = publishedIn;
            }
        }

```
