【问题标题】:Updating of SharePoint List using JavaScript使用 JavaScript 更新 SharePoint 列表
【发布时间】:2017-06-18 01:50:57
【问题描述】:

我正在使用 HTML 和 JavaScript 创建一些网页,最终结果必须上传到给定的 SharePoint 列表中。我发现了很多关于如何做到这一点的细节,但从第一天开始,我就只遇到一个问题。我已经尝试了下面链接中给出的所有可能的组合。

Link

但最终我仍然遇到同样的错误。 “SP”未定义。

给你一点背景。我已经创建了网页,并且该网页存储在 SharePoint 网站上的共享文件夹中。现在向最终用户提供一个超链接,以单击该链接直接打开给定 SharePoint 站点的共享文件夹中的给定存储网页。下面给出的是代码。我知道我可能会遗漏一些非常小的东西。

<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
function preparePage() 
{ //Hide Execution lead
if( document.getElementById("ExeLead").style.display=='none' ){
 document.getElementById("ExeLead").style.display = '';
}
else {
 document.getElementById("ExeLead").style.display = 'none';
}
getDetails();
}

function getParam(name)//to get details that is passed via url
{  
 name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
 var regexS = "[\\?&]"+name+"=([^&#]*)";  
 var regex = new RegExp( regexS );  
 var results = regex.exec(window.location.href);
 results[1] = results[1].replace(/%20/g," ");
 if(results == null)
  return "NA";  
 else    
  return results[1];
 }

function getDetails()//extract info form URL
{
 frmUpdates.txtBIStatus.value=getParam("Status");
 frmUpdates.txtBINumber.value=getParam("BINo");     
}

var siteUrl = 'Url to the SharePoint site';
SP.SOD.executeFunc("sp.js", createListItem());
/*if(!SP.SOD.executeOrDelayUntilScriptLoaded(createListItem, 'sp.js')){ 
LoadSodByKey('sp.js');
};*/
//LoadSodByKey('sp.js');


function createListItem() {

var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

var itemCreateInfo = new SP.ListItemCreationInformation();
this.oListItem = oList.addItem(itemCreateInfo);

oListItem.set_item('IdeaRef', 'My New Item');
oListItem.set_item('Status', 'Hello World!');

oListItem.update();

clientContext.load(oListItem);

clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {
 alert('Item created: ' + oListItem.get_id());
}

function onQueryFailed(sender, args) {
 alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

</Script>
<title>Tool</title>
</head>

<body onLoad="preparePage()">

<form name="frmUpdates">
<table border="5" width="444">
<tr>
 <td width="344" height="35" colspan="2">&nbsp;Tool</td>
</tr>
<tr>
 <td width="144" height="35">Bright Idea #:</td>
 <td width="300">&nbsp;&nbsp;<input type="text" name="txtBINumber" size="40"></td>
</tr>
<tr>
 <td width="144" height="35">Bright Idea Status</td>
 <td width="300">&nbsp;&nbsp;<input type="text" name="txtBIStatus" size="40"></td>
</tr> 
<tr id="ExeLead">
 <td width="144" height="35">Assign Execution Lead</td>
 <td width="300" height="35">&nbsp;&nbsp;<input type="text" name="txtExecutionLead" size="40"></td>
</tr>
<tr>
 <td width="144" height="35" colspan="2">Comments</td>
</tr>
<tr>
 <td width="444" height="150" colspan="2">&nbsp;&nbsp;<textarea rows="8" cols="48" name="txtComments" from="frmComments">Enter your comments here....</textarea></td>
</tr>
<tr>
 <td width="444" height="35" colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" value="Submit" name="btnSubmit" onclick="createListItem()"></td>
</tr>
</table>
</form>



</body> 

</html>

请注意,我正在使用记事本编写此代码,并使用 Internet Explorer 的 F12 检查代码的运行情况。

【问题讨论】:

    标签: javascript sharepoint sharepoint-list


    【解决方案1】:

    至少下载 Notepad++ :)

    所以我理解正确。用户是否有权访问 SharePoint 网站?如果您只是将带有一些 javascript 的 CLEAN HTML 文件(?)上传到共享文件夹并将其共享给用户(无权访问该站点),这是不可能的。 SP.js 在 SharePoint 中加载。

    如果您使用此 html 创建页面布局(在 Sharepoint 所需的所有元素中),您也可以使用该脚本,但用户仍需要访问该站点和列表。

    我建议改为创建 SharePoint 加载项。

    编辑:

    我已经在我的开发网站上的内容编辑器 Web 部件中尝试了您的代码(没有头部/主体),并且它有效。

    这并不能解决您的问题,但您应该在按钮上创建一个单击事件(使用 jQuery),否则它将在页面加载时创建一个列表项,即使您在单击时已在元素 createListItem() 上指定按钮,无论如何都会运行,因为:SP.SOD.executeFunc("sp.js", yourfunc)。

    $("#buttonId").click(function() {
        SP.SOD.executeFunc("sp.js", createListItem());
    });
    

    或为 SP.SOD.executeFunc("sp.js", createListItem()); 创建一个新函数您在 onclick 中使用的。

    你也可以试试替换

    var clientContext = new SP.ClientContext(siteUrl);
    

    与

    var clientContext = SP.ClientContext.get_current();
    

    如果列表与页面库处于同一级别,则不必指定 URL。

    【讨论】:

    • 谢谢,我正在对其进行测试,并且我可以完全访问此 SharePoint 网站。该网页保存在 SharePoint 网站上。如果您需要更多详细信息,请告诉我。
    • 好的。你能试试只写SP吗?在开发工具的控制台中(在 IE 中按 F12),看看是否有任何选项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2019-06-06
    • 1970-01-01
    • 2014-09-13
    • 2010-12-07
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多