8

people フィールドを含む基本的な sharepoint リストがあります。rest API を使用して新しいリスト項目を追加し、person フィールドをエイリアスに設定しようとしていますが、機能せず、エラーが発生します。ユーザーデータの受け渡し方法に問題があるようですが、オンラインでヘルプを見つけることができませんでした。

この電話をかける正しい方法を手伝ってもらえますか。どんな助けでも大歓迎です。

私のコード-------

function runAjax(){   var d  = JSON.stringify({"__metadata":{"type":"SP.Data.RepositoryItem"},"Owners":"-1;#v-mynme@microsoft.com"});
jQuery.ajax({ 
    url: "https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580) ",
    type: "POST", 
    headers: { 
        "accept": "application/json;odata=verbose", 
        "content-type": "application/json;odata=verbose", 
        "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
        "X-HTTP-Method": "MERGE", 
        "If-Match": "*" 
    }, 
    data:d, 
    success: function (_a) { 
        console.log(JSON.stringify(_a)); 
    }, 
    error: function (_e) { 
        console.error(JSON.stringify(_e)); 
    } 
});}runAjax(); 

私が得ているエラーは

Updation fail
{"readyState":4,"responseText":"{\"error\":{\"code\":\"-1, Microsoft.SharePoint.Client.InvalidClientQueryException\",\"message\":{\"lang\":\"en-US\",\"value\":\"A 'PrimitiveValue' node with non-null value was found when trying to read the value of a navigation property; however, a 'StartArray' node, a 'StartObject' node, or a 'PrimitiveValue' node with null value was expected.\"}}}","status":400,"statusText":"Bad Request"} 
4

5 に答える 5

2

表示されるエラー メッセージはわかりにくい場合があります。この場合、Person/Group フィールドの名前は (SharePoint リスト フィールドの表示名または内部名) "Owners" ですが、REST API を使用してこのフィールドを更新すると、別の名前になる可能性があります。

{"__metadata":{"type":"SP.Data.RepositoryItem"},"Owners":"-1;#vmynme@microsoft.com"}

正確なフィールド定義を見つけるには、GET メソッドを使用して次の URL を試し、返された XML 値を調べます。

https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580)

XML は次のようになります。

<m:properties> 
...
<d:DateModified m:type="Edm.DateTime">2014-01-07T00:00:00Z</d:DateModified><d:OwnersById m:null="true" />
...
</m:properties>

ほとんどの場合、「Owners」フィールドが「OwnersId」などの別の名前になっていることに気付くでしょう。正確なフィールド名を使用し、投稿された値としてユーザーのLoginNameプロパティの代わりにユーザーのIdプロパティを指定するには、ajax 投稿データを再構築する必要があります。

于 2014-01-08T21:32:05.053 に答える
0

ユーザー名のクレーム エンコーディングを使用しようとしましたか。それが、そのようなタイプのフィールドを更新する方法です。例: "i:0#.w|contoso\chris"

于 2014-01-20T07:01:05.750 に答える
0

ユーザー フィールドに次の構文を使用して、POST 呼び出しを実行する必要があります。

フィールドの名前が「Owners」の場合"OwnersId": 1、REST 呼び出し本文内で送信する必要があります (列名に ID を追加し、UserID の値を渡します)。

ユーザー列の正確な名前を確認する必要がある場合は、ブラウザーで F12 開発ツールを起動し、ネットワーク キャプチャを開始してから、ブラウザーに URL を入力します。

"https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580) "

応答本文には、すべての列の正確な名前が表示されます (REST で使用される)。

于 2014-09-18T10:52:48.587 に答える