![](/img/trans.png)
[英]CAML “In” Operator Equivalent For SharePoint Services 3 (SharePoint 2007)
[英]CAML query to retrieve only published pages from SharePoint 2007?
我目前正在檢索所有頁面並過濾掉未在代碼中發布的頁面,檢查DateTime.Now
是否小於此:
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;
}
什么是等效的CAML查詢,以便我不從數據庫中提取不必要的項目?
以下是用於檢查文檔發布的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>
在我的觀點中,你的檢查方式太多了。
您應該只檢查“PublishingStartDate”<=今天和“PublishingExpirationDate”>今天
對於普通用戶,您將找不到未發布/批准的頁面。
對於有權查找這些頁面的用戶,您可能不希望僅僅因為當前版本未發布/批准而將其排除。 如果您只想要發布至少一個版本的頁面,則可以添加“_UIVersion”> = 512的檢查
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.