SharePoint在线REST API:发布有效负载以使用“多选择”字段创建新项目

时间:2019-10-23 08:56:56

标签: python-3.x sharepoint odata sharepoint-online office365api

我正在使用Python sharePoint在线库-Office365-REST-Python-Client创建新的列表项。我能够成功创建新列表。

当我尝试使用“多项选择”字段创建新列表时(认为这是一个自定义字段),我收到一条错误消息。

有效载荷:

{'__metadata': {'type': 'SP.Data.MyListItem'}, 'Title': 'Task Created by Python Script',
                           'CategoryDescription': 'This is a test Task created by Python script  with the help of Office 365 library.',                               
                           'Multichoicefield':{
                               '__metadata' : {'type' : 'Collection(Edm.String)' },
                               'results': ['value1', 'value2']
                               }
                           }

在使用上述有效负载运行时,收到An open collection property 'Multichoicefield' was found. In OData, open collection properties are not supported.", "400 Client Error: Bad Request for url:

似乎OData停止支持此功能。有谁知道如何使用多项选择字段创建

2 个答案:

答案 0 :(得分:0)

OData的最新版本和OData库支持Open Collection属性。看来您的ClientContext使用的是ODataLibrary的过时版本。

答案 1 :(得分:-1)

检查“ Multichoicefield”字段设置,如下图所示。

enter image description here

并尝试在SharePoint页面的脚本编辑器Web部件中将REST API与Jav​​aScript一起使用,以检查其是否有效。

<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
var listName="CustomList";
function AddListItem(){
    var itemType = GetItemTypeForListName(listName);
    var item = {
        '__metadata': {'type': itemType },
        'Title': 'test',
        'Multichoicefield':{
           '__metadata' : {'type' : 'Collection(Edm.String)' },
           'results': ['value1', 'value2']
        }
    };

    $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: function (data) {
            alert("succeeded.");
        },
        error: function (data) {
            alert(JSON.stringify(data));
        }
    });
}
function GetItemTypeForListName(name) {
    return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "ListItem";
}  
</script>
<input type="button" onclick="AddListItem()" value="Add"/>

如果带有REST API的JavaScript在您的环境中可用,则需要检查python中的代码。