我有一個代碼(就像原型)Sitecore項目不包含所有字段,爲什麼?
private void WriteDataToItems(Item rootitem, IQueryable<LanguageData> languageData, SC.Globalization.Language sclng)
{
if (rootitem == null)
return;
rootitem = IncVersion(rootitem);
Response.Write(string.Format("Item {0} - {1}<br/>", rootitem.DisplayName, rootitem.Paths.FullPath));
rootitem.Editing.BeginEdit();
try
{
foreach (Field fld in rootitem.Fields.Where(d => !d.Shared && !d.Name.StartsWith("__") && d.Name.Trim() != ""))
{
Response.Write(string.Format("Processing fld: - {0}<br/>", fld.ID.Guid.ToString()));
var data = languageData.FirstOrDefault(
d => (string.Compare(d.FieldName, fld.Name, true) == 0) && (string.Compare(d.ItemID, rootitem.ID.Guid.ToString(), true) == 0));
if (data != null)
{
string newValue = null;
switch (sclng.Name)
{
case "en":
newValue = data.En;
break;
case "nn-NO":
newValue = data.nnNO;
break;
case "sv-SE":
newValue = data.svSE;
break;
case "da-DK":
newValue = data.DaDK;
break;
case "de-DE":
newValue = data.deDE;
break;
default:
newValue = null;
break;
}
if (newValue != null)
{
Response.Write(string.Format("Save field with Id:{0} New Value:{1}<br/>", fld.ID.Guid, newValue));
fld.Value = newValue;
}
}
}
rootitem.Editing.EndEdit();
}
catch (Exception ex)
{
rootitem.Editing.CancelEdit();
}
foreach (Item cd in rootitem.GetChildren())
{
WriteDataToItems(cd, languageData, sclng);
}
}
和rootitem.Fields對象不包含在模板中描述的所有領域的問題,我只是有一個備案,它包含只是有一些領域值但不包含帶空數據的字段
foreach (Field fld in rootitem.Fields.Where(d => !d.Shared && !d.Name.StartsWith("__") && d.Name.Trim() != ""))
如何獲取所有自定義字段的名稱? 我應該使用模板數據嗎?
只是出於好奇:什麼ReadAll()做?這個函數是否讀取了不可見的字段? –
@ RG-3:ReadAll()將獲取該項目的模板,在其上調用「GetFields」,然後迭代這些字段,將每個字段添加到FieldCollection對象的專用_fields []數組中。 –