5

クライアント オブジェクト モデルを使用して、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 フィールドが例外のスローの原因であることを確認するために、設定した行をコメントアウトし、コードを再度実行しました。すべてがうまくいきました。何が悪いのかわかりません、誰か助けてくれませんか?

4

2 に答える 2

3

ユーザーを名前で検索する必要がある場合は、次のようになります。

    private static FieldUserValue GetUser(ClientContext clientContext, string userName)
    {
        var userValue = new FieldUserValue();
        var newUser = clientContext.Web.EnsureUser(userName);
        clientContext.Load(newUser);
        clientContext.ExecuteQuery();
        userValue.LookupId = newUser.Id;
        return userValue;
    }

戻り値は item["Author"] で設定できます

于 2012-12-14T16:05:07.217 に答える
1

Author と Editor から自動的に計算される ModifiedBy と CreadtedBy は、次のように Author と Editor フィールドのみを変更する必要があります。

        using (var clientContext = new ClientContext(@"http://server"))
        {
            var web = clientContext.Web;
            var lst = web.Lists.GetByTitle("Discus");

            var item = lst.GetItemById(2);
            item["Author"] = 3;
            item["Editor"] = 2;
            item.Update();
            clientContext.ExecuteQuery();                        

            Console.WriteLine("done");
        }
于 2012-07-13T10:58:50.163 に答える