Ну, я никогда не оставляю свои вопросы без ответа, поэтому другие участники сообщества разработчиков могут получить пользу от моих вопросов.Слишком много сообщений остаются без ответа или просто заканчиваются после того, как решение найдено.
Да, я подумал, что это проблема с определенными областями несколько недель назад, и решил свою проблему.Я обернул их в функции, передавая значения.Когда он отправляется в стек, он не теряет область значений из предыдущего асинхронного вызова.
Внутри первой функции, которая делает асинхронный вызов, я передаю значения и вызываю эту функцию:
SaveItem(listitem, clientContext, businesssegment,subsegment);
Вот полный код:
function UpdateSegmentSubsegment()
{
//Prompt for Batching Note: Leave it blank to do all.
var camlrowlimit=prompt("Please enter the batch query","");
var camlbatch;
//Check Batch Input
if(camlrowlimit!=null)
{
//Set Dynamic RowLimit Variable
if(camlrowlimit=="")
{
camlbatch="";
}
else
{
camlbatch="<RowLimit>"+camlrowlimit+"</RowLimit>";
}
//Query Information Variables
var listname='ERD - XXXXX';
var caml='<View Scope="Recursive"><Query><Where><And>' +
'<IsNull><FieldRef Name="Employee_x0020_Business_x0020_Se" /></IsNull>' +
'<IsNull><FieldRef Name="Employee_x0020_Business_x0020_Su" /></IsNull>' +
'</And></Where></Query>'+camlbatch+'</View>';
//Function Variables
var itemcount=0;
var context = new SP.ClientContext.get_current();
QueryListItems(listname,caml,context).then(function(items){
//Get item count returned from promise
itemcount=items.get_count();
window.status="Preparing to Process "+itemcount.toString()+" items..."
//Prepare Looping object
var listitemenumerator=items.getEnumerator();
//Loop through each List Item
while (listitemenumerator.moveNext()) {
//Get Employee ID from list item collection
var listitem = listitemenumerator.get_current();
var employeeid=listitem.get_item("EmpUseAcct");
//Check for invalid item value
if(employeeid!="#Value!"){
//Ansychronous Function Call
QueryHRInformation(employeeid,listitem,context);
}
else
{
//Log CA Skip
console.log("Skiping CA Number "+listitem.get_item("CorrectiveActionNumber"));
}
};
});
}
}
//Query Promise
function QueryListItems(listname, CAMLQ,clientContext)
{
//Defererred Object
var deferred = new $.Deferred();
//Sharepoint Object Model
//Get List
var list = clientContext.get_web().get_lists().getByTitle(listname);
//CAML Query
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(CAMLQ);
var items = list.getItems(camlQuery);
//Get Items
clientContext.load(items);
clientContext.executeQueryAsync(
Function.createDelegate(this,
function () { deferred.resolve(items); }),
Function.createDelegate(this,
function (sender, args) { deferred.reject(sender, args); }));
return deferred.promise();
}
//Asnchronous Function Call
function QueryHRInformation(employeeid,listitem,clientContext){
//Web Service Variables
var curequestorID="XXXXXX";
var wsserviceID="XXXXXX";
var wsservicePassword="XXXXXX";
var appIdentifier="XXXXXX";
var wsserviceName="XXXXXXX";
//Debugging Variable to check async list item object
//var title;
//Asynchronous Call
XXX.ERD.BizTalk.XX.getInstance().getInfo(employeeid,curequestorID, wsserviceID, wsservicePassword, appIdentifier, wsserviceName).then(function(empResult){
//Empresult.status
var businesssegment=empResult.BusSegment;
var subsegment= empResult.SubSegment;
SaveItem(listitem, clientContext, businesssegment,subsegment);
//*Save Item
//clientContext.executeQueryAsync(Function.createDelegate(this, this.success), Function.createDelegate(this, this.failed));
})
.fail(function(xhr, status, msg){
console.log(msg);
});
}
function SaveItem(item,ctx,bsg,ssg)
{
var refno;
//Debugging Check
refno=item.get_item("CorrectiveActionNumber");
//Set Fields
item.set_item("Employee_x0020_Business_x0020_Se",bsg);
item.set_item("Employee_x0020_Business_x0020_Su",ssg);
//Update list item values
item.update();
//ctx.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),Function.createDelegate(this, this.onQueryFailed));
ctx.executeQueryAsync(Function.createDelegate(this,function(){ onQuerySucceeded(refno);}),Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(result, args) {
console.log('Saved CA Number'+result);
}
function onQueryFailed(sender, args) {
console.log('Request failed. ' + args.get_message()+'\n' + args.get_stackTrace());
}