【问题标题】:Sitecore set multi reference field value programmaticallySitecore 以编程方式设置多参考字段值
【发布时间】:2019-11-16 19:45:19
【问题描述】:

如果我有项目/ID 集合,如何以编程方式设置多引用字段值?

例如构建以下原始值“{guid1}|{guid2}|{guid3}...”


在我的特定情况下,我需要导入一个项目树,并且在一个级别上,父级使用子级作为存储库,并且它还具有基于某些标准的子级子集的多引用列表。我想基于排序或过滤构建一个灵活的列表,然后设置父级的值,而不需要特定于列表类型的代码 - 父级字段可以是任何列表。

例如为每个父级构建具有规则“where [is odd] orderby child desc”的自定义列表并设置为字段“Odd”

  • Parent1 -> Parent1[“奇数”] = 5
    • 2
    • 5
  • Parent2 -> Parent2[“奇数”] = 3,1
    • 1
    • 2
    • 3

【问题讨论】:

标签: sitecore


【解决方案1】:

使用Sitecore.Text.ListString 类来构建价值

例子:

// Incomplete code snippet assumes variable Item item with list field "References" 
// and IEnumerable<ID> references

Sitecore.Text.ListString referencesValue = new Sitecore.Text.ListString();

foreach(ID id in references)
{
   string idString = id.ToString();
   if (!referencesValue.Contains(idString))
   {
       referencesValue.Add(idString);
   }
}    

item.Editing.BeginEdit();
item["References"] = referencesValue.ToString();
item.Editing.EndEdit();

【讨论】:

  • 我很困惑,你在 15 分钟前问了这个问题,不到一分钟后自己回答了这个问题……你只是在找票,还是……?
  • 这也不是最好的方法。参考Sitecore Content API Cookbook
  • @ZacharyKniebel Stackoverflow 允许(甚至鼓励)在未提出问题的情况下立即发布问题和答案。我只是分享了我的研究,因为我无法在网上轻松找到手头问题的答案。我遇到的问题是我需要一个通用的解决方案来设置多引用值,而无需为字段指定显式类型。
  • 很公平。出于好奇,请问您为什么不能为该字段指定显式类型? (另外,如果您可以将场景的因素添加到您的问题中,那就太好了)
  • 故意未指定字段类型,以便解决方案是通用的并且适用于不同类型 - Multilist、Treelist 或任何自定义类型,只要原始值的格式保持不变。
【解决方案2】:

根据 Zachary 提供的食谱链接,这似乎是访问此类字段的正确方法:

    Sitecore.Data.Fields.MultilistField multiselectField = item.Fields["multiselect"]

返回的列表中的各个成员 Sitecore.Data.Fields.MultilistField.GetItems() 方法永远不会为 Null。如果用户删除了一个项目而没有更新对该项目的引用,则 GetItems() 方法将该项目从其结果中排除。 [...] 您可以使用 Sitecore.Data.Fields.MulitlistField.Add() 方法,并使用 Sitecore.Data.Fields.MulitlistField.Remove() 方法。

【讨论】:

  • 确实如此。标记的答案被认为是不好的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多