Question

Je suis en train de travailler sur une application SharePoint où j'ai besoin d'exécuter SP.RequestExecutor.executeAsync() afin de saisir des informations à partir d'Accueil du site Web des listes.Selon quelle méthode est l'appel de la oData appel, je veux faire quelque chose de différent.

Unfortuntely, executor.executeAsync() ne joue pas aussi beau que $.ajax() en termes de l'utilisation de $.when().done() et l'exécution de code après un appel asynchrone est faite.Ci-dessous est un peu de code si vous voulez voir:

    load = function (){
        $.when(getEntries()).done(function () {
            ViewModels.Calendar.addEventSource(ko.utils.unwrapObservable(eventList));
        });
    }

    getEntries = function () {
        return executor.executeAsync({
            url: appweburl
                + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('" + LIST + "')/items?@target='" + hostweburl
                + "'&$select=Title,OData__x006e_ot5,qnlu,OData__x0066_x20"
                + "&$filter=OData__x0066_x20 eq '" + ViewModels.Person.user.userName() + "' "
                + "and qnlu ge DateTime'" + startDate().toString("yyyy-MM-dd") + "T00:00:00' "
                + "and qnlu le DateTime'" + endDate().toString("yyyy-MM-dd") + "T00:00:00' ",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: onGetEntriesSuccess,
            error: onoDataCallFailure 
        });
    },

    onGetEntriesSuccess = function (data) {
        var jsonObject = JSON.parse(data.body);
        $.each(jsonObject.d.results, function (index, item) {
            eventList.push(new Event(item.qnlu, item.OData__x006e_ot5));
        });
    },

    onoDataCallFailure = function (data, errorCode, errorMessage) {
        alert('Failed to get host site. Error:' + errorMessage);
    };

Toutes les idées/suggestions seraient appréciées.

Était-ce utile?

La solution

créer un nouveau .Deferred.Retour repored.Promise de l'appel.Appeler a été différé ou différé. Rejeter dans les gestionnaires de Succ et de défaillance.

Autres conseils

Pour ajouter des détails à la réponse de Scot, vous pouvez faire quelque chose comme ceci:

function load () {
    var call = getEntries();
    call.done(function (eventList) {
        ViewModels.Calendar.addEventSource(ko.utils.unwrapObservable(eventList));
    });
}

function getEntries () {
    // create the deferred object
    var def = new $.Deferred();

    executor.executeAsync({
        url: appweburl
            + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('" + LIST + "')/items?@target='" + hostweburl
            + "'&$select=Title,OData__x006e_ot5,qnlu,OData__x0066_x20"
            + "&$filter=OData__x0066_x20 eq '" + ViewModels.Person.user.userName() + "' "
            + "and qnlu ge DateTime'" + startDate().toString("yyyy-MM-dd") + "T00:00:00' "
            + "and qnlu le DateTime'" + endDate().toString("yyyy-MM-dd") + "T00:00:00' ",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: onGetEntriesSuccess,
        error: onoDataCallFailure 
    });

    function onGetEntriesSuccess (data) {
        var jsonObject = JSON.parse(data.body);
        var eventList = [];
        $.each(jsonObject.d.results, function (index, item) {
            eventList.push(new Event(item.qnlu, item.OData__x006e_ot5));
        });

        // resolve the deferred object
        // eventList will be passed as parameter to done
        def.resolve(eventList);
    }

    function onoDataCallFailure (data, errorCode, errorMessage) {
        // reject the deferred object            
        def.reject('Failed to get host site. Error:' + errorMessage);
    }

    // return the promise
    return def.promise();
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top