Форма Nintex NewItem с пользовательским JS для получения PPP, специфичной для выбранных пользователем данных формы (расположение), отлично подходит для некоторых выборов, а не для других.
Я подтвердил, что связанные данные списка SP верны - 3 списка:
- Местоположение
- Отдел
- Сведения об утверждающем
В списке сведений об утверждающем имеются столбцы поиска для местоположения и отдела.Форма Nintex фильтрует отделы по местоположениям.
Я думаю, что на основе результатов консоли F12 возвращаемое значение равно нулю для значений проблемного местоположения, но я не могу понять, почему.
Вот полный пользовательскийJavaScript в форме Nintex для JSFiddle
var queryString = function(field, url) {
var href = url ? url : window.location.href;
var reg = new RegExp('[?&]' + field + '=([^&#]*)', 'i');
var string = reg.exec(href);
return string ? string[1] : null;
};
NWF$(document).ready(function() {
NWF$(".nf-form-footer").hide();
NWF$("#" + IIStatus).hide();
NWF$("#" + ICStatus).hide();
var isEditMode = document.location.pathname.indexOf("/EditForm.aspx") > -1;
if (!isEditMode) {
NWF$("#" + SumComment).val('Please Approve.');
var amount = NWF$("#" + IAmount).val();
var location = NWF$("#" + ILocation).val() == null ? '' : NWF$("#" + ILocation)[0].options.length > 0 ? NWF$("#" + ILocation)[0].options[NWF$("#" + ILocation)[0].selectedIndex].title : null;
var department = NWF$("#" + IDepartment).val() == null ? '' : NWF$("#" + IDepartment)[0].options.length > 0 ? NWF$("#" + IDepartment)[0].options[NWF$("#" + IDepartment)[0].selectedIndex].title : null;
NWF$("#" + IAmount).blur(function() {
amount = this.value;
getApprover(amount, location, department);
});
NWF$("#" + ILocation).change(function() {
if (this.value != '') {
location = this.options[this.selectedIndex].title;
getCoder(location);
getApprover(amount, location, department);
}
});
NWF$("#" + IDepartment).change(function() {
if (this.value != '') {
department = this.options[this.selectedIndex].title;
getApprover(amount, location, department);
}
});
} else {
if (NWF$("#" + ICStatus).val() == "Rejected" || NWF$("#" + IIStatus).val() == "Rejected") {
NWF$("#" + IIStatus).val('Coder Approval Pending');
NWF$("#" + ICStatus).val('Pending Approval');
}
}
});
function getApprover(amount, location, department) {
approverClear();
if (amount != '' && location != '' && department != '') {
NWF$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Approver Detail')/Items?$orderby=Amount asc&$select=Location/Title,Department/Title,Amount, Title&$expand=Location, Department&$filter=Location/Title eq '" + location + "' and Department/Title eq '" + department + "'",
type: "GET",
headers: {
"accept": "application/json;odata=verbose"
},
success: function(data) {
debugger;
if (data != undefined && data.d != undefined && data.d.results != undefined && data.d.results.length > 0) {
var maxAmt = true;
for (var cnt = 0; cnt < data.d.results.length; cnt++) {
if (data.d.results[cnt].Role != "Coder 1" && data.d.results[cnt].Role != "Coder 2") {
if (data.d.results[cnt].Amount == amount) {
AddUserToPPL(data.d.results[cnt].Title);
maxAmt = false;
return false;
}
}
}
if (maxAmt) {
for (var cnt = 0; cnt < data.d.results.length; cnt++) {
if (data.d.results[cnt].Role != "Coder 1" && data.d.results[cnt].Role != "Coder 2") {
if (data.d.results[cnt].Amount > amount) {
AddUserToPPL(data.d.results[cnt].Title);
return false;
}
}
}
}
}
},
error: function(xhr) {
alert(JSON.stringify(xhr));
alert(xhr.status + ': ' + xhr.statusText);
}
});
}
}
function AddUserToPPL(ApproverEmail) {
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/siteusers/getbyemail(@v)?@v='" + ApproverEmail + "'";
try {
NWF$.ajax({
url: requestUri,
type: 'GET',
headers: {
'ACCEPT': 'application/json;odata=verbose'
},
success: GetApproverSuccess,
error: GetApproverError
});
} catch (err) {
//jQuery('#errorMsg').html('getListData Error: ' + err);
}
}
function GetApproverSuccess(data) {
//var Approver = data.d.GetUserProfilePropertyFor;
var Approver = data.d.LoginName;
var ApproverPicker = new NF.PeoplePickerApi('#' + IAssign);
ApproverPicker.search(Approver).done(function(data) {
//ApproverPicker.clear();
ApproverPicker.add(data[0]);
});
}
function GetApproverError(sender, args) {
//$get("results").innerHTML = "Error: " + args.get_message();
approverClear();
}
function getCoder(location) {
coderClear();
if (location != '') {
NWF$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Approver Detail')/Items?$select=Location/Title,Title,Role&$expand=Location&$filter=Location/Title eq '" + location + "'",
type: "GET",
headers: {
"accept": "application/json;odata=verbose"
},
success: function(data) {
if (data != undefined && data.d != undefined && data.d.results != undefined && data.d.results.length > 0) {
for (var cnt = 0; cnt < data.d.results.length; cnt++) {
if (data.d.results[cnt].Role == "Coder 1" || data.d.results[cnt].Role == "Coder 2") {
if (cnt == 0)
AddCoderToPPL(data.d.results[cnt].Title);
}
}
//data.d.results[0].Title
}
},
error: function(xhr) {
alert(JSON.stringify(xhr));
alert(xhr.status + ': ' + xhr.statusText);
}
});
}
}
function AddCoderToPPL(ApproverEmail) {
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/siteusers/getbyemail(@v)?@v='" + ApproverEmail + "'";
try {
NWF$.ajax({
url: requestUri,
type: 'GET',
headers: {
'ACCEPT': 'application/json;odata=verbose'
},
success: GetCoderSuccess,
error: GetCoderError
});
} catch (err) {
//jQuery('#errorMsg').html('getListData Error: ' + err);
}
}
function GetCoderSuccess(data) {
//var Approver = data.d.GetUserProfilePropertyFor;
var Coder = data.d.LoginName;
var CoderPicker = new NF.PeoplePickerApi('#' + ICoder);
CoderPicker.search(Coder).done(function(data) {
//CoderPicker.clear();
CoderPicker.add(data[0]);
});
}
function GetCoderError(sender, args) {
//$get("results").innerHTML = "Error: " + args.get_message();
coderClear();
}
function coderClear() {
var CoderPicker = new NF.PeoplePickerApi('#' + ICoder);
CoderPicker.clear();
}
function approverClear() {
var ApproverPicker = new NF.PeoplePickerApi('#' + IAssign);
ApproverPicker.clear();
}
function cancel() {
window.location = "MySite";
}
//url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Approver Detail')/Items?$orderby=Amount&$select=Location/Title,Department/Title,Amount, Title&$expand=Location, Department&$filter=Location/Title eq '" + location + "' and Department/Title eq '" + department + "' and Amount ge '" + amount + "'", function InvoiceUpdate()
function InvoiceUpdate() {
if (isEditMode) {
debugger;
var itemType1 = GetItemTypeForListName("Invoice Pending");
var item1 = {
"__metadata": {
"type": itemType1
},
"Title": NWF$("#" + _invoiceID).val(),
"LocationId": NWF$("#" + ILocation).val(),
"DepartmentId": NWF$("#" + IDepartment).val(),
"InvoiceAmount": NWF$("#" + IAmount).val(),
"InvoiceDate": NWF$("#" + _InvoiceDate).val(),
"InvoiceDueDate": NWF$("#" + _InvoiceDueDate).val(),
"AssignTo": NWF$("#" + IAssign).val(),
"Coder": NWF$("#" + ICoder).val(),
"Vendor": NWF$("#" + _VendorName).val(),
"VendorNo": NWF$("#" + _VendorNum).val(),
"Comment": NWF$("#" + _cmts).val()
};
updateListItem(NWF$("#_invoiceID").val(), "Invoice Pending", _spPageContextInfo.webAbsoluteUrl, item1, function() {
//amtCount = amtCount + 1;
//updatePendingInvoice(amtCount);
}, function() {
errorMsg = true;
});
}
}
function GetItemTypeForListName(name) {
return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "ListItem";
}
function getListItemWithId(itemId, listName, siteurl, success, failure) {
var url = siteurl + "/_api/web/lists/getbytitle('" + listName + "')/items?NWF$filter=Title eq '" + itemId + "'";
NWF$.ajax({
url: url,
method: "GET",
async: false,
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(data) {
if (data.d.results.length == 1) {
data.d.results[0].urls = url;
success(data.d.results[0]);
} else {
failure("Multiple results obtained for the specified Id value");
}
},
error: function(data) {
failure(data);
}
});
}
function updateListItem(itemId, listName, siteUrl, item, success, failure) {
getListItemWithId(itemId, listName, siteUrl, function(data) {
NWF$.ajax({
url: data.__metadata.uri,
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(item),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": NWF$("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "MERGE",
"If-Match": data.__metadata.etag
},
success: function(data) {
success(data);
},
error: function(data) {
failure(data);
}
});
}, function(data) {
alert('Failed2');
failure(data);
});
}
location = this.options[this.selectedIndex].title;
getCoder(location);
getApprover(amount,location,department);
Я ожидаю, что JavaScript получит 'кодер 1' или 'кодер 2' из сведений об утверждении на основе местоположения и заполнит поле "Люди" в форме, которая отлично подходит для большинстваМестоположения, но ...
проблема: во многих местоположениях ни один пользователь не извлекается и не заполняется в поле формы.