2009-10-22 13 views

答えて

10

を返しません。データベースは時間とともに変化し、これによりコードが破損します。むしろ、Item.Fieldsを使用してください。これはすべての必要なフィールドを含むコレクションです。 Item.Fields.ReadAll()を使用するよりも、すべてのフィールドがロードされていることを確認したい場合は(遅延読み込みではなく、本当に読み込まれます)。

編集:クエリーではアイテムを作成することができないので、デフォルト値の動作を見逃し、インテリジェントなSitecoreキャ​​ッシングをまったく使用しないことに注意してください。

+0

遅延読み込みを実行したい。これを解決する方法を教えてください? –

6

フィールドを検索する前にSitecore.Context.Item.Fields.ReadAll()に電話してみてください。

+0

これを行うと、返されるフィールド名はすべてシステムフィールドです。私は、ユーザー定義テンプレートフィールド名を取得する方法があることを望んでいた。 – BraveNewMath

2

最初の試行が、すべてのフィールドあなたはサイトコアデータベースを自分で照会してみてください例なしで

SELECT I2.Name FROM 
Items AS I 
JOIN UnversionedFields AS UF ON I.ID = UF.ItemId 
JOIN VersionedFields AS V ON I.ID = V.ItemId 
JOIN SharedFields AS S ON I.ID = S.ItemId 
JOIN Items AS I2 ON I2.ID = UF.FieldId OR I2.ID=V.FieldId OR I2.ID = S.FieldId  
WHERE I.ID = '110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9' 
GROUP BY I2.Name 
+0

これは正常に動作するようですが、私はまだ私が探していた正確な値を見つけることができませんでした。アイテムから 選択値 I WITH(NOLOCK)内にI.TemplateID = T.IDの項目Tに参加 内側はF.ItemIdのフィールドFに参加 =インナーF.FieldId = FN上FNアイテムを結合I.ID .ID I.templateID = '{xxxxxxx}' とFN.Name = '説明' – Netferret

1

item.Fieldsを呼び出すと、テンプレートに指定したアイテムフィールドと、すべてのアイテムに存在するSitecore標準フィールドが取得されます。テンプレートで定義したフィールドのみが必要な場合は、以下のコードを使用してください。もちろん、これはフィールド名が「__」で始まらないことを前提としています。

// Get Fields directly from the Item 
List<string> fieldNames = new List<string>(); 
item.Fields.ReadAll(); 
FieldCollection fieldCollection = item.Fields; 
foreach (Field field in fieldCollection) 
{ 
    //Use the following check if you do not want 
    //the Sitecore Standard Fields 
    if (!field.Name.StartsWith("__")) 
    { 
     fieldNames.Add(field.Name); 
    } 
} 
+0

私はこの問題を自分で見てきましたが、基本的には同じソリューションを使用していますが、Linqを使ってforeachに「__」のチェックを入れました foreach(fieldCollection.Where(x = !x.Name.StartsWith( "__"))) あなたはどう思いますか?より良い、悪い、より速い実行? –

関連する問題