我刚刚在SharePoint中遇到了一个看起来很烦人的“功能”(它可能是设计的,但其范围可能超出了这个问题)。
我正在帮助开发一个应用程序,用于检索存储在SharePoint上的特定文件的文件及其版本历史记录。此信息将上载到数据仓库,我们需要捕获的关键字段之一是文件版本最初上载(即创建)到SharePoint上的时间。
最初,这似乎相当简单,使用我们调用的(SharePoint WebServices)版本服务(versions.asmx):
SPVersion.GetVersions(fullpath);
返回类似于下面的XML结果(包括名为“created”的字段):
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetVersionsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <GetVersionsResult> <results xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <list id="{guid}"/> <versioning enabled="1"/> <settings url="http://SITE/_layouts/LstSetng.aspx?List={guid}"/> <result version="@6.0" url="http://SITE/PATH/FILENAME" created="12/8/2009 11:58 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> <result version="1.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/7/2009 4:10 PM" createdBy="DOMAIN\USER" size="148992" comments=""/> <result version="2.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:32 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> <result version="3.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:45 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> <result version="4.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:49 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> <result version="5.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:58 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> </results> </GetVersionsResult> </GetVersionsResponse> </soap:Body> </soap:Envelope>
一切都很好,直到你仔细观察所创造的领域 - 版本5&amp; 6具有完全相同的创建日期。进一步调查显示,该文档的所有版本都具有创建的日期时间,该日期时间与下一版本文档的实际创建日期时间相匹配。 I.E.当我检查SharePoint并查看版本历史记录时,我可以看到版本2实际上是在16:10创建的,这是上面显示版本1的时间。
我假设创建的字段实际上并不是创建的字段,而是一个修改后的字段,在修改文件并将其设置为“旧”版本时会考虑该字段。
有没有人遇到过这个问题,并找到了一种可靠的方法来让版本服务返回创建文件的实际时间,或者 - 使用上面的信息 - 是否有可靠的机制来获取文件的时间?
请注意,我们无法将SharePoint API / DLL用于此项目。
由于 克里斯
答案 0 :(得分:1)
这是一篇旧帖子,但感觉额外的评论将有助于未来的观点。
您可以在文档库上使用lists.asmx web services / GetListItems方法来检索第一个版本的原始创建日期。
使用GetVersions响应的结果进行混合,您可以获得有关文件/记录的所有信息。
versions.asmx / GetVersions响应显示的创建日期是版本历史列表中版本的创建日期,而不是源列表。版本历史列表与源列表不同。
此外,您还可以使用versions.asmx / GetVersions方法在自定义列表上提取版本历史记录。您不仅限于文档。
答案 1 :(得分:0)
如果您无法访问API,那么最小版本的创建字段是否会满足您的规则?在您的情况下,版本1.0。
只需在消费者中记录为什么需要这样做以及设计行为如何决定如何获得此值。
您还可以检查访问实际文档/项目是否会为您提供正确的创建日期,而不是依靠历史记录系统。