图 API:无法以编程方式上传具有特定属性的 OneDrive 项目(createdBy 和 lastModifiedDataTime 失败)
Graph API: Unable to programmatically upload OneDrive item with specific properties (failing for createdBy and lastModifiedDataTime)
我正在使用 Graph API 将项目上传到 OneDrive。成功上传后,我还在设置项目的属性。我可以设置“lastModifiedDateTime”,但无法设置“createdBy”和“createdDateTime”。
“createdBy”始终设置为我为 OAuth 创建的 Azure AD 应用程序,在 OneDrive 中 UI 它始终显示“修改者”“SharePoint 应用程序”。
并且“createdDataTime”始终是当前时间(上传时间)。有什么方法可以正确设置这些属性吗?
我用来修补项目属性的json:
{"createdDateTime":"2020-12-28T12:25:39Z",
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdBy":
{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"lastModifiedBy":{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"fileSystemInfo":{
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdDateTime":"2020-12-28T12:25:39Z"},
"file":{"mimeType":"image/jpeg"}
}
请在上传和上述补丁请求后查找属性(来自 Graph Explorer 的查询):
{
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z",
"createdBy":
{
"application": {
"displayName": "ConsoleApp"}
},
"fileSystemInfo": {
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z"
},
"file": {
"mimeType": "image/jpeg",
"hashes": {
"quickXorHash": "4EQEGnBnLd04VXEmYqGHHIeZ2po="
}
}
}
如您所见,用户名已替换为 Azure AD 应用名称,创建时间是上传完成的时间,而不是补丁请求中指定的时间。
如果有人对此有任何想法,请告诉我。
如果您参考以下文章:属性部分下的https://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0。
这些是 read-only 字段,这意味着您将无法手动配置相同的值。
解决方法:
话虽如此,这无法通过 Graph API 实现,但是您可以使用 Sharepoint API 对其进行更新。
对于修改创建者、最后修改者和最后修改者,示例主体如下:
{ formValues": [
{
"FieldName": "Editor",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Author",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Created",
"FieldValue": "02/18/2020 11:25 PM"
}
],
"bNewDocumentUpdate": true
}
请求URL:
https://SPOURL/_api/web/Lists/GetbyTitle('Library Name')/items(1)/ValidateUpdateListItem"
我正在使用 Graph API 将项目上传到 OneDrive。成功上传后,我还在设置项目的属性。我可以设置“lastModifiedDateTime”,但无法设置“createdBy”和“createdDateTime”。
“createdBy”始终设置为我为 OAuth 创建的 Azure AD 应用程序,在 OneDrive 中 UI 它始终显示“修改者”“SharePoint 应用程序”。
并且“createdDataTime”始终是当前时间(上传时间)。有什么方法可以正确设置这些属性吗?
我用来修补项目属性的json:
{"createdDateTime":"2020-12-28T12:25:39Z",
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdBy":
{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"lastModifiedBy":{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"fileSystemInfo":{
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdDateTime":"2020-12-28T12:25:39Z"},
"file":{"mimeType":"image/jpeg"}
}
请在上传和上述补丁请求后查找属性(来自 Graph Explorer 的查询):
{
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z",
"createdBy":
{
"application": {
"displayName": "ConsoleApp"}
},
"fileSystemInfo": {
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z"
},
"file": {
"mimeType": "image/jpeg",
"hashes": {
"quickXorHash": "4EQEGnBnLd04VXEmYqGHHIeZ2po="
}
}
}
如您所见,用户名已替换为 Azure AD 应用名称,创建时间是上传完成的时间,而不是补丁请求中指定的时间。
如果有人对此有任何想法,请告诉我。
如果您参考以下文章:属性部分下的https://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0。
这些是 read-only 字段,这意味着您将无法手动配置相同的值。
解决方法:
话虽如此,这无法通过 Graph API 实现,但是您可以使用 Sharepoint API 对其进行更新。
对于修改创建者、最后修改者和最后修改者,示例主体如下:
{ formValues": [
{
"FieldName": "Editor",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Author",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Created",
"FieldValue": "02/18/2020 11:25 PM"
}
],
"bNewDocumentUpdate": true
}
请求URL:
https://SPOURL/_api/web/Lists/GetbyTitle('Library Name')/items(1)/ValidateUpdateListItem"