如果我有项目/ ID的集合,如何以编程方式设置多引用字段值?
E.g。建立以下原始值" {guid1} | {guid2} | {guid3} ..."
在我的特定情况下,我需要导入一个项目树,并且在一个级别上,父项使用子项作为存储库,并且它还根据某些条件为子项的子集提供了多个引用列表。我想基于排序或过滤构建一个灵活的列表,然后设置父级的值而不使特定于列表类型的代码 - 父字段可以是任何列表。
E.g。具有规则&#34的自定义列表;其中[奇数]由子desc排序"为每个Parent构建并设置为字段" Odd"
答案 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()
方法。