Pregunta

Estoy en bucle a través de una serie de sitios para ejecutar una consulta que comprueba si se ha agregado nuevo contenido a las bibliotecas de documentos en ese sitio en los tres días anteriores.Sin embargo, estoy teniendo problemas.Cuando llegue a la devolución de llamada de éxito, siempre está en la última biblioteca de DOC, el contexto del sitio en esa lista.¿Hay algo que me estoy perdiendo aquí?

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

¿Fue útil?

Solución

Me las arreglé para hacer que este trabajo use promesas, código a continuación:

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

Licenciado bajo: CC-BY-SA con atribución
scroll top