在查看别人代码的时候,发现了个有意思的问题,使用client object model将一个文件check in
我使用的是如下语句获取file
Microsoft.SharePoint.Client.File fileUploaded = context.Web.GetFileByServerRelativeUrl(docPathUrl);
context.Load(fileUploaded);
context.ExecuteQuery();
if (fileUploaded.CheckOutType != CheckOutType.None)
{
fileUploaded.CheckIn("test", CheckinType.MajorCheckIn);
context.ExecuteQuery();
}
在代码执行到红色部分时候就报错“object does not belong to a list”。
第一反应是没找到文件所在的List,于是查看docPathUrl,发现是正确的url. 没有问题。继而在跟站点下面执行这段代码,发现运行正常,没有报错,经过一番波折后发现context在初始化的时候ClientContext context = new ClientContext(url)用的时候根站点的URL,而我的文档库在其中一个sub site上面,因为我的docPathUrl使用的是serverrelativeUrl,所以在获取fileUploaded的时候是能获取到的,但是在check in的时候就会报错。
于是将ClientContext context = new ClientContext(url)中的url变为该文档库所在的sub site的url后,语句运行就没有问题了。
结论:clientcontext初始化的时候URL要注意啊,尤其后面直接使用了context.web属性的时候。