Sunday, 6 September 2020

How to filter JSON data to get value based on the supplied key?

 var existingData = [];


some-loop{

    existingData.push(
{
'email' : $(this).attr("ows_Email_x0020_ID"), //this will be the key
'id' : $(this).attr("ows_ID") // record id for a given email will be fetched
}
}


function getIDbyEmail(emailID)
{
try
{
//var obj; = existingData.filter(i=>i.email==emailID);

var obj = existingData.filter(function(item){
    return item.email == emailID;
});

var _id = obj[0].id;

if(_id == undefined || _id == "" || _id == null)
{
return 0;
}
else
{
return _id;
}
}
catch(err)
{
return 0;
}
}





Thursday, 20 August 2020

How to get current user information using SPServices?

 

currUser = $().SPServices.SPGetCurrentUser({

fieldNames: ["WorkEmail"], //Name (account name) is the default property

debug: false

});



currUserArr = $().SPServices.SPGetCurrentUser({

fieldNames: ["ID", "Name", "SIP Address"],

debug: false

});




Thursday, 13 August 2020

How to redirect SharePoint Home page to site contents page?

 

<script language="javascript" type="text/javascript">

document.addEventListener("DOMContentLoaded", function(){

  var url = location.href;

  location = url.replace("SitePages/test.aspx", "_layouts/viewlsts.aspx");

});

</script>

Wednesday, 12 August 2020

How to download SharePoint file, on click of its URL, instead of opening it in Chrome?

 

Use the OOB application page: download.aspx

https://server/sites/site/_layouts/download.aspx?SourceUrl=https://filepath/


Tuesday, 11 August 2020

How to search documents using SPServices and SharePoint Search?

 

var searchtext ="string to be searched";

SharePoint 2010:

var queryText = "<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>";

queryText += "<Query>";

queryText += "<Context>";

queryText += "<QueryText language='en-US' type='MSSQLFT'>";

queryText += "SELECT SpSiteUrl, Title, Path, Description, HitHighlightedSummary, IsDocument";

queryText += "FROM Scope() WHERE FREETEXT(DEFAULTPROPERTIES, '";

queryText += searchtext;

queryText += "')And CONTAINS(Path, 'https://server/sites/site/subsite/library')";

queryText += "ORDER BY \"Rank\" DESC";

queryText += "</QueryText>";

queryText += "</Context>";

queryText += "<Range><Count>5000</Count></Range>";

queryText += "</Query>";

queryText += "</QueryPacket>";


SharePoint Online:

var queryText = "<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>"

queryText += "<Query>"

queryText += "<Range><Count>500</Count></Range>";

queryText += "<Context>"

queryText += "<QueryText language='en-US' type='STRING'>"

queryText += searchtext;

queryText += " Site:https://server/sites/site/subsite/library/";

queryText += "</QueryText>"

queryText += "</Context>"

queryText += "</Query>"

queryText += "</QueryPacket>";


//declare required variables


$().SPServices({//sart service call

    operation: "Query",

    queryXml: queryText,

    async: false,

    completefunc: function (xData, Status) {

$(xData.responseXML).find('CopyResult').attr('ErrorMessage'));

        $(xData.responseXML).find("QueryResult").each(function () {

            var x = $(this).text();

            $(x).find("Document").each(function () {

                url = $("Action>LinkUrl", $(this)).text();

                if ((url.indexOf("site/subsite/library") > 0) && 

                    ((url.indexOf("aspx")) == -1)) {

title = $("Title", $(this)).text();

size = $("Action>LinkUrl", $(this)).attr('size');

ext = $("Action>LinkUrl", $(this)).attr('fileExt');

desc = $("Description", $(this)).text();

//clear/reset variables

                }

            });

        });


    }

});//end service call

Monday, 24 February 2020

JavaScript date : How to compare two dates to check which one is greater?


Example:

if(startDate.getTime() == endDate.getTime()) //both the dates are same
{
            //do something
}

JavaScript date : How to get days between two dates?


var daysInbetween = (d2.getTime() - d1.getTime())/(1000 * 3600 * 24);

JavaScript date : How to get all dates between two dates?


function getAllDatesBetween(startDate,endDate)
{
var d1 = new Date(startDate);
var d2 = new Date(endDate);
var d3;
var daysInbetween = (d2.getTime() - d1.getTime())/(1000 * 3600 * 24);

for(var i=0;i<=daysInbetween;i++)
{
d3 = new Date(d1);
d3.setDate(d3.getDate() + i);
datesArray.push((d3.getMonth()+1).toString()+"/"+d3.getDate().toString()+"/"+d3.getFullYear().toString());
}
}

JavaScript date : How to get month and year difference between two dates?


function yearsDiff(d1, d2) {
    var date1 = new Date(d1);
    var date2 = new Date(d2);
    var yearsDiff =  date2.getFullYear() - date1.getFullYear();
    return yearsDiff;
}

function monthsDiff(d1, d2) {
  var date1 = new Date(d1);
  var date2 = new Date(d2);
  var years = yearsDiff(d1, d2);
  var monthsDiff =(years * 12) + (date2.getMonth() - date1.getMonth()) ;
  return monthsDiff;
}

JavaScript date : How to get date for first, mid and last day of a month?


var firstDayStartDate = new Date(anyDateOfTheMonth.getFullYear(), anyDateOfTheMonth.getMonth(), 1);

var midDayStartDate = new Date(anyDateOfTheMonth.getFullYear(), anyDateOfTheMonth.getMonth(), 15);

var midDayPlusOneStartDate = new Date(anyDateOfTheMonth.getFullYear(), anyDateOfTheMonth.getMonth(), 16);

var lastDayStartDate = new Date(anyDateOfTheMonth.getFullYear(), anyDateOfTheMonth.getMonth() + 1, 0);

JavaScript Date : How to get working hours between two dates?


function getWorkingHoursBetween(d1,d2)
{
var workingDays = 0;
var daysInbetween = (d2.getTime() - d1.getTime())/(1000 * 3600 * 24);
var d3, iDay;
for(var i=0;i<=daysInbetween;i++)
{
d3 = new Date(d1);
d3.setDate(d3.getDate() + i);
iDay = d3.getDay();
if(iDay !=0 && iDay!=6)
{
workingDays++;
}
}
return (workingDays*9); //9 being the working hours per day
}

w2ui Form : How to validate a form?


actions: {
            reset: function () {
                this.clear();
            },
            save: function () {
                var errorList = w2ui['formName'].validate();
                if(errorList.length==0)
                {
                saveFormDataCustomFunction();
                }
            }
        }

w2ui Form : How to update a field on change of another field?


Form: 

onChange: function (event)
{
if(event.target=="fieldName1")
{
event.done(function () {
$('input[type=fieldName2]').w2field('list',
{
items: getFilteredValuesArray
}
);
});
}
if(event.target=="ResourceID")
{
event.done(function () {
refreshCalendar();
});
}
if(event.target=="Start Date")
{
event.done(function () {
refreshCalendar();
});
}
}


Function:

function refreshCalendar()
{
setUnavialableDatesForResource(w2ui['formName'].get('ResourceID').el.value);
$('input[type=start-date]').w2field('date',
{
format: 'm/d/yyyy',
blocked: blockedStartDates
}
);

setUnavialableEndDatesForResource(w2ui['formName'].get('Start Date').el.value);
$('input[type=end-date]').w2field('date',
{
format: 'm/d/yyyy',
blocked: blockedEndDates
}
);
}

HTML:
<input name="Start Date" type="start-date"/>
<input name="End Date" type="end-date"/>

w2ui Form : How to get and set a field's value?


Get:

var val = w2ui['formName'].get('fieldName').el.value;

OR

var val = $("fieldName").val


Set:

$("fieldName").val = "New Value";

OR

w2ui['formName'].get('fieldName').el.value = "New Value";

Thursday, 20 February 2020

How to show/hide section in an InfoPath form on click of a button?

Create (hidden) fields for each section and change/toggle the value on click of button as per the requirement.

Set a formatting rule for each section, which will show/hide the section based on the hidden fields values.

You can set a default values for the above variables based on the requirement.

Friday, 10 January 2020

JSOM: How to display recent documents of current user using SharePoint search?


References

/bootstrap.min.css
/jquery.min.js
/jquery.SPServices.min.js
/bootstrap.min.js

Script

function loadDocuments()
{

var currUser = $().SPServices.SPGetCurrentUser({
fieldNames: ["WorkEmail"],
debug: false
});

currUser = currUser.split('p|')[1].split('@')[0];

var searchQuery = "https://ts.accenture.com/_api/search/query?querytext='*'&rowlimit=6&querytemplate='modifiedby:"+currUser+""+
" AND (FileExtension:doc OR FileExtension:docx OR FileExtension:ppt OR FileExtension:pptx OR FileExtension:xls OR FileExtension:xlsx OR FileExtension:pdf)'&sortlist='lastmodifiedtime:descending'&properties='ContentSetting:3'&selectproperties='Title,Path'";

  $.ajax({
    url: searchQuery,
    method: 'GET',
    headers: {
        'Accept': 'application/json; odata=verbose'
    },
    success: onQuerySuccess,
    error: onQueryFail
});

function onQuerySuccess(data) {
var docsHTML = "";
    var count=0;
try
{
    //OneDrive Documents
    try{
 
    if (data.d.query.SecondaryQueryResults.length == 0 || data.d.query.SecondaryQueryResults.results[0].RelevantResults.Table.Rows.results == 0)
    {
        //do nothing
    }
    else {
 
        $(data.d.query.SecondaryQueryResults.results[0].RelevantResults.Table.Rows.results).each(function() {
        count++;
if(count==4)
{
return false;
}
            var path = fetchValueForKey(this, 'Path');
            var title = fetchValueForKey(this, 'Title');
            path = path.replace(new RegExp(' ', 'g'), '%20');
            if(title.length>50)
            {
            title = title.substring(0,50);
            }
docsHTML += "<a href='"+path+"' target='_blank'>";
docsHTML += "<div class='media' style='height:25px;'>";
docsHTML += "<img src='https://ts.accenture.com/sites/afls/OnePSM/SiteAssets/onedrive.png' alt='' class='mr-1 mt-1' style='width:20px;'>";
docsHTML += "<div class='media-body'>";
docsHTML += "<p>"+title+"</p>";
docsHTML += "</div></div></a>";

        });

        //$('.spinner-grow').hide(); 
      }
      }
      catch(ex){}

//SharePoint Documents
try
{
    if ((data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results.length == 0)) {
        docsHTML = "<p>" + 'We were unable find your recent documents.' + "</p>";
    }
    else {
 
        $(data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results).each(function() {
        count++;
if(count==7)
{
return false;
}
            var path = fetchValueForKey(this, 'Path');
            var title = fetchValueForKey(this, 'Title');
            path = path.replace(new RegExp(' ', 'g'), '%20');
            if(title.length>50)
            {
            title = title.substring(0,50);
            }
docsHTML += "<a href='"+path+"' target='_blank'>";
docsHTML += "<div class='media' style='height:25px;'>";
docsHTML += "<img src='https://ts.accenture.com/sites/afls/OnePSM/SiteAssets/sharepoint.png' alt='' class='mr-1 mt-1' style='width:20px;'>";
docsHTML += "<div class='media-body'>";
docsHTML += "<p>"+title+"</p>";
docsHTML += "</div></div></a>";

        });

        $(docsHTML).appendTo('#documentsDiv');
        $('.spinner-grow').hide(); 
      }
    }
    catch(ex){}
    }
    catch(ex)
    {
    $('.spinner-grow').hide();
    }
}

function onQueryFail(sender, args) {
$('.spinner-grow').hide(); 
    //alert('Error:' + args.get_message());
}

function fetchValueForKey(row, fldName) {
    var val = null;
    $.each(row.Cells.results, function() {
        if (this.Key == fldName) {
            val = this.Value;
        }
    });
    return val;
}


HTML

<div class="col-sm-6 m-0">
<div class="card-header bg-info text-light">My Recent Documents</div>
    <div id="documentsDiv" class="card-body border pt-1" style="min-height:192px;">
    <div class="spinner-grow spinner-grow-sm text-primary"></div>
    <div class="spinner-grow spinner-grow-sm text-primary"></div>
    <div class="spinner-grow spinner-grow-sm text-primary"></div>
    <div class="spinner-grow spinner-grow-sm text-primary"></div>
</div>
</div>

Friday, 20 December 2019

CSOM: How to migrate user permissions from SharePoint 2013 to SharePoint Online?


protected static void CopySitePermissions(string sourceSiteUrl, string targetSiteUrl,string sourceClaimPrefix,string targetClaimPrefix,string targetClaimSuffix)
        {
            try
            {
                Console.WriteLine("\n\rStarting new site at: " + DateTime.Now + "\n\r");
                LogStartingNewSite(sourceSiteUrl);
            }
            catch (Exception ex)
            {
                string strmsg = ex.Message;
            }

            AuthenticationManager authManagerSource = new AuthenticationManager();
            using (ClientContext clientContextSource = authManagerSource.GetWebLoginClientContext(sourceSiteUrl))
            {
                Web sourceWeb = clientContextSource.Web;
                clientContextSource.Load(sourceWeb, w => w.HasUniqueRoleAssignments);
                clientContextSource.ExecuteQuery();
                clientContextSource.RequestTimeout = 9999999;
                AuthenticationManager authManagerTarget = new AuthenticationManager();
                using (ClientContext clientContextTarget = authManagerTarget.GetWebLoginClientContext(targetSiteUrl))
                {
                    clientContextTarget.RequestTimeout = 9999999;
                    Web targetWeb = clientContextTarget.Web;
                    clientContextTarget.Load(targetWeb, w => w.HasUniqueRoleAssignments, w => w.RoleDefinitions, w => w.ServerRelativeUrl, w => w.Title);
                    clientContextTarget.ExecuteQuery();

                    if (sourceWeb.HasUniqueRoleAssignments)
                    {
                        RoleAssignmentCollection roleAssignmentColl = sourceWeb.RoleAssignments;
                        clientContextSource.Load(roleAssignmentColl);
                        clientContextSource.ExecuteQuery();
                        foreach (RoleAssignment ra in roleAssignmentColl)
                        {
                            clientContextSource.Load(ra, r => r.Member, r => r.RoleDefinitionBindings);
                            clientContextSource.ExecuteQuery();
                            Principal principalMember = ra.Member;
                            if (principalMember.PrincipalType == PrincipalType.User)
                            {
                                string sourceUserID = ra.Member.LoginName;
                             
                                foreach (RoleDefinition rd in ra.RoleDefinitionBindings)
                                {
                                    try
                                    {
                                        if (rd.Name != "Limited Access")
                                        {
                                            string targetUserID = sourceUserID.Replace(sourceClaimPrefix, targetClaimPrefix) + targetClaimSuffix;
                                            CopyUserPermissions(sourceUserID, targetUserID, sourceWeb, targetWeb, targetWeb.Title, "web", clientContextSource, clientContextTarget, rd.Name);
                                        }
                                    }
                                    catch { }
                                }
                            }


                        }
                    }



                    ListCollection listColl = sourceWeb.Lists;
                    clientContextSource.Load(listColl, lc => lc.Include(l => l.HasUniqueRoleAssignments, l => l.Hidden, l => l.Title));
                    clientContextSource.ExecuteQuery();
                    foreach (List list in listColl)
                    {
                        if (list.HasUniqueRoleAssignments && (!list.Hidden))
                        {
                            RoleAssignmentCollection roleAssignmentColl = list.RoleAssignments;
                            clientContextSource.Load(roleAssignmentColl);
                            clientContextSource.ExecuteQuery();
                            foreach (RoleAssignment ra in roleAssignmentColl)
                            {
                                clientContextSource.Load(ra, r => r.Member, r => r.RoleDefinitionBindings);
                                clientContextSource.ExecuteQuery();
                                Principal principalMember = ra.Member;
                                if (principalMember.PrincipalType == PrincipalType.User)
                                {
                                    string sourceUserID = ra.Member.LoginName;
                                 
                                    foreach (RoleDefinition rd in ra.RoleDefinitionBindings)
                                    {
                                        try
                                        {
                                            if (rd.Name != "Limited Access")
                                            {
                                                string targetUserID = sourceUserID.Replace(sourceClaimPrefix, targetClaimPrefix) + targetClaimSuffix;
                                                CopyUserPermissions(sourceUserID, targetUserID, sourceWeb, targetWeb, list.Title, "list", clientContextSource, clientContextTarget, rd.Name);
                                            }
                                        }
                                        catch { }
                                    }
                                }


                            }

                        }
                    }
                }
            }

        }

        public static void CopyUserPermissions(string sourceUserID, string targetUserID, Web sourceWeb, Web targetWeb, string objTitle, string objType, ClientContext sourceContext, ClientContext targetContext, string permLevel)
        {
            try
            {
                var targetUser = targetWeb.EnsureUser(targetUserID);

                if (objType == "web")
                {
                    if (!targetWeb.HasUniqueRoleAssignments)
                    {
                        targetWeb.BreakRoleInheritance(true, true);
                        targetContext.ExecuteQuery();
                    }
                    RoleDefinition role = targetWeb.RoleDefinitions.GetByName(permLevel);
                    targetContext.Load(role);
                    targetContext.ExecuteQuery();
                    RoleDefinitionBindingCollection roleBindingColl = new RoleDefinitionBindingCollection(targetContext);
                    roleBindingColl.Add(role);
                    targetWeb.RoleAssignments.Add(targetUser, roleBindingColl);
                    targetContext.ExecuteQuery();

                    try
                    {
                        LogOperation(targetWeb.ServerRelativeUrl, sourceUserID.Split('|')[2], "Web", objTitle);
                        Console.WriteLine("Added " + sourceUserID.Split('|')[2] + " in site: " + objTitle + " at " + targetWeb.ServerRelativeUrl);
                    }
                    catch (Exception ex)
                    {
                        string strmsg = ex.Message;
                    }
                }
                if (objType == "list")
                {
                    List list = targetWeb.GetListByTitle(objTitle);
                    targetContext.Load(list, l => l.HasUniqueRoleAssignments, l => l.RoleAssignments);
                    targetContext.ExecuteQuery();
                    if (!list.HasUniqueRoleAssignments)
                    {
                        list.BreakRoleInheritance(true, true);
                        targetContext.ExecuteQuery();
                    }
                    RoleDefinition role = targetWeb.RoleDefinitions.GetByName(permLevel);
                    targetContext.Load(role);
                    targetContext.ExecuteQuery();
                    RoleDefinitionBindingCollection roleBindingColl = new RoleDefinitionBindingCollection(targetContext);
                    roleBindingColl.Add(role);
                    list.RoleAssignments.Add(targetUser, roleBindingColl);
                    targetContext.ExecuteQuery();

                    try
                    {
                        LogOperation(targetWeb.ServerRelativeUrl, sourceUserID.Split('|')[2], "List", objTitle);
                        Console.WriteLine("Added " + sourceUserID.Split('|')[2] + " in list: " + objTitle + " at " + targetWeb.ServerRelativeUrl);
                    }
                    catch (Exception ex)
                    {
                        string strmsg = ex.Message;
                    }
                }

            }
            catch (Exception ex)
            {
                try
                {
                    LogError(ex.Message, sourceUserID.Split('|')[2], targetWeb.ServerRelativeUrl);
                    Console.WriteLine("\n\rERROR at " + targetWeb.ServerRelativeUrl + " while adding " + sourceUserID.Split('|')[2] +
                        " in " + objType + " " + objTitle + " " +
                        " Message: " + ex.Message + "\n\r");
                }
                catch { }
            }
        }

Wednesday, 18 December 2019

CSOM : How to remove permission of all the SharePoint users?


public static void RemoveSitePermissions(string strURL)
        {
            AuthenticationManager authManagerSource = new AuthenticationManager();
            using (ClientContext clientContextSource = authManagerSource.GetWebLoginClientContext(strURL))
            {
                clientContextSource.RequestTimeout = 9999999;
                Web sourceWeb = clientContextSource.Web;
                clientContextSource.Load(sourceWeb, w => w.HasUniqueRoleAssignments, w => w.RoleDefinitions, w => w.ServerRelativeUrl, w => w.Title);
                clientContextSource.ExecuteQuery();


                if (sourceWeb.HasUniqueRoleAssignments)
                {
                    RoleAssignmentCollection webRoleAssignments = sourceWeb.RoleAssignments;
                    clientContextSource.Load(webRoleAssignments);
                    clientContextSource.ExecuteQuery();
                    Console.WriteLine("Removing permissions from web..\r\n\r\n");
                    foreach (RoleAssignment webRoleAssignment in webRoleAssignments)
                    {
                        clientContextSource.Load(webRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                        clientContextSource.ExecuteQuery();
                        Principal oPrincipal = webRoleAssignment.Member;
                        if (oPrincipal.PrincipalType == PrincipalType.User)
                        {

                            foreach (RoleDefinition rd in webRoleAssignment.RoleDefinitionBindings)
                            {
                                try
                                {
                                    if (rd.Name != "Limited Access")
                                    {
                                        clientContextSource.Load(rd);
                                        webRoleAssignment.RoleDefinitionBindings.Remove(rd);
                                        webRoleAssignment.Update();
                                        clientContextSource.Load(webRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                                        sourceWeb.Update();
                                        clientContextSource.ExecuteQuery();
                                        Console.Write(".");
                                    }
                                }
                                catch (Exception ex)
                                { }
                            }
                        }
                    }
                }
                ListCollection listColl = sourceWeb.Lists;
                clientContextSource.Load(listColl, lc => lc.Include(l => l.HasUniqueRoleAssignments, l => l.Hidden, l => l.Title));
                clientContextSource.ExecuteQuery();

                foreach (List list in listColl)
                {
                    if (list.HasUniqueRoleAssignments && (!list.Hidden))
                    {

                        RoleAssignmentCollection oRoleAssignments = list.RoleAssignments;
                        clientContextSource.Load(oRoleAssignments);
                        clientContextSource.ExecuteQuery();

                        Console.WriteLine("Removing permissions from lists..\r\n\r\n");
                        foreach (RoleAssignment listRoleAssignment in oRoleAssignments)
                        {
                            clientContextSource.Load(listRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                            clientContextSource.ExecuteQuery();
                            Principal oPrincipal = listRoleAssignment.Member;
                            if (oPrincipal.PrincipalType == PrincipalType.User)
                            {
                                foreach (RoleDefinition rd in listRoleAssignment.RoleDefinitionBindings)
                                {
                                    try
                                    {
                                        if (rd.Name != "Limited Access")
                                        {
                                            clientContextSource.Load(rd);
                                            listRoleAssignment.RoleDefinitionBindings.Remove(rd);
                                            listRoleAssignment.Update();
                                            clientContextSource.Load(listRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
                                            list.Update();
                                            clientContextSource.ExecuteQuery();
                                            Console.Write(".");
                                        }
                                    }
                                    catch { }
                                }
                            }
                        }


                    }
                }
            }
        }

Reference: https://sharepoint.stackexchange.com/a/228169

Thursday, 21 November 2019

SSOM: How to copy SharePoint permissions from one user account to another?


protected static void CopySitePermissions_Source_Groups(string strUrl)
        {
            try
            {
                Console.WriteLine("\n\rStarting new site at: " + DateTime.Now + "\n\r");
                LogStartingNewSite(strUrl);
            }
            catch (Exception ex)
            {
                string strmsg = ex.Message;
            }
            using (SPSite site = new SPSite(strUrl))
            {
                using (SPWeb Web = site.OpenWeb())
                {
                    foreach (SPGroup siteGroup in Web.Groups)
                    {
                        foreach (SPUser objUser in siteGroup.Users)
                        {
                            try
                            {
                                string TargetUserID = SourceUserID + "@company.com";

                                if (Web.HasUniqueRoleAssignments)
                                {
                                    CopyUserPermissions(SourceUserID, TargetUserID, Web, Web);
                                }

                                foreach (SPList List in Web.Lists)
                                {
                                    if (List.HasUniqueRoleAssignments && (!List.Hidden))
                                    {
                                        CopyUserPermissions(SourceUserID, TargetUserID, Web, List);
                                    }

                                    if (List.Folders != null)
                                    {
                                        foreach (SPListItem folder in List.Folders)
                                        {
                                            if (folder.HasUniqueRoleAssignments)
                                            {
                                                CopyUserPermissions(SourceUserID, TargetUserID, Web, folder);
                                            }
                                        }
                                    }

                                    foreach (SPListItem item in List.Items)
                                    {
                                        if (item.HasUniqueRoleAssignments)
                                        {
                                            CopyUserPermissions(SourceUserID, TargetUserID, Web, item);
                                        }
                                    }
                                }

                            }
                            catch (Exception ex)
                            {
                                string strEx = ex.Message;
                            }
                        }
                    }

                    foreach (SPUser objUser in Web.Users)
                    {
                        try
                        {
                         
                            string TargetUserID = SourceUserID + "@company.com";

                            if (Web.HasUniqueRoleAssignments)
                            {
                                CopyUserPermissions(SourceUserID, TargetUserID, Web, Web);
                            }

                            foreach (SPList List in Web.Lists)
                            {
                                if (List.HasUniqueRoleAssignments && (!List.Hidden))
                                {
                                    CopyUserPermissions(SourceUserID, TargetUserID, Web, List);
                                }

                                if (List.Folders != null)
                                    {
                                        foreach (SPListItem folder in List.Folders)
                                        {
                                            if (folder.HasUniqueRoleAssignments)
                                            {
                                                CopyUserPermissions(SourceUserID, TargetUserID, Web, folder);
                                            }
                                        }
                                    }

                                    foreach (SPListItem item in List.Items)
                                    {
                                        if (item.HasUniqueRoleAssignments)
                                        {
                                            CopyUserPermissions(SourceUserID, TargetUserID, Web, item);
                                        }
                                    }
                            }
                        }
                        catch (Exception ex)
                        {
                            //log error
                        }
                    }

                }
            }
        }


public static void CopyUserPermissions(string SourceUserID, string TargetUserID, SPWeb web, SPSecurableObject Object)
        {
            try
            {
                var SourceUser = web.EnsureUser(SourceUserID);
                var TargetUser = web.EnsureUser(TargetUserID);

                var SourcePermissions = Object.GetUserEffectivePermissionInfo(SourceUser.LoginName);

                foreach (var SourceRoleAssignment in SourcePermissions.RoleAssignments)
                {
                    List<string> SourceUserPermissions = new List<string>();
                    foreach (SPRoleDefinition SourceRoleDefinition in SourceRoleAssignment.RoleDefinitionBindings)
                    {
                        if (SourceRoleDefinition.Name != "Limited Access")
                        {
                            SourceUserPermissions.Add(SourceRoleDefinition.Name);
                        }
                    }

                    if (SourceUserPermissions.Count > 0)
                    {
                        if (SourceRoleAssignment.Member is SPGroup)
                        {
                            var Group = (SPGroup)SourceRoleAssignment.Member;
                            var flag = false;
                            foreach (SPUser user in Group.Users)
                            {
                                if (user.LoginName == TargetUserID)
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                Group.AddUser(TargetUser);
                                try
                                {
                                    LogOperation(web.ServerRelativeUrl, SourceUserID.Split('|')[2], "Group", Group.Name);
                                    Console.WriteLine("Added " + SourceUserID.Split('|')[2] + " in Group: " + Group.Name + " at " + web.ServerRelativeUrl);
                                }
                                catch (Exception ex)
                                {
                                     //log error
                                }
                            }
                        }
                        else
                        {
                            foreach (string NewRoleDefinition in SourceUserPermissions)
                            {
                                var NewRoleAssignment = new SPRoleAssignment(TargetUser);
                                NewRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions[NewRoleDefinition]);

                                if (Object.GetType().Equals(typeof(SPWeb)))
                                {
                                    SPWeb spWeb = Object as SPWeb;
                                    spWeb.RoleAssignments.Add(NewRoleAssignment);
                                    spWeb.Update();
                                    try
                                    {
                                        LogOperation(web.ServerRelativeUrl, SourceUserID.Split('|')[2], "Site", spWeb.Title);
                                        Console.WriteLine("Added " + SourceUserID.Split('|')[2]+ " in Site: " + spWeb.Title + " at " + web.ServerRelativeUrl);
                                    }
                                    catch (Exception ex)
                                    {
                                         //log error
                                    }
                                }
                                if (Object.GetType().Equals(typeof(SPList)))
                                {
                                    SPList list = Object as SPList;
                                    list.RoleAssignments.Add(NewRoleAssignment);
                                    list.Update();
                                    try
                                    {
                                        LogOperation(web.ServerRelativeUrl, SourceUserID.Split('|')[2], "List", list.Title);
                                        Console.WriteLine("Added " + SourceUserID.Split('|')[2] + " in List: " + list.Title + " at " + web.ServerRelativeUrl);
                                    }
                                    catch (Exception ex)
                                    {
                                        string strmsg = ex.Message;
                                    }
                                }
                                if (Object.GetType().Equals(typeof(SPListItem)))
                                {
                                    SPListItem item = Object as SPListItem;
                                    item.RoleAssignments.Add(NewRoleAssignment);
                                    item.Update();
                                    try
                                    {
                                        LogOperation(web.ServerRelativeUrl, SourceUserID.Split('|')[2], "Item", item.ID.ToString());
                                        Console.WriteLine("Added " + SourceUserID.Split('|')[2]+ " in Item: " + item.ID.ToString() + " at " + web.ServerRelativeUrl);
                                    }
                                    catch (Exception ex)
                                    {
                                        //log error
                                    }
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                try
                {
                    LogError(ex.Message, SourceUserID.Split('|')[1], web.ServerRelativeUrl);
                    Console.WriteLine("\n\rERROR at " + web.ServerRelativeUrl + " while adding " + SourceUserID.Split('|')[1] +
                        " Message: " + ex.Message + "\n\r");
                }
                catch { }
            }
        }

Reference: https://www.sharepointdiary.com/2015/01/clone-sharepoint-user-permissions-using-powershell.html

Wednesday, 20 November 2019

CSOM: How to copy all files from one SharePoint library to another?

private void btnCopyFiles_Click(object sender, EventArgs e)
        {
            int itemProcessed = 0;
            try
            {
                F.MessageBox.Show("Please make sure the workflows are disabled on the target list.");
                progressBar1.Value = 0;


                PnP.AuthenticationManager authManagerTarget = new PnP.AuthenticationManager();
                using (ClientContext clientContextTarget = authManagerTarget.GetWebLoginClientContext(txtTargetSite.Text))
                {
                    clientContextTarget.RequestTimeout = 9999999;
                    List targetList = clientContextTarget.Web.Lists.GetByTitle(drpTargetList.SelectedItem.ToString());
                    clientContextTarget.Load(targetList);
                    clientContextTarget.ExecuteQueryRetry();

                    PnP.AuthenticationManager authManagerSource = new PnP.AuthenticationManager();
                    using (ClientContext clientContextSource = authManagerSource.GetWebLoginClientContext(txtSourceSite.Text))
                    {
                        List sourceList = clientContextSource.Web.Lists.GetByTitle(drpSourceList.SelectedItem.ToString());
                        CamlQuery camlQuery = new CamlQuery();
                        camlQuery.ViewXml = "<View Scope ='RecursiveAll'></View>";
                        ListItemCollection sourceItems = sourceList.GetItems(camlQuery);
                        clientContextSource.Load(sourceItems);
                        clientContextSource.ExecuteQueryRetry();

                        progressBar1.Maximum = sourceItems.Count;


                        int itemToSkip = 0;
                        try
                        {
                            itemToSkip = txtItemsToSkip.Text.ToInt32();
                        }
                        catch { }

                        string sourceLibrary = string.Empty;
                        string targetLibrary = drpTargetList.SelectedItem.ToString();
                        string fileName = string.Empty;
                        string fileUrl = string.Empty;
                        string folderPath = string.Empty;
                        Web targetWeb = clientContextTarget.Web;
                        clientContextTarget.Load(targetWeb, u => u.ServerRelativeUrl);
                        clientContextTarget.ExecuteQueryRetry();
                        string _path = targetWeb.ServerRelativeUrl;

                        try
                        {
                            sourceLibrary = sourceItems[0].FieldValues["FileDirRef"].ToString();
                            string[] urlArr = sourceLibrary.Split('/');
                            sourceLibrary = urlArr[urlArr.Count() - 1];
                        }
                        catch { }

                        foreach (ListItem sourceItem in sourceItems)
                        {
                            itemProcessed++;

                            if (itemProcessed <= txtItemsToSkip.Text.ToInt32())
                            {
                                progressBar1.Value += 1;
                                continue;
                            }

                            if (sourceItem.FileSystemObjectType == FileSystemObjectType.File)
                            {
                                try
                                {
                                    fileUrl = sourceItem["FileRef"].ToString();
                                    if (!FileExists(targetList, fileUrl.Replace("/Shared Documents/","/Documents/")))
                                    {
                                        string[] fileNames = fileUrl.Split(new string[] { sourceLibrary }, StringSplitOptions.None);
                                        fileName = fileNames[fileNames.Count() - 1];

                                        MSC.File file = sourceItem.File;
                                        clientContextSource.Load(file);
                                        clientContextSource.ExecuteQueryRetry();

                                        FileInformation fileInfo = MSC.File.OpenBinaryDirect(clientContextSource, file.ServerRelativeUrl);
                                        MSC.File.SaveBinaryDirect(clientContextTarget, _path + "/" + targetLibrary + fileName, fileInfo.Stream, false);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    this.LogCopyError(ex, "File", targetLibrary, fileUrl);
                                }
                            }

                            else if (sourceItem.FileSystemObjectType == FileSystemObjectType.Folder)
                            {
                                try
                                {
                                    folderPath = sourceItem["FileRef"].ToString();
                                    string[] fileNames = folderPath.Split(new string[] { sourceLibrary }, StringSplitOptions.None);
                                    folderPath = fileNames[fileNames.Count() - 1];
                                    folderPath = folderPath.TrimStart(new Char[] { '/' });
                                    MSC.Folder folder = CreateFolder(clientContextTarget.Web, drpTargetList.SelectedItem.ToString(), folderPath);
                                }
                                catch (Exception ex)
                                {
                                    this.LogError(ex);
                                }
                            }

                            progressBar1.Value += 1;
                        }
                    }
                }
                F.MessageBox.Show("Done. Please match the items count");
            }
            catch (Exception ex)
            {
                this.LogError(ex);
                F.MessageBox.Show("Something went wrong. Please check the logs.");
                try
                {
                    F.MessageBox.Show("Items processed: " + (--itemProcessed));
                }
                catch { }
            }
        }

        private MSC.Folder CreateFolder(Web web, string listTitle, string fullFolderPath)
        {

            if (string.IsNullOrEmpty(fullFolderPath))
                throw new ArgumentNullException("fullFolderPath");
            var list = web.Lists.GetByTitle(listTitle);
            return CreateFolderInternal(web, list.RootFolder, fullFolderPath);

        }

        private MSC.Folder CreateFolderInternal(Web web, MSC.Folder parentFolder, string fullFolderPath)
        {

            var folderUrls = fullFolderPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            string folderUrl = folderUrls[0];
            var curFolder = parentFolder.Folders.Add(folderUrl);
            web.Context.Load(curFolder);
            web.Context.ExecuteQueryRetry();

            if (folderUrls.Length > 1)
            {
                var folderPath = string.Join("/", folderUrls, 1, folderUrls.Length - 1);
                return CreateFolderInternal(web, curFolder, folderPath);
            }

            return curFolder;
        }

        public bool FileExists(List list, string fileUrl)
        {
            var ctx = list.Context;
            var qry = new CamlQuery();
            qry.ViewXml = string.Format("<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"FileRef\"/><Value Type=\"Url\">{0}</Value></Eq></Where></Query></View>", fileUrl);
            var items = list.GetItems(qry);
            ctx.Load(items);
            ctx.ExecuteQuery();
            return items.Count > 0;
        }

Reference: https://sharepoint.stackexchange.com/a/203283