質問

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);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top