我建议不仅考虑系统帐户是否具有访问权限,而且还要考虑文件的签出日期是否与文件的创建日期相同。
public bool IsFirstCheckIn(SPListItem item)
{
// Item not null!
if (item != null)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
// Open privileged Site
using (SPSite pSite = new SPSite(site.ID))
{
// Open privileged Web
using (SPWeb pWeb = pSite.OpenWeb(web.ID))
{
// Create privileged SharePoint-Objects
SPList pList = GetList(pWeb, list.ID);
SPListItem pItem = GetListItem(pList, item.UniqueId);
// Check the Item
if (pItem == null)
{
// Can't access
return true;
}
else if (pItem.File != null && pItem.File.CheckedOutByUser != null)
{
// If the Item's File and checked out User is set, check if checked out date is equal creation date
return (pItem.File.CheckedOutDate.ToLocalTime() == pItem.File.TimeCreated.ToLocalTime());
}
}
}
});
}
return false;
}
使用系统账号,绝对是个好主意,否则授权设置会出问题。使用“本地时间”而不是“UTC-Time”,SharePoint 在存储时处理时区!
似乎,SharePoint 使用 UTF-FileTime 来存储文件的创建时间,但使用为 SPWeb 或 SPUser 定义的时区来存储基于“本地时间”的文件签出日期。
幸运的是,DateTime 值确实知道它是什么,并且可以在调用 ToLocalTime() 时将其转换为相同的“本地时间”。奇怪的是,在调用 ToUniversalTime(); 时它仍然是一个文件时间;