문제

Sitecore의 주어진 항목의 모든 필드를 얻기 위해 SQL 쿼리를 작성하려고합니다.

내가 붙어 있다고 말하는 것은 그것을 가볍게 두는 것입니다.

필드 테이블에서 자체 결합해야한다고 생각하지만 매듭을 입고 있습니다.

누구든지 아이디어가 있습니까?

도움이 되었습니까?

해결책

어떤 경우에도 Sitecore 데이터베이스를 직접 쿼리하려고 시도하지 마십시오. 데이터베이스가 시간이 지남에 따라 변경되면 코드가 중단됩니다. 오히려 사용하십시오 Item.Fields. 이것은 필요한 모든 필드를 포함하는 컬렉션입니다. 모든 필드가 item.fields.readall ()을 사용할 수있는 것보다 모든 필드가로드되어 (실제로 게으른로드되지 않음)

편집 : 또한 쿼리를 사용하면 항목을 구성 할 수 없으므로 기본값의 동작을 놓치고 Intelligent 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.을 호출하면 템플릿에서 지정된 항목 필드와 모든 항목에 존재하는 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