无法以编程方式在Sitecore中的模板上访问新字段

时间:2011-05-10 05:07:31

标签: sitecore

我的问题与@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();
}

那么,我如何获得该领域?

谢谢,

詹姆斯。

2 个答案:

答案 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。

那么这里的协议是什么?我现在是否删除了我的问题,因为它不能帮助任何人更好地编写代码?

詹姆斯。