【发布时间】:2014-04-16 13:46:02
【问题描述】:
我正在尝试自动更新 SharePoint 2010 中的 8 个区域列表。该过程包括 1) 从电子表格发布所有 8 个区域的主列表,2) 删除 8 个区域列表中的所有列表项,3) 复制区域从主列表中的特定项目到特定区域列表。当单独执行时,该过程的每个组件都可以完美运行。现在,我只是尝试将这些步骤放入循环中,以自动处理所有 8 个区域的所有三个步骤。
其中一个主要问题是,一旦我提交了从区域 1 中删除列表项的请求,在删除完成之前我无法复制新内容。当然,我的 sript 说它已经完成,但它所做的只是将请求提交到 SharePoint。 SharePoint 可能需要 15 秒到 1 分钟才能真正删除列表项。
所以,一旦我提交删除,我就会进入另一个循环来查询区域 1 列表大小。一旦确认列表减少到零项目,我想继续复制。现在,“查询大小”循环炸弹具有不同的错误,例如“列表不存在”等。这是我提取的相关代码片段。如果有人对修复/改进有建议,我将非常欢迎反馈。
//Loop through X (8) regions and delete all list items from 'Inventory Region X' List
function main() {
for (var i=1;i<9;i++)
{
alert("Enter Delete Loop " + i);
listname = "Inventory Region " + i;
// Submit the delete request
deletetheregionitems(i);
// Wait for the delete to complete
controllistcount = null;
alert("Begin delay cycle.");
while (controllistcount != 0)
{
countoflistitems(listname);
}
controllistcount = null;
alert("Exit loop!");
}
alert("All Region Lists should now be empty.");
}
function countoflistitems(listname) {
// Get the count of items in the requested list
var clientContext = new SP.ClientContext.get_current();
oList = clientContext.get_web().get_lists().getByTitle(listname);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/><Value Type=\'Number\'>1</Value></Geq></Where></Query></View>');
this.listItems = oList.getItems(camlQuery);
clientContext.load(listItems, 'Include(Id)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.countretrieveSucceeded), Function.createDelegate(this, this.queryFailed));
}
function countretrieveSucceeded(sender, args) {
controllistcount = listItems.get_count();
}
【问题讨论】:
-
你可以考虑使用工人
-
我对sharepoint一点经验都没有,如果你能从js方面解释一下问题,我也许可以提供帮助。
-
感谢 ProllyGeek。基本上,其中一个功能是对 Web 服务器进行外部调用,要求它执行任务。完成后服务器不会响应我,所以我需要循环一个额外的请求来亲自查看它是否完成。一旦我知道它已经完成,我想继续我的脚本。
-
好吧,很高兴知道,那么您必须检查自己的问题(需要自动回复)吗?或者你不能检查自己
-
服务器基本上是从表中删除项目,我需要等到它们都被删除后再将新记录复制到其中。所以我向服务器发送一个请求,询问表中当前有多少项目。一旦服务器返回 0,我就可以继续前进。所以我循环查询服务器,直到我得到 0 然后我退出循环并继续复制。似乎直到我离开循环,服务器才开始删除。希望这是有道理的。
标签: javascript sharepoint