CSOM 자바스크립트 실행하는 경우 쿼리에는 여러 개의 목록을 얻기 오류가-SharePoint2010

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/103992

문제

여기에는 모든 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...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top