SharePoint 2013 CSOM 上传文档和更改列值
SharePoint 2013 CSOM Upload Doc and Change Column Values
我想将文档上传到 SharePoint 2013 文档库并为其中三列设置值。
我正在 运行 遵循 Visual Studio 中单元测试的 C# 代码:
using (var ctx = new ClientContext($"{spRoot}/{spPathToFolder}"))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, targetFileUrl, ms, true);
var uploadedFile = ctx.Web.GetFileByServerRelativeUrl(targetFileUrl);
var listItem = uploadedFile.ListItemAllFields;
listItem["Title"] = "title";
listItem["UPRN"] = "uprn";
listItem["KeystoneDocType"] = "keystoneDocType";
listItem.File.CheckIn("Added by BizTalk", CheckinType.MajorCheckIn);
listItem.Update();
ctx.ExecuteQuery();
}
记录了以下路径变量值:
spRoot=[https://collaboration.xxx.com], spPathToFolder=[sites/HousingICTSolution/Technical]
targetFileUrl=[/sites/HousingICTSolution/Technical/AssetMgmtEfilesDemo/xxxLogo_190213115512.png]
文件上传正常(当我在 SharePoint 库中单击 link 时我可以查看它)但没有设置列值。另一个问题是执行行 "ctx.ExecuteQuery()" 导致抛出以下异常:
Message "The file AssetMgmtEfilesDemo/xxxLogo_190213115512.png has been modified by i:0#.w|xxx\adm-tco05544 on 13 Feb 2019 11:59:35 -0000." string
我是用户"adm-tco05544"。谁能建议如何防止异常?
在更新文件项目字段之前,请先签出,然后更新列表字段值,最后签入文件,这里有一个工作片段供您参考:
ClientContext ctx = new ClientContext("http://sp/sites/dev");
using (FileStream fs=new FileStream(@"C:\Test.jpg",FileMode.Open))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, "/sites/dev/MyDocLibraryName/Test.jpg", fs, true);
var uploadedFile = ctx.Web.GetFileByServerRelativeUrl("/sites/dev/MyDocLibraryName/Test.jpg");
ctx.Load(uploadedFile);
ctx.ExecuteQuery();
if (uploadedFile.CheckOutType==CheckOutType.None)
{
uploadedFile.CheckOut();
}
var listItem = uploadedFile.ListItemAllFields;
listItem["Title"] = "title";
listItem["UPRN"] = "uprn";
listItem["KeystoneDocType"] = "keystoneDocType";
listItem.Update();
ctx.ExecuteQuery();
listItem.File.CheckIn("Added by BizTalk", CheckinType.MajorCheckIn);
ctx.ExecuteQuery();
}
我想将文档上传到 SharePoint 2013 文档库并为其中三列设置值。
我正在 运行 遵循 Visual Studio 中单元测试的 C# 代码:
using (var ctx = new ClientContext($"{spRoot}/{spPathToFolder}"))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, targetFileUrl, ms, true);
var uploadedFile = ctx.Web.GetFileByServerRelativeUrl(targetFileUrl);
var listItem = uploadedFile.ListItemAllFields;
listItem["Title"] = "title";
listItem["UPRN"] = "uprn";
listItem["KeystoneDocType"] = "keystoneDocType";
listItem.File.CheckIn("Added by BizTalk", CheckinType.MajorCheckIn);
listItem.Update();
ctx.ExecuteQuery();
}
记录了以下路径变量值:
spRoot=[https://collaboration.xxx.com], spPathToFolder=[sites/HousingICTSolution/Technical]
targetFileUrl=[/sites/HousingICTSolution/Technical/AssetMgmtEfilesDemo/xxxLogo_190213115512.png]
文件上传正常(当我在 SharePoint 库中单击 link 时我可以查看它)但没有设置列值。另一个问题是执行行 "ctx.ExecuteQuery()" 导致抛出以下异常:
Message "The file AssetMgmtEfilesDemo/xxxLogo_190213115512.png has been modified by i:0#.w|xxx\adm-tco05544 on 13 Feb 2019 11:59:35 -0000." string
我是用户"adm-tco05544"。谁能建议如何防止异常?
在更新文件项目字段之前,请先签出,然后更新列表字段值,最后签入文件,这里有一个工作片段供您参考:
ClientContext ctx = new ClientContext("http://sp/sites/dev");
using (FileStream fs=new FileStream(@"C:\Test.jpg",FileMode.Open))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, "/sites/dev/MyDocLibraryName/Test.jpg", fs, true);
var uploadedFile = ctx.Web.GetFileByServerRelativeUrl("/sites/dev/MyDocLibraryName/Test.jpg");
ctx.Load(uploadedFile);
ctx.ExecuteQuery();
if (uploadedFile.CheckOutType==CheckOutType.None)
{
uploadedFile.CheckOut();
}
var listItem = uploadedFile.ListItemAllFields;
listItem["Title"] = "title";
listItem["UPRN"] = "uprn";
listItem["KeystoneDocType"] = "keystoneDocType";
listItem.Update();
ctx.ExecuteQuery();
listItem.File.CheckIn("Added by BizTalk", CheckinType.MajorCheckIn);
ctx.ExecuteQuery();
}