Requirement: To get all the user names from the SharePoint group "Deliverable Owners" and sync with a custom list called "Team Members" in a button click.
Solution: This is done using jquery and SharePoint web services.
Code:
<script type="text/javascript" src="https://siteurl/Documents/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="https://siteurl/Documents/jquery.SPServices-0.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#syncUsers").click(function() //'syncUsers' is the ID of button control added in the CEWP
{
var errorOccured = DeleteUsersFromTeamMembersList();
if(!errorOccured)
{
AddUsersToTeamMembersList();
}
});
});
// to delete the existing users from the custom list
function DeleteUsersFromTeamMembersList()
{
var errorOccured = false;
$().SPServices({
operation: "GetListItems",
async: false,
debug: true,
listName: "Team Members",
CAMLViewFields: "<ViewFields></ViewFields>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
$().SPServices({
operation: "UpdateListItems",
async: false,
debug: true,
batchCmd: "Delete",
listName: "Team Members",
ID: $(this).attr("ows_ID"),
completefunc: function (xData, Status) {
msgData = xData.responseText;
isError = msgData.indexOf("ErrorText");
if (isError > 0) {
// Error creating fields!
alert("Error deleted user names from Team Member list!");
errorOccured = true;
}
}
});
});
}
});
return errorOccured;
}
//add all the users from the sharepoint group to custom list.
function AddUsersToTeamMembersList()
{
var alreadyProcessed = false;
var userName ;
var iD;
var userID;
var errorOccured = false;
$().SPServices({
operation: "GetUserCollectionFromGroup",
groupName: "Deliverable Owners",
completefunc: function (xData, Status) {
$("#results").text(xData.responseXML.xml);
$(xData.responseXML).find("User").each(function () {
userName = $(this).attr("LoginName");
iD = $(this).attr("ID");
userID = iD +";#"+userName;
$().SPServices({
operation: "UpdateListItems",
async: false,
batchCmd: "New",
listName: "Team Members",
valuepairs: [["User",userID ]],
completefunc: function(xData, Status)
{
msgData = xData.responseText;
isError = msgData.indexOf("ErrorText");
if (isError > 0) {
// Error creating fields!
alert("Error synchronizing user names!");
errorOccured = true;
}
}
});
});
if( errorOccured == false)
{
alert("User name synchronized successfully.");
$(window.location).attr('href', 'currentpagename.aspx');
}
}
});
}
</script>
P.S:
- The performance of this code will get affected based on the size of the user group.
- The Team Members custom list must have "User" field with people and group type.
Solution: This is done using jquery and SharePoint web services.
Code:
<script type="text/javascript" src="https://siteurl/Documents/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="https://siteurl/Documents/jquery.SPServices-0.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#syncUsers").click(function() //'syncUsers' is the ID of button control added in the CEWP
{
var errorOccured = DeleteUsersFromTeamMembersList();
if(!errorOccured)
{
AddUsersToTeamMembersList();
}
});
});
// to delete the existing users from the custom list
function DeleteUsersFromTeamMembersList()
{
var errorOccured = false;
$().SPServices({
operation: "GetListItems",
async: false,
debug: true,
listName: "Team Members",
CAMLViewFields: "<ViewFields></ViewFields>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
$().SPServices({
operation: "UpdateListItems",
async: false,
debug: true,
batchCmd: "Delete",
listName: "Team Members",
ID: $(this).attr("ows_ID"),
completefunc: function (xData, Status) {
msgData = xData.responseText;
isError = msgData.indexOf("ErrorText");
if (isError > 0) {
// Error creating fields!
alert("Error deleted user names from Team Member list!");
errorOccured = true;
}
}
});
});
}
});
return errorOccured;
}
//add all the users from the sharepoint group to custom list.
function AddUsersToTeamMembersList()
{
var alreadyProcessed = false;
var userName ;
var iD;
var userID;
var errorOccured = false;
$().SPServices({
operation: "GetUserCollectionFromGroup",
groupName: "Deliverable Owners",
completefunc: function (xData, Status) {
$("#results").text(xData.responseXML.xml);
$(xData.responseXML).find("User").each(function () {
userName = $(this).attr("LoginName");
iD = $(this).attr("ID");
userID = iD +";#"+userName;
$().SPServices({
operation: "UpdateListItems",
async: false,
batchCmd: "New",
listName: "Team Members",
valuepairs: [["User",userID ]],
completefunc: function(xData, Status)
{
msgData = xData.responseText;
isError = msgData.indexOf("ErrorText");
if (isError > 0) {
// Error creating fields!
alert("Error synchronizing user names!");
errorOccured = true;
}
}
});
});
if( errorOccured == false)
{
alert("User name synchronized successfully.");
$(window.location).attr('href', 'currentpagename.aspx');
}
}
});
}
</script>
P.S:
- The performance of this code will get affected based on the size of the user group.
- The Team Members custom list must have "User" field with people and group type.