使用JavaScript

时间:2017-02-01 10:43:01

标签: javascript sharepoint sharepoint-list

我正在使用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来检查代码的运行方式。

1 个答案:

答案 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。