現在我已經嘗試了新的方法SharePoint列表。當我一次打電話時,這是有效的,但是它第二次告訴我該集合由於某種原因未被啓動。這段代碼的測試函數中的註釋將澄清我的問題。
的Javascript:
function test(){
//this first call works
countRetrieve('Very', 'Difficult');
//this second call generates error that collListItem hasnt been initiated
countRetrieve('Less', 'Interesting');
}
function countRetrieve(grade, title) {
var siteUrl = '/sites/MySite';
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Summary');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where>' +
'<And>' +
'<Eq><FieldRef Name=\'Grad\'/><Value Type=\'Text\'>' +
grade +
'</Value></Eq>' +
'<Eq><FieldRef Name=\'Title\'/><Value Type=\'Text\'>' +
title +
'</Value></Eq>' +
'</And>' +
'</Where></Query></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onRetrieveQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onRetrieveQuerySucceeded(sender, args) {
listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
itemId = oListItem.get_id();
itemCount = oListItem.get_item('Count');
}
updateCount();
}
function updateCount() {
var clientContext = new SP.ClientContext('/sites/MySite');
var oList = clientContext.get_web().get_lists().getByTitle('Summary');
this.oListItem = oList.getItemById(itemId);
//update the count, raise it by one
var c = itemCount + 1;
oListItem.set_item('Count', c);
oListItem.update();
clientContext.executeQueryAsync(Function.createDelegate(this, this.onUpdateSucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onUpdateSucceeded(sender, args){
alert('item count updated');
}
我試着去找回我的列表列「計數」的當前值,然後通過1上升這個數值但是我得到告訴我一個錯誤的集合沒有已初始化。
Did not get initial in this.collListItem = oList.getItems(camlQuery);?
這是可能的這個功能是完全錯誤的,我非常感謝有關如何執行這項任務的提示,因爲我新的Sharepoint和Javascript。
這是我的代碼(JavaScript的):
function countUpdate() {
var siteUrl = '/sites/MySite';
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Summary');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where>' +
'<And>' +
'<Eq><FieldRef Name=\'Grade\'/><Value Type=\'Text\'>' +
'Really' +
'</Value></Eq>' +
'<Eq><FieldRef Name=\'Property\'/><Value Type=\'Text\'>' +
'Narrow' +
'</Value></Eq>' +
'</And>' +
'</Where></Query></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onUpdateQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
//update
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var count = oListItem.get_item('Count');
oListItem.set_item('Count', '40');
oListItem.update();
}
clientContext.executeQueryAsync(Function.createDelegate(this, this.onUpdateQuerySucceeded),Function.createDelegate(this, this.onQueryFailed));
}
發佈最新更新多個
SPListItem
的I _think_你的問題就是範圍界定......很刺。這個「這個」關鍵字是非常棘手的(值得研究一下)。重點是「this」 - 這裏 - 實際上是對函數OWNER的引用 - 換句話說,就是窗口對象。從本質上講,它使「collListItem」一個全局變量...調用處理程序,因爲新功能應該處理,但我老實說不知道「Function.createDelegate」是什麼 - 我不熟悉這種用法,但它似乎很拗口對我來說。 –另一個問題可能是在「onRetrieveQuerySucceeded」中全局設置了「listItemEnumerator」 - 但我認爲這不是您考慮您的錯誤的當前問題,但我可以稍後看到它是一個問題。 –
這裏有一個很好的「這個」的概述 - 但我讀了幾個 - 這是一個棘手的: http://justin.harmonize.fm/index.php/2009/09/an-introduction-to-javascripts-this/ –