【问题标题】:MS graph API: Set custom tags (columns) of a DriveItem [duplicate]MS graph API:设置 DriveItem 的自定义标签(列)[重复]
【发布时间】:2019-05-20 15:27:08
【问题描述】:

我正在使用 ms graph 将文件上传到文档库。 我已经为大文件实现了一个代码,它可以工作 但我不知道如何设置“驱动器”的自定义列

这是我的代码。我玩过additionalData,但没有成功。

有什么想法吗??

谢谢

     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);
        }

【问题讨论】:

  • 我不确定您所说的“设置'驱动器'的自定义列”是什么意思。你遇到了什么错误?
  • 抱歉,在 documentLib 中,我们创建了更多自定义列作为类别、子类别等......当我们使用 MS 图形库上传文档时,我不知道如何设置这些值。谢谢
  • 我不想列出它们。我想设置它们。顺便说一句,我使用的是 MS 图形 API
  • 你误会了。在文档库中,每个 DriveItem 都有一个关联的 ListItem 来保存它的元数据(即自定义列)。这些必须使用单独的 API 调用作为不同的实体来处理。
  • 我不认为这是重复的。获取自定义元数据(如问题 55071910 中所述)并没有告诉我 set 我需要修补 fields 的字段以及哪个版本的 URL 可以工作,正如下面的答案所做的那样。这可能只是因为我还没有深入了解所有 Sharepoint 数据关系,但我真的不想为了继续工作而必须这样做,而对我来说,这就是 Stack Overflow 的全部意义所在。一个可以效仿的例子非常有用!

标签: c# sharepoint microsoft-graph-api sharepoint-documents


【解决方案1】:

我使用 SDK 中的其余 API 找到了解决方案。 使用图形资源管理器将是:

补丁:https://graph.microsoft.com/v1.0/sites/{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 实现???

【讨论】:

  • 可以通过这种方式使用graph api来完成: var putFileRequest = _graphClient.Sites[siteId].Drives[driveId].Root.ItemWithPath(fileName).Content.Request(); var fileItem = 等待 putFileRequest.PutAsync(fileStream); var updateFileTagsRequest = _graphClient.Sites[siteId].Drives[driveId].Items[fileItem.Id].ListItem.Fields.Request(); var fieldValueSet = new FieldValueSet { AdditionalData = new Dictionary{{ "ContentType", "Log" },{ "Document_Status", "Active" }}};等待 updateFileTagsRequest.UpdateAsync(fieldValueSet);
猜你喜欢
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多