Question

Je suis en boucle à travers un certain nombre de sites pour exécuter une requête qui vérifie si un nouveau contenu a été ajouté aux bibliothèques de documents sur ce site au cours des trois jours précédents.Cependant, j'ai des problèmes.Lorsque je vais au succès du rappel, il s'agit toujours de la dernière bibliothèque DOC, contexte de site dans cette liste.Y a-t-il quelque chose qui me manque ici?

var queryItems = function(myContext, myDocName, mySelector){
    function getNewContent(x, y, z) {
        var myContext = x,
            myDocName = y,
            mySelector = z;
        function success() {
            if( items.get_count() > 0 ) {
                $(mySelector).find(".newContent").show();
            }
        }
        function fail() {
            console.log("Failed loading new content");
        }

        var myCtx = new SP.ClientContext(myContext),
            myList = myCtx.get_web().get_lists().getByTitle(myDocName),
            myQuery = new SP.CamlQuery(),
            date = new Date(),
            ISODate = ISODateString(new Date( date.getFullYear(), date.getMonth(), date.getDate() - 3 ) );
            myQuery.set_viewXml('<View><Query><Where><Gt><FieldRef Name="Created" /><Value Type="DateTime">' + ISODate + '</Value></Gt></Where></Query></View>');
            this.items = myList.getItems(myQuery);
            myCtx.load( this.items );
            myCtx.executeQueryAsync(Function.createDelegate(this, success), Function.createDelegate(this, fail));
        };
        return getNewContent(myContext, myDocName, mySelector);
    }           

    for ( var obj in objDocLibs) {
        (function(datum, sel) {
            queryItems(context, datum, sel);
        })(objDocLibs[obj].name, selector)
    }
}

Était-ce utile?

La solution

J'ai réussi à obtenir ce travail en utilisant des promesses, code ci-dessous:

var queryItems = function(myContext, myDocName, mySelector) {
    var dfd = $.Deferred( function() {
        var inContxt = myContext,
            inDoc = myDocName, 
            myCtx = new SP.ClientContext(inContxt),
            myList = myCtx.get_web().get_lists().getByTitle(inDoc),
            myQuery = new SP.CamlQuery(),
            date = new Date(),
            ISODate = ISODateString(new Date( date.getFullYear(), date.getMonth(), date.getDate() - 3 ) );

        myQuery.set_viewXml('<View><Query><Where><Gt><FieldRef Name="Created" /><Value Type="DateTime">' + ISODate + '</Value></Gt></Where></Query></View>');
        var items = myList.getItems(myQuery);
        myCtx.load( items );
        myCtx.executeQueryAsync(
            function() { 
                var itemCount = items; 
                dfd.resolve(itemCount);
            },
            function() {
                dfd.reject(args.get_message());
            }
        );
    });
    return dfd.promise();
};

for ( var obj in objDocLibs) {
    (function(datum, sel, con) {
        queryItems(con, datum.name, sel).done( function(myItems) {
            if( myItems.get_count() > 0 ) {
                $(sel).find(".newContent").show();
            }
        });
    })(objDocLibs[obj], selector, context)
}

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