I have a custom list to which I am applying JSLink to NewForm.aspx.
The list where JSLink is applied is : XXX and in the JSLink I am querying data to YYY from the list YYY there are two fields returned, first is Title and Second is Person or group.
I want to get the login name of the Person field. So, to get the log in name I am ensuring user from web and loading in ClientContext
. As a result I am not getting the exact output from my code.
My code is:
var loginName;
// variable to store the list Title from which we are fetching data of the responsible person
var listTitle = "YYY";
// variable for ListItemCollection of Responsible.
var collListItem;
// two dimentsional array which stores [0] = item ID and [1] = Responsible person [2] = PersonID [3] = ReturnValue to submit to list.
var itemArray = [];
// the variable to store to return value when submit click.
var returnValue;
$(document).ready(function () {
// execute function after SP.js loaded
ExecuteOrDelayUntilScriptLoaded(getResponsibleArray, "sp.js");
// set change event of Area drop down list.
$('[id^=xxx_]').change(function () {
// if user has selected any Area
if ($('[id^=xxx]').val() != "0") {
// set the responsible person of the selected area.
SetPersonName($('[id^=xxx]').val());
}
else {
// set label value to blank
$('#personName').text("");
returnValue = "";
}
});
});
(function () {
var OverrideCtx = {};
OverrideCtx.Templates = {};
OverrideCtx.Templates.Fields = {
"Person": {
"NewForm": renderResponsible
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(OverrideCtx);
})();
function renderResponsible(ctx) {
return "<label id='personName'>hello</label>";
}
function getResponsibleArray() {
clientContext = SP.ClientContext.get_current();
web = clientContext.get_web();
var oList = clientContext.get_web().get_lists().getByTitle(listTitle);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<View><Query><OrderBy> <FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></View>");
collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(
// Success function
function (sender, args) {
PopulateArray();
},
// Failure function
function (sender, args) {
alert('Error: ' + args.get_message() + '\n' + args.get_stackTrace());
});
}
function PopulateArray() {
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var id = oListItem.get_item('ID');
var person = oListItem.get_item('Person').get_lookupValue();
var personId = oListItem.get_item('Person').get_lookupId();
getUserLoginName(personId);
itemArray.push([id, person, personId]);
}
}
function SetPersonName(id) {
for (var i = 0; i < itemArray.length; i++) {
if (itemArray[i][0] == id) {
$('#personName').text(itemArray[i][1]);
returnValue = itemArray[i][2] + ';#' + itemArray[i][1];
break;
}
}
}
function getUserLoginName(id)
{
responsibleUser = web.getUserById(id);
clientContext.load(responsibleUser);
clientContext.executeQueryAsync(
// success
function (sender,args)
{
PopulateVariable();
},
// failure
function (sender,args)
{
alert('Error: ' + args.get_message() + '\n' + args.get_stackTrace());
}
);
}
function PopulateVariable()
{
alert(responsibleUser.get_loginName());
}
Here, what I am getting is if multiple persons are return from the list YYY then I am getting only the last person's log in name.
How to handle the calls?
[{\"Key\":\"i:0#.w|domain\\userName\"}]