我的问题与@Bob Black的Cannot access sitecore item field via API基本相同,但我同意@ techphoria414,认为已接受的解决方案不是必需的,在我的情况下不起作用。
用我自己的话说,我有一个模板Departure
,我已经使用了大约一年,现在以编程方式创建和更新项目。我在模板中添加了一个新字段Ship
。当我创建一个新项时,当我尝试使用departure.Fields["Ship"]
访问它时,该字段显示为null。如果我跨过导致异常的行,那么在调用departure.Editing.EndEdit()
后,如果我调用Ship
,我可以看到departure.Fields.ToList()
字段。如果我通过Sitecore GUI将模板添加到内容项,我可以看到该字段并使用它,如果我查看基于模板的内容项,我也可以看到新字段。所以只有当我以编程方式访问模板/项时才会为null。
我的本地计算机上运行了一个本地sqlserver的sitecore,并发布到我的本地计算机。
这是我的代码
String ship = "MSDisaster";
foreach (Language language in SiteLanguages)
{
departure = departure.Database.GetItem(departure.ID, language);
departure.Editing.BeginEdit();
try
{
departure.Fields["StartDate"].Value = GetSitecoreDateString(xDep, "StartDate");
departure.Fields["EndDate"].Value = GetSitecoreDateString(xDep, "EndDate");
departure.Fields["Guaranteed"].Value = xDep.SelectSingleNode("./Guaranteed").InnerText;
departure.Fields["Status"].Value = xDep.SelectSingleNode("./Status").InnerText;
departure.Fields["Currency"].Value = ConvertLanguageToCurrency(language);
departure.Fields["Market"].Value = ConvertLanguageToMarket(language);
departure.Fields["TwinSharePrice"].Value = GetPrice(xDep, "twn", language);
departure.Fields["SinglePrice"].Value = GetPrice(xDep, "sgl", language);
if (!String.IsNullOrEmpty(ship))
departures.Fields["Ship"].Value = ship;
}
catch (Exception ex)
{
departure.Editing.CancelEdit();
log.Error(ex);
throw ex;
}
departure.Editing.EndEdit();
}
那么,我如何获得该领域?
谢谢,
詹姆斯。
答案 0 :(得分:2)
首先,您是否在sitecore管理中看到了Web数据库中的字段。 如果你的项目有字段,那么你应该检查项目上分配的模板,并仔细检查该字段实际上被称为“发货”并检查案例,因为我之前已将此视为一个问题。
同时检查项目和字段的安全性,以防任何人改变任何内容。 接下来尝试从项目中获取数据,但不使用字段名称,而是使用字段ID。
让我知道你怎么走?
克里斯
答案 1 :(得分:0)
抱歉Chris,StackOverflow以及其他看过我问题的人。这是一个愚蠢的错字。它甚至出现在我的问题中
departure.Fields["SinglePrice"].Value = GetPrice(xDep, "sgl", language);
if (!String.IsNullOrEmpty(ship))
departures.Fields["Ship"].Value = ship;
}
departure
是我正在处理的项目,departures
是它所属的集合...... doh。
那么这里的协议是什么?我现在是否删除了我的问题,因为它不能帮助任何人更好地编写代码?
詹姆斯。