クライアント オブジェクト モデルを使用して、Sharepoint ディスカッション ボードの "ModifiedBy" フィールドを更新しようとしています。「Editor」フィールドと「Author」フィールドを変更することで、リスト ビューに表示される「ModifiedBy」を変更できます。ただし、ディスカッション投稿をクリックすると、そこに表示される「ModifiedBy」フィールド (上の画像のフィールド) に変更が反映されません。実験した結果、これを修正するために変更する必要があるフィールドは「MyEditor」と呼ばれることを発見しました。残念ながら、このフィールドは読み取り専用です。
以下のコードでは、フィールドの読み取り専用設定を false に変更しようとしています。Visual Studio のデバッガーで、最初のブロックの下部にある ExecuteQuery() 行の後にある MyEditor フィールドを見ると、ReadOnlyField 値が実際には false に設定されていることがわかります。
sharepointContext.Load(discussionList);
sharepointContext.ExecuteQuery();
var fields = discussionList.Fields;
sharepointContext.Load(fields);
sharepointContext.ExecuteQuery();
var field = fields.GetByInternalNameOrTitle("MyEditor");
field.ReadOnlyField = false;
field.Update();
sharepointContext.Load(field);
sharepointContext.ExecuteQuery();
上記のコードは問題なく実行されます。問題は次のブロックにあります。
//...Code to initialize discussionItem...
discussionItem["MyEditor"] = 0;
discussionItem["Editor"] = 0;
discussionItem["Author"] = 0;
discussionItem["Body"] = "Testing";
discussionItem["Title"] = "Hello Worlds";
discussionItem.Update();
sharepointContext.Load(discussionItem);
sharepointContext.ExecuteQuery();
コードが 2 番目のブロックの下部にある ExecuteQuery() に到達すると、次のメッセージとともに ServerException がスローされます。
Invalid data has been used to update the list item.
The field you are trying to update may be read only.
MyEditor フィールドが例外のスローの原因であることを確認するために、設定した行をコメントアウトし、コードを再度実行しました。すべてがうまくいきました。何が悪いのかわかりません、誰か助けてくれませんか?