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

Sitecore以编程方式设置多引用字段值,sitecore,Sitecore,如果我有项目/ID的集合,如何以编程方式设置多引用字段值 例如,生成以下原始值“{guid1}{guid2}{guid3}…” 在我的具体案例中,我需要导入一个项目树,在一个级别上,一个父级使用子级作为存储库,并且它还具有一个基于某些条件的子级子集的多引用列表。我想基于排序或过滤构建一个灵活的列表,然后设置父字段的值,而无需特定于列表类型的代码——父字段可以是任何列表 例如,为每个父级生成带有规则“where[is odd]orderby child desc”的自定义列表,并设置为字段“od

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

例如,生成以下原始值“{guid1}{guid2}{guid3}…”


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

例如,为每个父级生成带有规则“where[is odd]orderby child desc”的自定义列表,并设置为字段“odd”

  • Parent1->Parent1[“奇数”]=5
    • 二,
    • 五,
  • Parent2->Parent2[“奇数”]=3,1
    • 一,
    • 二,
    • 三,

使用class
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();
//不完整的代码段假定变量项具有列表字段“References”
//和不可数引用
Sitecore.Text.ListString referenceValue=新建Sitecore.Text.ListString();
foreach(引用中的ID)
{
字符串idString=id.ToString();
如果(!referenceValue.Contains(idString))
{
referencesValue.Add(idString);
}
}    
item.Editing.BeginEdit();
item[“References”]=referencesValue.ToString();
item.Editing.EndEdit();

使用class
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();
//不完整的代码段假定变量项具有列表字段“References”
//和不可数引用
Sitecore.Text.ListString referenceValue=新建Sitecore.Text.ListString();
foreach(引用中的ID)
{
字符串idString=id.ToString();
如果(!referenceValue.Contains(idString))
{
referencesValue.Add(idString);
}
}    
item.Editing.BeginEdit();
item[“References”]=referencesValue.ToString();
item.Editing.EndEdit();

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

    Sitecore.Data.Fields.MultilistField multiselectField = item.Fields["multiselect"]
返回的列表中的单个成员
Sitecore.Data.Fields.MultilistField.GetItems()
方法从不为空。如果用户删除了某个项目而未更新对该项目的引用,则
GetItems()
方法将该项从其结果中排除。[…]您可以使用
Sitecore.Data.Fields.MulitlistField.Add()
方法,并使用
Sitecore.Data.Fields.MulitlistField.Remove()
方法


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

    Sitecore.Data.Fields.MultilistField multiselectField = item.Fields["multiselect"]
返回的列表中的单个成员
Sitecore.Data.Fields.MultilistField.GetItems()
方法从不为空。如果用户删除了某个项目而未更新对该项目的引用,则
GetItems()
方法将该项从其结果中排除。[…]您可以使用
Sitecore.Data.Fields.MulitlistField.Add()
方法,并使用
Sitecore.Data.Fields.MulitlistField.Remove()
方法



我很困惑,你15分钟前问了这个问题,不到一分钟就自己回答了…你只是在寻找选票,还是…?这也不是最好的方式。参考@ZacharyKniebel Stackoverflow允许(甚至鼓励)在之后立即发布问题和答案,只要问题没有被提出。我只是分享了我的研究成果,因为我无法在网络上轻松找到问题的答案。我遇到的问题是,我需要一个通用的解决方案来设置多个引用值,而无需为字段指定显式类型。出于好奇,我可以问一下为什么不能为字段指定显式类型吗?(另外,如果您可以将该场景的因素添加到您的问题中,那就太好了)故意不指定字段类型,以便解决方案是通用的,并且可以使用不同的类型-Multilist、Treelist或任何自定义类型,只要原始值的格式保持不变。我很困惑,您15分钟前问过这个问题,然后在不到一分钟后自己回答…你只是在寻找选票,还是…?这也不是最好的方式。参考@ZacharyKniebel Stackoverflow允许(甚至鼓励)在之后立即发布问题和答案,只要问题没有被提出。我只是分享了我的研究成果,因为我无法在网络上轻松找到问题的答案。我遇到的问题是,我需要一个通用的解决方案来设置多个引用值,而无需为字段指定显式类型。出于好奇,我可以问一下为什么不能为字段指定显式类型吗?(另外,如果您可以将该场景的因素添加到您的问题中,那就太好了)故意不指定字段类型,以便解决方案是通用的,并且可以使用不同的类型-Multilist、Treelist或任何自定义类型,只要原始值的格式保持不变。字段类型可能重复"... 对堆栈交换一直明确鼓励用户回答自己的问题。。。“@ZacharyKniebel我的问题和答案都比你提到的可能重复的问题和答案更一般(更好)是的,杰夫·阿特伍德甚至在博客上写道:不喜欢这个问题/答案?然后否决它。足够公平-我会纠正它。可能的重复”。。。对堆栈交换一直明确鼓励用户回答自己的问题。。。“@ZacharyKniebel我的问题和答案都比你提到的可能重复的问题和答案更一般(更好)是的,杰夫·艾特伍德甚至在博客上写道:不喜欢这个问题/答案?那么就否决它。足够公平了——我会纠正它。的确如此