使用Microsoft Graph SDK将ColumnDefinition添加到Sharepoint列表的Invali



我使用的是用于C#ASP.NET的Microsoft Graph SDK,当我尝试将新的ColumnDefinition添加到Sharepoint中的某个列表时出错。从SDK返回的异常只是说";InvalidRequest";。我已经尝试了很多更改,但找不到任何解决方案。使用图形资源管理器时,会正常添加列。

注意:

  • 列表类型是一个名为(document_2022_6(的文档库
  • Sharepoint上存在文档库
  • 文档库包含一些文档
  • Microsoft Graph SDK版本:4.45.0
  • 从头开始创建文档库时,通常会添加列
  • 只有在已经创建文档库时才会出现错误
  • 我正在使用Sharepoint Online
  • 使用图形资源管理器,可以工作

我用来添加列的代码是:

public async Task<bool> CreateColumnInDocumentLibrary(string columnName, string DriveListId)
{
ColumnDefinition newColumn = SetColumnDefinition(columnName); // columnName = "DocTags"
var createColumn = await _graphServiceClient
.Sites[siteId] // <site-id>
.Lists[DriveListId] // DriveListId = "c018992b-d95d-453a-9eff-9f17fb89cde6" (Document_2022_6)
.Columns
.Request()
.AddAsync(newColumn); // Raises the exception
return createColumn != null;
}
private ColumnDefinition SetColumnDefinition(string columnName)
{
ColumnDefinition newColumn = new ColumnDefinition
{
Name = columnName, // columnName = "DocTags"
DisplayName = columnName, // columnName = "DocTags"
Description = columnName, // columnName = "DocTags"
Indexed = true,
Hidden = false,
IsReorderable = true,
Text = new TextColumn
{
AllowMultipleLines = false,
AppendChangesToExistingText = false,
LinesForEditing = 0,
MaxLength = 255
}
};
return newColumn;
}

Exception Details:
Data: {System.Collections.ListDictionaryInternal}
Error Code: invalidRequest
Message: Invalid request
Inner error:
AdditionalData:
date: 2022-10-25T12:08:21
request-id: c2b72b14-a0f8-4b40-bb7e-...
client-request-id: c2b72b14-a0f8-4b40-bb7e-...
Raw Response Body: "{"error":{"code":"invalidRequest","message":"Invalid request","innerError":{"date":"2022-10-25T12:08:21","request-id":"c2b72b14-a0f8-4b40-bb7e-63c71d3e6686","client-request-id":"c2b72b14-a0f8-4b40-bb7e-63c71d3e6686"}}}" 

下面的请求已与Microsoft Graph Explorer一起使用,并成功工作。

POST https://graph.microsoft.com/v1.0/sites/<site-id>/lists/c018992b-d95d-453a-9eff-9f17fb89cde6/columns 
{
"description": "DocTags",
"displayName": "DocTags",
"name": "DocTag",
"indexed": true,
"isReordable": true,
"text": {
"allowMultipleLines": false,
"appendChangesToExistingText": false,
"linesForEditing": 0,
"maxLength": 255
}
}
Response 200 OK:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites(<site-id>)/lists('c018992b-d95d-453a-9eff-9f17fb89cde6')/columns/$entity",
"columnGroup": "Custom Columns",
"description": "DocTags",
"displayName": "DocTags",
"enforceUniqueValues": false,
"hidden": false,
"id": "491bb2de-4d77-4dde-b376-b9df6f69fae8",
"indexed": true,
"name": "DocTags",
"readOnly": false,
"required": false,
"text": {
"allowMultipleLines": false,
"appendChangesToExistingText": false,
"linesForEditing": 0,
"maxLength": 255
}
}

查看文档后,我注意到字段IsReorderable是只读的。因此,请求对Graph API的格式变得不正确。去除线路IsReorderable = true后,它工作了。

解决方案:

private ColumnDefinition SetColumnDefinition(string columnName)
{
ColumnDefinition newColumn = new ColumnDefinition
{
Name = columnName,
DisplayName = columnName,
Description = columnName,
Indexed = true,
Hidden = false,
// IsReorderable = true, [Remove]
Text = new TextColumn
{
AllowMultipleLines = false,
AppendChangesToExistingText = false,
LinesForEditing = 0,
MaxLength = 255
}
};
return newColumn;
}

最新更新