Javascript “为什么我会这样?”;未捕获的TypeError:getEnumerator不是函数";?
在我的Sharepoint 2010 Web部件中,我有以下Javascript:Javascript “为什么我会这样?”;未捕获的TypeError:getEnumerator不是函数";?,javascript,jquery,sharepoint-2010,web-parts,Javascript,Jquery,Sharepoint 2010,Web Parts,在我的Sharepoint 2010 Web部件中,我有以下Javascript: function getListItemID(username, payeename, oList) { var arrayListEnum = oList.getEnumerator(); …这被称为: function upsertPostTravelListItemTravelerInfo1() { var clientContext = SP.ClientContext.get_current(
function getListItemID(username, payeename, oList) {
var arrayListEnum = oList.getEnumerator();
…这被称为:
function upsertPostTravelListItemTravelerInfo1() {
var clientContext = SP.ClientContext.get_current();
var oList =
clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
this.website = clientContext.get_web();
currentUser = website.get_currentUser();
var itemCreateInfo = new SP.ListItemCreationInformation();
this.oListItem = oList.addItem(itemCreateInfo);
var travelersEmail = $('traveleremail').val();
/* If this is an update, the call to getListItemID() will return a val; otherwise (an insert), get from newly instantiated ListItem. */
listId = getListItemID(currentUser, travelersEmail, oList);
我从中得到了这个代码的基础
但是得到了上面列出的错误(“uncaughttypeerror:oList.getEnumerator不是函数”)
一个回答说我需要补充一点:
<script type="text/javascript" src="/_layouts/15/sp.js" ></script>
$(document).ready(function () { ExecuteOrDelayUntilScriptLoaded(CustomAction, "sp.js"); });
…但只有在已经显示的错误之前有一个错误,即“未捕获引用错误:未定义CustomAction”
那么独家新闻是什么?获取Enumerator()或以其他方式检索所需的ID值需要什么
下面是该方法的完整代码,以显示我试图完成的内容以及如何完成:
function getListItemID(username, payeename, oList) {
var arrayListEnum = oList.getEnumerator();
while (arrayListEnum.moveNext()) {
var listItem = arrayListEnum.get_current();
if (listItem.get_item("ptli_formPreparedBy") === username &&
listItem.get_item("ptli_TravelersEmail") === payeename &&
listItem.get_item("ptli_formCompleted") == false) {
return listItem.get_id();
}
}
return '';
}
更新
当我尝试这个(第一行和第三行是新的):
SP.SOD.executeFunc('SP.js','SP.ClientContext',sharePointReady);
…这是受一只猫的启发,我得到,“System.Web.HttpParseException未经用户代码处理
Message=服务器标记的格式不正确。“
就我个人而言,我认为Sharepoint的格式不是很好。但这(对)不是重点(不是双关语)。问题1:您在列表上调用getEnumerator,而不是列表项集合
getEnumerator()
(不在列表对象上),并且仅在通过运行clientContext.executeQueryAsync()
问题2:需要调用executeQueryAsync来填充列表项集合
在使用SharePoint JavaScript客户端对象模型时,您的代码需要分为两部分:第一部分指定要获取的内容,包括将查询和命令加载到SPClientContext对象中;第二部分允许您操作到SharePoint的查询结果,并作为查询执行的异步回调运行
clientContext.executeQueryAsync()
(其中clientContext
是SP.clientContext
对象),并传入委托函数以在成功或失败时运行/*
ExecuteOrDelayUntilScriptLoaded(yourcode,"sp.js") makes sure
your code doesn't run until SP.js (the SharePoint JavaScript CSOM)
has been loaded
*/
ExecuteOrDelayUntilScriptLoaded(function(){
var payeename = $('traveleremail').val();
var clientContext = SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
/* Use a CAML query to filter your results */
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>'+payeename+'</Value></Eq></Where></Query></View>');
/* get the list item collection from the list */
var oListItems = oList.getItems(camlQuery);
/* tell SharePoint to load the list items */
clientContext.load(oListItems);
/* execute the query to get the loaded items */
clientContext.executeQueryAsync(
/* onSuccess Function */
Function.createDelegate(this,function(){
/*
now that the query has run, you can get an enumerator
from your list item collection
*/
var arrayListEnum = oListItems.getEnumerator();
var ids = [];
while(arrayListEnum.moveNext()){
var listItem = arrayListItem.get_current();
ids.push(listItem.get_id());
}
alert(ids.length > 0 ? "IDs of matching items: " + ids : "No matching items found!");
}),
/*onFailure Function*/
Function.createDelegate(this,function(sender,args){
alert("Whoops: " + args.get_message() + " " + args.get_stackTrace());
})
);
},"sp.js");
/*
ExecuteOrderLayUntilScriptLoaded(您的代码“sp.js”)确保
您的代码在SP.js(SharePoint JavaScript CSOM)之前不会运行
已加载
*/
ExecuteOrderLayUntilScriptLoaded(函数(){
var payeName=$('traveleremail').val();
var clientContext=SP.clientContext.get_current();
var oList=clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
/*使用CAML查询筛选结果*/
var camlQuery=new SP.camlQuery();
camlQuery.set_viewXml(“”+payeName+“”);
/*从列表中获取列表项集合*/
var oListItems=oList.getItems(camlQuery);
/*告诉SharePoint加载列表项*/
clientContext.load(oListItems);
/*执行查询以获取加载的项*/
clientContext.executeQueryAsync(
/*onSuccess函数*/
createDelegate(这个,函数(){
/*
现在查询已经运行,您可以获得一个枚举数
从列表项集合中
*/
var arrayListEnum=oListItems.getEnumerator();
var-id=[];
while(arrayListEnum.moveNext()){
var listItem=arrayListItem.get_current();
id.push(listItem.get_id());
}
警报(ids.length>0?“匹配项的ID:+ids:“未找到匹配项!”);
}),
/*onFailure函数*/
createDelegate(此,函数(发送方,参数){
警报(“呜呼:“+args.get_message()+”+args.get_stackTrace());
})
);
},“sp.js”);
示例代码中的CAML查询仅过滤ptli_TravelersEmail列;您需要添加一些
元素来捕获所需的其他两个过滤条件。这是Thriggle最终对我起作用的原因:
function setListItemID(username, payeename) {
var clientContext = new SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
/* Use a CAML query to filter your results */
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where></Query></View>');
/* get the list item collection from the list */
var oListItems = oList.getItems(camlQuery);
/* tell SharePoint to load the list items */
clientContext.load(oListItems);
/* execute the query to get the loaded items */
clientContext.executeQueryAsync(
/* onSuccess Function */
Function.createDelegate(this, function () {
/*
now that the query has run, you can get an enumerator
from your list item collection
*/
var arrayListEnum = oListItems.getEnumerator();
var ids = [];
while (arrayListEnum.moveNext()) {
var listItem = arrayListItem.get_current();
ids.push(listItem.get_id());
}
if (ids.length > 0) {
listId = ids[0];
}
else {
listId = '';
}
}),
/*onFailure Function*/
Function.createDelegate(this, function (sender, args) {
alert("Whoops: " + args.get_message() + " " + args.get_stackTrace());
})
);
}
函数setListItemID(用户名、收款人名称){
var clientContext=new SP.clientContext.get_current();
var oList=clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
/*使用CAML查询筛选结果*/
var camlQuery=new SP.camlQuery();
camlQuery.set_viewXml(“”+payeName+“”);
/*从列表中获取列表项集合*/
var oListItems=oList.getItems(camlQuery);
/*告诉SharePoint加载列表项*/
clientContext.load(oListItems);
/*执行查询以获取加载的i
function setListItemID(username, payeename) {
var clientContext = new SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('PostTravelFormFields');
/* Use a CAML query to filter your results */
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where></Query></View>');
/* get the list item collection from the list */
var oListItems = oList.getItems(camlQuery);
/* tell SharePoint to load the list items */
clientContext.load(oListItems);
/* execute the query to get the loaded items */
clientContext.executeQueryAsync(
/* onSuccess Function */
Function.createDelegate(this, function () {
/*
now that the query has run, you can get an enumerator
from your list item collection
*/
var arrayListEnum = oListItems.getEnumerator();
var ids = [];
while (arrayListEnum.moveNext()) {
var listItem = arrayListItem.get_current();
ids.push(listItem.get_id());
}
if (ids.length > 0) {
listId = ids[0];
}
else {
listId = '';
}
}),
/*onFailure Function*/
Function.createDelegate(this, function (sender, args) {
alert("Whoops: " + args.get_message() + " " + args.get_stackTrace());
})
);
}