システム アカウントにアクセス権があるかどうかだけでなく、ファイルのチェックアウト日がファイルの作成日と同じかどうかも考慮することをお勧めします。
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(); を呼び出している間はまだ File-Time になります。