クライアントオブジェクトモデルを使用してSharepointディスカッションボードの "ModifiedBy"フィールドを更新しようとしています。 "Editor"と "Author"フィールドを変更することで、リストビューに表示される "ModifiedBy"を変更できます。ただし、ディスカッションポストをクリックすると、そこに表示される "ModifiedBy"フィールド(その上に画像があるもの)には変更が反映されません。実験をした後、これを修正するために必要なフィールドを「MyEditor」と呼んでいます。残念ながら、このフィールドは読み取り専用です。Sharepointクライアントオブジェクトモデルの設定ModifiedByフィールド
以下のコードでは、フィールドの読み取り専用設定をfalseに変更しようとしています。最初のブロックの最後にあるExecuteQuery()行の後にVisual Studioのデバッガで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();
上記のコードは問題なく実行されます。問題は、この次のブロックが付属しています:確認するには
Invalid data has been used to update the list item.
The field you are trying to update may be read only.
:第2ブロックの下部にある)
//...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();
コードはのexecuteQueryを(到達し、それが次のメッセージでServerExceptionをスローしますMyEditorフィールドが例外をスローする原因になっていることを確認した後、私が設定した行をコメントアウトしてコードを再実行しました。すべてうまくいった。私は間違っていることを理解していない、誰かが私を助けることができますか?
は、なぜあなたはそれが可能であるべきだと思います(と、なぜあなたは、通常の目的のためにそれを必要としますか)?私はこれらのタイプのフィールドが編集可能であるとは期待していません...管理者以外のアカウントを使用していて、これらのフィールドを変更すると、私にはバグのように感じます。 –
フィールドのReadOnlyプロパティをfalseに設定すると、そのフィールドに書き込めるはずです。そうでない場合は、ReadOnlyフィールドの目的はどのような目的ですか?ディスカッションボードのデータを別のデータベースからSharepointに移行していますが、ModifiedByフィールドに最初に投稿した人が反映されるようにします(今のところ、代わりに自分の名前が表示されます)。私のアカウントには完全な管理者権限があります。 –