如何使用 Rest POST 将地理位置值添加到 Sharepoint 列表字段 API?

How to POST Geolocation values to a Sharepoint List Field with Rest API?

我需要 post 两个值 Caption 和 Location,稍后成为 Sharepoint 列表中的 GeoLocation 字段。我正在使用以下 JSON:

{"__metadata": { "type": "SP.ListItem" }, "Caption": "Testing", "Location": "POINT (78.4 17.4)"}

但它不起作用。显示以下错误:

Cannot deserialize data for type Microsoft.SharePoint.SPFieldGeolocationValue

我是从 Xcode 做的。

SharePoint REST 服务期望 SP.FieldGeolocationValue 以下列格式指定:

{
     "__metadata": {
         "type": "SP.FieldGeolocationValue"
      },
      "Altitude": <val>,
      "Latitude": <val>,
      "Longitude": <val>,
      "Measure": <val>
 }

JavaScript 示例

该示例演示了如何在 Contacts 列表中创建列表项并为 Location 字段设置地理位置值:

function createContact(name,location){
    var listTitle = 'Contacts';
    var url = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getByTitle('" + listTitle + "')/items";
    var payload =  {
        "__metadata": { "type": "SP.ListItem" }, 
        "Title": name, 
        "Location": {
            "__metadata": {"type": "SP.FieldGeolocationValue"},
            "Latitude": location[0],
            "Longitude": location[1],
         }
     };
     return executeJson(url,'POST',null,payload);              
}


createContact("Work Address", [60.2872339,24.8516785])
.done(function(data)
{
    console.log('Contact has been created');
})
.fail(function(error){
    console.log('An error occured while creating contact');
});

哪里

function executeJson(url,method,headers,payload) 
{
    method = method || 'GET';
    headers = headers || {};
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }      
    var ajaxOptions = 
    {       
       url: url,   
       type: method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if (typeof payload != 'undefined') {
      ajaxOptions.data = JSON.stringify(payload);
    }  
    return $.ajax(ajaxOptions);
}