如何使用Sharepoint Rest API使用相同的方法更新和创建项目

时间:2019-09-07 15:24:40

标签: rest sharepoint sharepoint-online office365api sharepoint-rest-api

我有一个要求,如果列表项已经存在,我需要对其进行更新;如果该列表项不存在,则需要创建一个新列表。从定制表单获取数据以更新项目时,我需要通过单一方法进行管理。在Sharepoint在线Rest API中有什么方法可以做到这一点? 我正在使用下面的方法来更新项目

def CopyData(self, current_field): if not hasattr(self, 'data'): return win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() text = '' current = current_field[0].row() d = {0: '\t', 1: '\r\n'} for index in current_field: if (index.row() - current) == 1: text += '\r\n' if self.data[index.row(), index.column()] != -1: text += str(self.data[index.row(), index.column()]) + '\t' else: text += '\t' current = index.row() text += '\r\n' win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT) win32clipboard.CloseClipboard() return def keyPressEvent(self, event): current_field = self.selectedIndexes() #выделенные ячейки self.PasteData(current_field) if event.key() == QtCore.Qt.Key_C and event.modifiers() == QtCore.Qt.ControlModifier: self.CopyData(current_field) super().keyPressEvent(event)

public static UpdateSaveSectionC(formData: any,id:any): PromiseLike<string> {

`

4 个答案:

答案 0 :(得分:1)

使用rest api过滤列表以基于唯一键确认该项目不存在

/_api/web/lists/getbytitle('list title')/items?$filter=UniqueField eq 'value'

根据返回的项目计数知道结果。

答案 1 :(得分:0)

Sharepoint REST API中没有列表的Upsert模式。

选项1:建议的方法是在用户填写表单时,根据填写的条目给出自动建议。因此,在提交时,您将知道该项目是否有id可以插入或更新。

选项2:在提交方法中,您可以快速查找一个项目(如果存在)或不链接它来更新或插入方法

注释插入和更新共有2个不同的端点。

答案 2 :(得分:0)

这是@Lee_MSFT帖子的补充,因此请先阅读他的帖子。

您查询的方式也可以简化。我建议您使用jQuery Promise或PNP.js,因为它将使您的生活更轻松。 jQuery示例:

function getItem(name) {
        var query = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('list title')/items?$filter=UniqueField eq " +name;
        return $.ajax({
            url: query,
            method: "GET",
            headers: {
                Accept: "application/json;odata=verbose"
            }
        });
    }

getItem("hi.docx").done(function (result) { if(!result){uploadFile()}};

如果可能,PNP.js是更好的IMO选项。

答案 3 :(得分:0)

正如@joyBlanks所说,OOTB在Sharepoint API中没有这样的UpdateOrInsert功能。 但是使用SPOHelper Utility可以最小化代码以实现功能。 SPOHelper是用于Sharepoint Online的轻量级REST实用工具。

var reqUrl="https://tenant.sharepoint.com/sites/ABCSite/_api/Lists/getbytitle('SPO List')/items";
var id=2;
var formdata={Title :"POST test update",Number:1234};
if(id){
var tempReqUrl=`${reqUrl}(${id})`
var result= await SPUpdate({url:tempReqUrl,payload:formdata})
// If request fails
if(result && result.ok){
console.log("Request Success with Update",result)
}else{
 result =await SPPost({url:reqUrl,payload:formdata});
console.log("Request Success with Insert",result)

}

}