CSOM Javascript – beim Ausführen einer Abfrage für mehrere Listen wird eine Fehlermeldung angezeigt – SharePoint 2010

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

Frage

Gibt es hier einen SharePoint-Experten, der mir helfen kann herauszufinden, warum ich bei Listenabfragen Fehlermeldungen erhalte?

Ich versuche, Daten asynchron aus mehreren Listen abzurufen, erhalte jedoch die folgende Fehlermeldung: 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.

Mein Code sieht so aus:

function loadAllData() {
    loadTeam();
    loadTasks();    

    loadTaskTypes();
}   

Wo Ladefunktionen so aussehen:

function loadTeam() {
    retrieveListItemsInclude(teamListProperties);
}
function loadTasks() {
    retrieveListItemsInclude(tasksListProperties);
}
...

Und retrieveListItemsInclude Funktion sieht so aus:

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;
    }
}

Und schließlich sehen Erfolgsrückrufe so aus:

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.");
}

Beim Laufen loadAllData() Funktion, ich erhalte beim Aufruf die obige Fehlermeldung collListItem.getEnumerator() in allen Erfolgsrückrufen, aber dem letzten.

Das heißt, wenn ich anrufe loadTeam(); loadTasks(); loadTaskTypes(); In loadAllData(), ich erhalte in den ersten beiden Erfolgsrückrufen eine Fehlermeldung, aber loadTaskTypes() wird ordnungsgemäß ausgeführt.

Warum passiert das?In retrieveListItemsInclude(listProperties), ich erstelle lokal clientContext für jede Anfrage an die SharePoint-Liste...Warum stören die Anrufe?

Wenn ich jQuery verwende, verspricht es, Aufrufe zu verketten loadTeam(); loadTasks(); loadTaskTypes(); nacheinander, alle Daten wurden fehlerfrei geladen.

Ich bin für jede Hilfe dankbar.

War es hilfreich?

Lösung

Sehr nah dran, aber Ihr Problem liegt immer noch in JavaScript-Bereichen :) ...speziell:

this.collListItem = oList.getItems(camlQuery);

Wenn der erfolgreiche Rückruf erfolgt, sind die Referenzen durcheinander geraten, da der zweite Funktionsaufruf das colListItem (das sich im globalen Bereich befindet) vom ersten Aufruf überschrieben hat.

Da Sie listProperties bereits als eindeutige Variable verwenden, können Sie diese weiter nutzen.Ändern Sie die drei Zeilen wie folgt:

listProperties.colListItem = oList.getItems(camlQuery)
var includeListProperties = buildInclude(listProperties);
clientContext.load(listProperties.collListItem, 'Include(Title,ID)');

In Ihrem erfolgreichen Rückruf:

function onTasksQuerySucceeded(listProperties) {
    var tasks = [];
    var listItemEnumerator = listProperties.collListItem.getEnumerator();
    //rest of your code...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top