루프 JavaScript에서 sp.clientContext를 호출합니다
-
10-12-2019 - |
문제
이전 3 일 동안 해당 사이트의 해당 사이트의 문서 라이브러리에 새 콘텐츠가 추가되었는지 여부를 확인하는 쿼리를 실행하는 데 많은 사이트를 실행합니다.그러나 나는 문제가있다.성공 콜백으로 가면 항상 마지막 문서 라이브러리, 해당 목록의 사이트 컨텍스트에 있습니다.여기에 누락 된 것이 있습니까?
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)
}
}
. 해결책
저는 약속을 사용 하여이 작업을 수행 할 수있었습니다.
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)
}
. 제휴하지 않습니다 sharepoint.stackexchange