(Sitecore 内の) アイテム内のすべてのフィールドを取得できますか?
-
05-07-2019 - |
質問
Sitecore の特定のアイテムのすべてのフィールドを取得する SQL クエリを作成しようとしています。
行き詰まっていると言うのは、控えめに言っても。
フィールド テーブルで自己結合を行う必要があると思いますが、問題が発生しています。
何かアイデアがある人はいますか?
解決
どのような場合でも、自分で Sitecore データベースにクエリを実行することは絶対に行わないでください。データベースは時間の経過とともに変化するため、コードが破損する可能性があります。むしろ、 Item.Fields
. 。これは、必要なフィールドをすべて含むコレクションです。すべてのフィールドがロードされていることを確認したい場合 (遅延ロードではなく実際にロードされている)、Item.Fields.ReadAll() を使用できます。
編集:また、クエリではアイテムを構築できないため、デフォルト値の動作を見逃し、インテリジェントな Sitecore キャッシュをまったく使用しないことに注意してください。
他のヒント
フィールドを検索する前に Sitecore.Context.Item.Fields.ReadAll()
を呼び出してみてください。
最初の試行ですが、すべてのフィールドを返しません
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
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);
}
}
所属していません StackOverflow