私はc#クライアントライブラリを使用しています。microsoft-graph経由で共有ポイントにアップロードする前にファイルにフィールド情報を追加します。
ファイルをアップロードするときに、そのファイルのフィールド(SharePoint列)のいずれかを設定できるようにします。 私はこの
var newfile = await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[mySubFolderId]
.ItemWithPath("newFile.txt")
.Content
.Request()
.PutAsync<DriveItem>(fs);
var li = await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
li.Fields.AdditionalData.Add("Title", "My New File Title");
await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.UpdateAsync(li);
同様PutAsync<DriveItem>(filestream)
への呼び出し後に返されDriveItem.ListItem
からFieldValueSet
を更新しようとしました。しかし、私はこの例外を取得:
はServiceExceptionフィールド「idは」
が認識されません
上記にはAPIを3回呼び出す必要がありますが、1回の呼び出しでファイルがアップロードされたときにフィールドを追加する方法はありません。要求されたよう
更新情報 -
私は唯一の1フィールドを設定しようとする場合は、「ID」はまだJSONに表示されます。ここでは実際のコードと 'きれい' JSONはある
var fs = new FileStream(@"c:\temp\TestImage.jpg", FileMode.Open);
var newfile = await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Root
.ItemWithPath("TestImage.jpg")
.Content
.Request()
.PutAsync<DriveItem>(fs);
var li = await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
var d = new Dictionary<string, object>();
d.Add("Title", "This should be the title");
li.Fields.AdditionalData = d;
await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Items[newifle.Id]
.ListItem.Request()
.UpdateAsync(li);
ファースト・コール:
PUT /v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/root:/TestImage.jpg:/content HTTP/1.1
第二コール:
GET /v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/items/01QX3GBJL3RSNVFPDYGBG2FKKARXI7TSBV/listItem HTTP/1.1
サードコール(レスポンスHTTP 400 Bad Request
です):
PATCH /v1.0/sites/xxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/items/01QX3GBJL3RSNVFPDYGBG2FKKARXI7TSBV/listItem HTTP/1.1
それを試してみてください。新しい辞書を作成して、私の単一のフィールドを追加しました。その後、辞書を 'ListItem.Fields.AdditionalData'に設定しますが、同じエラーで失敗し、Fiddlerで検査すると、JSONに 'id'フィールドが追加されます。 – OrdinaryOrange
Fiddlerを使用してキャプチャされたリクエストとレスポンスを追加できますか?その要求を生成したクライアントライブラリ呼び出しをインクルードします。 –