CSOM 자바스크립트 실행하는 경우 쿼리에는 여러 개의 목록을 얻기 오류가-SharePoint2010
-
28-09-2020 - |
문제
여기에는 모든 SharePoint 전문가,사람을 찾을 수 있습니다.이,왜 나는 오류에 대한 쿼리를 나열?
나올 정도에서 데이터는 여러 목록 비동기식으로,하지만 나는 다음과 같은 오류가: The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.
내 코드는 다음과 같습니다:
function loadAllData() {
loadTeam();
loadTasks();
loadTaskTypes();
}
어디로드 기능처럼 보인:
function loadTeam() {
retrieveListItemsInclude(teamListProperties);
}
function loadTasks() {
retrieveListItemsInclude(tasksListProperties);
}
...
고 retrieveListItemsInclude
기능처럼 보인:
function retrieveListItemsInclude(listProperties) {
var clientContext = new SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle(listProperties.listName);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><RowLimit>1000</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
var includeListProperties = buildInclude(listProperties);
clientContext.load(collListItem, 'Include(Title,ID)');
switch(listProperties.listName) {
case 'Task list':
clientContext.executeQueryAsync(function(){ onTaskQuerySucceeded(listProperties); }, failCallback);
break;
case 'Task types list':
clientContext.executeQueryAsync(function(){ onTaskTypesQuerySucceeded(listProperties); }, failCallback);
break;
...
case 'Team list':
clientContext.executeQueryAsync(function(){ onTeamQuerySucceeded(listProperties); }, failCallback);
break;
}
}
마지막으로 성공을 콜백을 보면 다음과 같:
function onTasksQuerySucceeded(listProperties) {
var tasks = [];
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var task = {};
task.id = oListItem.get_item('ID');
task.title = oListItem.get_item('Title');
tasks.push(task);
}
console.log("Tasks loaded.");
}
실행하는 경우 loadAllData()
기능상의 오류를 호출할 때 collListItem.getEnumerator()
에서 모두 성공의 콜백하지만,마지막입니다.
즉,이 경우 전화 loadTeam(); loadTasks(); loadTaskTypes();
에 loadAllData()
, 에,나는 오류 처음에 두 개의 성공을 콜백하지만, loadTaskTypes()
실행됩니다.
왜 이런 일이 무엇입니까?에 retrieveListItemsInclude(listProperties)
, 을 만들어 지역 clientContext
모든 요청에 대해하는 SharePoint 목록...왜 통화에 방해?
사용할 때 나는 jQuery 약속 체인 전화 loadTeam(); loadTasks(); loadTaskTypes();
한 후,다른 모든 데이터 로드되지 않고 오류가 있습니다.
내가 어떤 도움을 평가.
해결책
매우 가까운,그러나 당신의 문제는 여전히 에서 JavaScript 를 범위:)...특별히:
this.collListItem = oList.getItems(camlQuery);
의 성공은 다시 호출을 통해 제공,참조를 받은 엉망이기 때문에 두 번째 함수 호출은 무시한 colListItem(에 있는 글로벌 범위)에서 처음 호출합니다.
이후 이미 사용하고 있 listProperties 고유 변수는 당신이 그것을 활용할 수 있습니다.변 세선을 다음과 같다:
listProperties.colListItem = oList.getItems(camlQuery)
var includeListProperties = buildInclude(listProperties);
clientContext.load(listProperties.collListItem, 'Include(Title,ID)');
내부 당신의 성공을 다시 전화:
function onTasksQuerySucceeded(listProperties) {
var tasks = [];
var listItemEnumerator = listProperties.collListItem.getEnumerator();
//rest of your code...
}