Sitecore以编程方式设置多个引用字段值

时间:2014-10-24 16:10:10

标签: sitecore

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

E.g。建立以下原始值" {guid1} | {guid2} | {guid3} ..."


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

E.g。具有规则&#34的自定义列表;其中[奇数]由子desc排序"为每个Parent构建并设置为字段" Odd"

  • Parent1 - > Parent1 [" Odd"] = 5
    • 2
    • 5
  • Parent2 - > Parent2 [" Odd"] = 3,1
    • 1
    • 2
    • 3

2 个答案:

答案 0 :(得分:4)

使用班级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();

答案 1 :(得分:2)

根据Zachary提供的食谱链接,这似乎是访问这样一个领域的正确方法:

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

返回列表的各个成员   Sitecore.Data.Fields.MultilistField.GetItems()方法永远不会为空。如果用户删除了项目而未更新对该项目的引用,则   GetItems()方法会从结果中排除该项目。 [...]您可以使用以下项目将项目添加到支持的字段类型   Sitecore.Data.Fields.MulitlistField.Add()方法,并使用。删除项目   Sitecore.Data.Fields.MulitlistField.Remove()方法。