Types Sitecore-获取项目的字段名

Types Sitecore-获取项目的字段名,types,sitecore,field,Types,Sitecore,Field,我想获取项的字段名列表,但无法使其正常工作 这是我迄今为止的尝试: if (pathItemInLanguage.Versions.GetVersions().Length == 0) { Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion(); //Popu

我想获取项的字段名列表,但无法使其正常工作

这是我迄今为止的尝试:

if (pathItemInLanguage.Versions.GetVersions().Length == 0)
                        {
                            Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion();

                            //Populate the new language version with values:
                            newItemLangVersion.Editing.BeginEdit();

                            newItemLangVersion.Fields.ReadAll();
                            foreach (Field field in newItemLangVersion.Fields)
                            {
                                string dn = "nix";
                                dn = field.DisplayName;
                                string n = "nix";
                                n = field.Name;
                                string k = "nix";
                                k = field.Key;
                                string xy = "nix";
                                xy = field.ToString();

                                if ((FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is HtmlField) ||
                                    (FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is TextField))
                                {
                                    newItemLangVersion.Fields[field.Name].Value = "new";
                                }
                            }
                            newItemLangVersion.Editing.EndEdit();
我从字段中读取的这些字符串都并没有给出项的实际字段名。应用程序作为模块在Sitecore桌面中运行


我遗漏了什么?

我更新了我的答案。您需要以下一种方式执行:检查字段是否为标准模板字段,并检查字段的类型:

请像这样做:

   if (pathItemInLanguage.Versions.GetVersions().Length == 0)
     {
        Item newItemLangVersion =  pathItemInLanguage.Versions.AddVersion();
        //Populate the new language version with values:
         //Populate the new language version with values:
        newItemLangVersion.Editing.BeginEdit();

        newItemLangVersion.Fields.ReadAll();

        foreach (Field field in newItemLangVersion.Fields)
        {
            if (!IsStandardTemplateField(field) && (field is HtmlField || field is TextField))
            newItemLangVersion.Fields[field.Name].Value = "new";
        }
        newItemLangVersion.Editing.EndEdit();
      }
您有一个方法来检查是否是模板字段,因为您不需要修改此类字段

  public bool IsStandardTemplateField(
       Field field)
    {
        Sitecore.Data.Templates.Template template = Sitecore.Data.Managers.TemplateManager.GetTemplate(
          Sitecore.Configuration.Settings.DefaultBaseTemplate,
          field.Database);
        Sitecore.Diagnostics.Assert.IsNotNull(template, "template");
        return template.ContainsField(field.ID);
    }

使用以下工具使其正常工作:

if ((FieldTypeManager.GetField(field) is HtmlField) || (FieldTypeManager.GetField(field) is TextField)) {
...
}

是否尝试使用(new Sitecore.SecurityModel.SecurityDisabler())添加?否,但将实际字段名作为字符串传递,如newItemLangVersion.Fields[“Title”]。Value=“new”;作品安全仍然是个问题吗?是的,可能是个问题。请在调试模式下检查您的Sitecore.Context.UserName是什么?然后检查你对你想编辑的物品有什么权利,只要你这么做了。用户是sitecore\admin,这是预期的,因为应用程序在sitecore桌面上作为模块运行。它们的
field.Name
field.Key
值是什么?它们是空的吗?它们里面有什么东西吗?那对我不起作用,因为我有很多不同领域的不同物品。我需要一种通用的方法来实现这一点。我想运行项目,为System/languages下的所有语言创建版本,并使用虚拟文本来处理文本字段和HTML字段。所有语言的项目版本创建已经开始工作,但我无法将虚拟文本放入项目中。困难的部分是这些项基于不同的模板,因此它们具有不同的字段类型和字段名。尝试了一下,但在新版本中仍然没有文本。VisualStudio发出警告,条件字段为HtmlField,而另一个字段从未满足。“警告1:给定的表达式从来不是提供的('Sitecore.Data.Fields.HtmlField')类型”,标准模板字段会发生什么情况?您正在更新它们吗?:)我不知道你的意思。你能解释一下吗?当你运行newItemLangVersion.Fields.ReadAll()时;foreach(newItemLangVersion.Fields中的字段){正在解析所有Sitecore字段,包括Sitecore标准字段,如“\uuuuu渲染、\uuuuu增强规则等,如果这些字段是文本字段或Html字段类型,则正在更新这些字段噢,我明白了。我会遇到问题吗,因为我实际上就是这么做的:newItemLangVersion.Fields[Field.Name].Value=defaultLangItem.Fields[field.Name].ToString();