我有一个要求,如果列表项已经存在,我需要对其进行更新;如果该列表项不存在,则需要创建一个新列表。从定制表单获取数据以更新项目时,我需要通过单一方法进行管理。在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> {
`
答案 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)
}
}