我正在使用HTML和JavaScript创建一些网页,最终结果必须上传到给定的SharePoint列表中。我发现了很多关于如何做到这一点的细节,但是从第一天起我就陷入了一个问题。我尝试了以下链接中给出的所有可能的组合。
但是当天结束时我仍然有同样的错误。 ' 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"> Tool</td>
</tr>
<tr>
<td width="144" height="35">Bright Idea #:</td>
<td width="300"> <input type="text" name="txtBINumber" size="40"></td>
</tr>
<tr>
<td width="144" height="35">Bright Idea Status</td>
<td width="300"> <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"> <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"> <textarea rows="8" cols="48" name="txtComments" from="frmComments">Enter your comments here....</textarea></td>
</tr>
<tr>
<td width="444" height="35" colspan="2"> <input type="button" value="Submit" name="btnSubmit" onclick="createListItem()"></td>
</tr>
</table>
</form>
</body>
</html>
注意我正在使用记事本编写此代码并使用Internet Explorer的F12来检查代码的运行方式。
答案 0 :(得分:0)
下载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。