C# MS graph API:设置driveitem c的自定义标记(列)#
我使用ms graph将文件上载到文档库中。 我已经为大文件实现了一个代码,它可以正常工作 但我不知道如何设置“驱动器”的自定义列 这是我的密码。我已经玩了额外的数据,但我没有成功 有什么想法吗 谢谢C# MS graph API:设置driveitem c的自定义标记(列)#,c#,sharepoint,microsoft-graph-api,C#,Sharepoint,Microsoft Graph Api,我使用ms graph将文件上载到文档库中。 我已经为大文件实现了一个代码,它可以正常工作 但我不知道如何设置“驱动器”的自定义列 这是我的密码。我已经玩了额外的数据,但我没有成功 有什么想法吗 谢谢 public static async Task<DriveItem> uploadFile() { Stream fileStream = new FileStream(@"C:\prueba\prueba2.xlsx
public static async Task<DriveItem> uploadFile()
{
Stream fileStream = new FileStream(@"C:\prueba\prueba2.xlsx", FileMode.Open);
DriveItem uploadedFile = null;
UploadSession uploadSession = null;
uploadSession = await objGraphServiceClient.Sites["SITE_ID"].Lists["LIST-ID"].Drive.Root.ItemWithPath("EISE_PRUEBA2.xlsx").CreateUploadSession().Request().PostAsync();
if (uploadSession != null)
{
// Chunk size must be divisible by 320KiB, our chunk size will be slightly more than 1MB
int maxSizeChunk = (320 * 1024 * 10) * 4;
ChunkedUploadProvider uploadProvider = new ChunkedUploadProvider(uploadSession, objGraphServiceClient, fileStream, maxSizeChunk);
var chunkRequests = uploadProvider.GetUploadChunkRequests();
var exceptions = new List<Exception>();
var readBuffer = new byte[maxSizeChunk];
foreach (var request in chunkRequests)
{
var result = await uploadProvider.GetChunkRequestResponseAsync(request, readBuffer, exceptions);
if (result.UploadSucceeded)
{
uploadedFile = result.ItemResponse;
var uno = uploadedFile.AdditionalData;
var add = new Dictionary<string, object>();
add.Add("PositionCode", "Pos-01-" + DateTime.Now.ToString("mmmm"));
add.Add("Category", "Category_" + DateTime.Now.ToString("mmmm"));
var temp = new ListItem();
temp.Id = uploadedFile.Id;
temp.Fields = new FieldValueSet();
temp.Fields.AdditionalData = add;
var driveItem = new DriveItem();
//var users = await objGraphServiceClient.Users.Request().GetAsync();
// var driveItem = new DriveItem
// {
// Name = "new-file-name.xlsx"
// };
// //driveItem.CreatedByUser = users.First();
// driveItem.AdditionalData = new Dictionary<string, object>();
// driveItem.AdditionalData.Add(new KeyValuePair<string, object>("@odata.category", "Category" + DateTime.Now.ToString("mmmm")));
// driveItem.AdditionalData.Add(new KeyValuePair<string, object>("@odata.PositionCode", "Pos-01-" + DateTime.Now.ToString("mmmm")));
// var updatedItem = await objGraphServiceClient.Sites["hispaniaassetmanagement.sharepoint.com,d04053f4-eb19-4ed8-9785-0f7aa2a908c8,6227bfe6-c7cb-4990-8f51-0a7fd8c28c1b"].Lists["67987e61-86cc-4f3e-93f2-0b6699b97a94"].Drive.Items[uploadedFile.Id].Request().UpdateAsync(driveItem);
//objGraphServiceClient.Sites["hispaniaassetmanagement.sharepoint.com,d04053f4-eb19-4ed8-9785-0f7aa2a908c8,6227bfe6-c7cb-4990-8f51-0a7fd8c28c1b"].Lists["67987e61-86cc-4f3e-93f2-0b6699b97a94"].Drive.Items["017ZCPK2DMW4ZEXUK7QZHJ7CQLPY7GHDFJ"]
uploadedFile.ListItem.Fields.AdditionalData = add;
var updatedItem = await objGraphServiceClient.Sites["SITE-ID"].Lists["LIST-ID"].Drive.List.Items[uploadedFile.Id].Request().UpdateAsync(uploadedFile.ListItem);
}
}
}
return (uploadedFile);
}
公共静态异步任务上载文件()
{
Stream fileStream=new fileStream(@“C:\prueba\prueba2.xlsx”,FileMode.Open);
DriveItem uploadedFile=null;
UploadSession UploadSession=null;
uploadSession=Wait objGraphServiceClient.Sites[“SITE_ID”]。Lists[“LIST-ID”]。Drive.Root.ItemWithPath(“EISE_PRUEBA2.xlsx”)。CreateUploadSession().Request().PostAsync();
if(上传会话!=null)
{
//块大小必须可以被320KiB整除,我们的块大小将略大于1MB
int-maxSizeChunk=(320*1024*10)*4;
ChunkedUploadProvider uploadProvider=新的ChunkedUploadProvider(uploadSession、objGraphServiceClient、fileStream、maxSizeChunk);
var chunkRequests=uploadProvider.GetUploadChunkRequests();
var exceptions=新列表();
var readBuffer=新字节[maxSizeChunk];
foreach(chunkRequests中的var请求)
{
var result=await uploadProvider.GetChunkRequestResponseAsync(请求、读取缓冲区、异常);
if(result.uploadsuccessed)
{
uploadedFile=result.ItemResponse;
var uno=uploadedFile.AdditionalData;
var add=新字典();
add.add(“PositionCode”,“Pos-01-”+DateTime.Now.ToString(“mmmm”));
add.add(“Category”,“Category_u”+DateTime.Now.ToString(“mmmm”));
var temp=新列表项();
temp.Id=uploadedFile.Id;
临时字段=新字段值集();
temp.Fields.AdditionalData=添加;
var driveItem=新的driveItem();
//var users=await objGraphServiceClient.users.Request().GetAsync();
//var driveItem=新的driveItem
// {
//Name=“新文件名.xlsx”
// };
////driveItem.CreatedByUser=users.First();
//driveItem.AdditionalData=新字典();
//AdditionalData.Add(新的KeyValuePair(“@odata.category”,“category”+DateTime.Now.ToString(“mmmm”));
//driveItem.AdditionalData.Add(新的键值对(“@odata.PositionCode”,“Pos-01-”+DateTime.Now.ToString(“mmmm”));
//var updateItem=wait objGraphServiceClient.Sites[“hispaniaassetmanagement.sharepoint.com,d04053f4-eb19-4ed8-9785-0f7aa2a908c86227bfe6-c7cb-4990-8f51-0a7fd8c28c1b]”。列表[“67987e61-86cc-4f3e-93f2-0b6699b97a94]”。驱动器。项目[uploadedFile.Id]。请求()。更新同步(项目驱动程序);
//objGraphServiceClient.Sites[“hispaniaassetmanagement.sharepoint.com,d04053f4-eb19-4ed8-9785-0F7AA2A908C86227BFE6-c7cb-4990-8f51-0a7fd8c28c1b]”。列表[“67987e61-86cc-4f3e-93f2-0b6699b97a94]”。驱动器。项目[“017ZCPK2DMW4ZEXUK7QZHJ7CQLPY7GHDFJ”]
uploadedFile.ListItem.Fields.AdditionalData=add;
var updateItem=wait objGraphServiceClient.Sites[“SITE-ID”]。Lists[“LIST-ID”]。Drive.LIST.Items[uploadedFile.ID]。Request().updateSync(uploadedFile.ListItem);
}
}
}
返回(上传文件);
}
我在SDK中找到了使用RESTAPI的解决方案。
使用图形浏览器将是:
修补程序:{siteID}/lists/{ListId}/items/{ItemId}/fields
内容类型:application/json
{
“自定义列”:“值”
}
但是!!!如果您想要更新上传文件的文件,该文件返回一个驱动器项,那么解决方案是
var result = await uploadProvider.GetChunkRequestResponseAsync(request, readBuffer, exceptions);
if (result.UploadSucceeded)
{
uploadedFile = result.ItemResponse;
string webApiUrl = "https://graph.microsoft.com/v1.0/sites/"+ siteIDDMS + "/drives/"+driveIDHAMSLib+"/items/"+uploadedFile.Id+"/listItem/fields";
JObject paramsJson = new JObject()
{
["Category"] = "NewCat_" + DateTime.Now.ToString("mmmm")
};
await RunRestApi(webApiUrl, accessToken, paramsJson,"PATCH", Display);
}
顺便说一下。。。有人知道使用SDK是否可以实现这一点吗?我在SDK中使用rest API找到了解决方案。 使用图形浏览器将是: 修补程序:{siteID}/lists/{ListId}/items/{ItemId}/fields 内容类型:application/json { “自定义列”:“值” }
但是!!!如果您想要更新上传文件的文件,该文件返回一个驱动器项,那么解决方案是
var result = await uploadProvider.GetChunkRequestResponseAsync(request, readBuffer, exceptions);
if (result.UploadSucceeded)
{
uploadedFile = result.ItemResponse;
string webApiUrl = "https://graph.microsoft.com/v1.0/sites/"+ siteIDDMS + "/drives/"+driveIDHAMSLib+"/items/"+uploadedFile.Id+"/listItem/fields";
JObject paramsJson = new JObject()
{
["Category"] = "NewCat_" + DateTime.Now.ToString("mmmm")
};
await RunRestApi(webApiUrl, accessToken, paramsJson,"PATCH", Display);
}
顺便说一下。。。有人知道使用SDK是否可以实现这一点吗?我不确定“设置“驱动器”的自定义列”是什么意思。您遇到了什么错误?抱歉,在documentLib中,我们创建了更多自定义列,如类别、子类别等。。。当我们使用MS graph库上传文档时,我不知道如何设置该值。谢谢,我不想把它们列出来。我想把它们放好。顺便说一下,如果你误解了,我正在使用MS图形。在文档库中,每个
DriveItem
都有一个关联的ListItem
,该列表项保存其元数据(即自定义列)。这些必须使用单独的API调用作为不同的实体进行处理。我不确定“设置‘驱动器’的自定义列”是什么意思。您遇到了什么错误?抱歉,在documentLib中,我们创建了更多自定义列,如类别、子类别等。。。当我们使用MS graph库上传文档时,我不知道如何设置该值。谢谢,我不想把它们列出来。我想把它们放好。顺便说一下,如果你误解了,我正在使用MS图形。在文档库中,每个DriveItem
都有一个关联的ListItem
,该列表项保存其元数据(即自定义列)。必须使用单独的API调用将它们作为不同的实体进行处理。