2010-07-02 4 views
1

나는 현재 DateTime.Now이보다 작은 여부를 확인, 모든 페이지를 검색하고 코드에 발표되지 않은 사람을 필터링하고 있습니다 : I SharePoint에서하지 않도록 해당하는 CAML 쿼리를 것입니다 무엇 SharePoint 2007에서 게시 된 페이지 만 검색하는 CAML 쿼리?

static readonly DateTime IMMEDIATE_PUBLISH = new DateTime(1900, 1, 1); 

public static DateTime PublicationDate(this SPListItem item) 
{ 
    // get start publish date 
    PublishingPage page = item.Publishing(); 
    if (page != null) 
    { 
     bool isPublished = (page.ListItem.File != null) 
      ? (page.ListItem.File.Level == SPFileLevel.Published) 
      : true; 
     bool isApproved = (page.ListItem.ModerationInformation != null) 
      ? (page.ListItem.ModerationInformation.Status == SPModerationStatusType.Approved) 
      : true; 
     if (isPublished && isApproved && (DateTime.Now < page.EndDate)) 
     { 
      return page.StartDate == IMMEDIATE_PUBLISH ? page.CreatedDate : page.StartDate; 
     } 
     return DateTime.MaxValue; 
    } 
    // not a scheduled item. treat as published 
    return DateTime.MinValue; 
} 

데이터베이스에서 불필요한 항목을 가져 오겠습니까?

+1

이 샘플에 따르면 (http://www.stum.de/2008/03/13/caml-queries /), 대답이 무엇이든, 그것은 끔직한 신성 모독이 될 것이며 Sharepoint가 악마 화신이 된 이유를 상기시킵니다. – Juliet

+0

CAML.Net http://camldotnet.codeplex.com/ 조금 도움이됩니다. – skolima

답변

2

내 오피온에서는 너무 많이 확인하고 있습니다.

당신은 당신이/출판 승인되지 않은 페이지를 찾을 수 있습니다 일반 사용자의 경우 "PublishingStartDate"< = 오늘과 "PublishingExpirationDate"> 오늘

을 확인해야합니다.
이러한 페이지를 찾을 권한이있는 사용자는 현재 버전이 게시/승인되지 않았기 때문에 제외시키지 않을 수도 있습니다. 하나 이상의 버전이 게시 된 페이지 만 원하는 경우 "_UIVersion"> = 512

+0

문제는 결과를 캐시에 저장하려고하는데 초기 쿼리가 전체 권한으로 실행되고 있다는 것입니다. 지금 캐시가 어떻게 작동하는지에 대해 조사하고 있습니다. – skolima

+0

질문에 지정한 기준으로 실행하면 이전 버전이 게시/승인 되었음에도 불구하고 새 버전이 진행중인 페이지가 제외됩니다. –

2

다음은 문서가 게시되었는지 확인하기위한 CAML 쿼리의 예입니다. 나는 이것이 상당히 오래된 질문이라는 것을 알고 있지만 잘하면이 방법을 연구하는 다음 사람에게 유용 할 수 있습니다.

<Query> 
    <Where> 
     <And> 
      <Or> 
       <Leq> 
        <FieldRef Name='PublishingStartDate'/> 
        <Value Type='DateTime' IncludeTimeValue='TRUE'> 
         <Today/> 
        </Value> 
       </Leq> 
       <IsNull> 
        <FieldRef Name='PublishingStartDate'/> 
       </IsNull> 
      </Or> 
      <Or> 
       <Geq> 
        <FieldRef Name='PublishingExpirationDate'/> 
        <Value Type='DateTime' IncludeTimeValue='TRUE'> 
         <Today/> 
        </Value> 
       </Geq> 
       <IsNull> 
        <FieldRef Name='PublishingExpirationDate'/> 
       </IsNull> 
      </Or> 
     </And> 
    </Where> 
</Query> 
관련 문제