Nov 3, 2017

We can't do that for you because the file is no longer checked out or has been deleted

This error is an interesting scenario but so weird one which I faced recently while migrating SharePoint 2010 designer workflows to SharePoint Online.
Post migration, when I try to edit the workflow in designer I got the below error:

It clearly shows some configuration files are missing.
Hence I have navigated to All Files (from SharePoint Designer 2013) -> Workflows folder -> Workflow -> noticed only one file is migrated but other configuration XOML, XSD or XML files are missing.Now, logged in to the designer with the account which I migrated and found all these required files are Checked Out. When I try to check in the file then I get this error:
It is so confusing that you are not able to Check In the file even when you are SCA or have full control over the site or even if you have created the workflow.
After hours of confusion, finally found the file has having wrong file name or characters which SharePoint Online(Office 365) does not support. But this name format is supported in SharePoint 2010 version. Screenshot for reference.
Issue Fix:

Navigate to Workflows folder -> select the workflow name -> Right Click on the file -> Properties -> Remove the forward slash '/' -> Save -> Check in the file :)
Now, you should be able to edit the workflow in designer, save / publish it with no issues.
Thought this is worth sharing so that it saves someone's time!

Oct 9, 2017

Check if current user is member of a SharePoint group using JQuery

Scenario
This code will help you to check if the current user is a member of a group.
Suppose you want to check if the current user is member of a Owners group or not. Just update the "grpName" variable value and run the code 😎
Steps to use the code
1. Use the Script Editor web part and add this code to check if a user is in a SP group 
2. Or use this code as a reference in a Content Editor web part
3. Use this script as a reference in a SharePoint custom list forms or in any SP pages
Code
$(document).ready(function (e) {

    ExecuteOrDelayUntilScriptLoaded(IsCurrentUserMemberOfGroup, "sp.js");
});

function IsCurrentUserMemberOfGroup() {
    var grpName = "Site Owners";
    var userInGroup;
    var currentContext = new SP.ClientContext.get_current();
    var currentWeb = currentContext.get_web();

    var currentUser = currentContext.get_web().get_currentUser();
    currentContext.load(currentUser);

    var allGroups = currentWeb.get_siteGroups();
    currentContext.load(allGroups);

    var group = allGroups.getByName(grpName);
    currentContext.load(group);

    var groupUsers = group.get_users();
    currentContext.load(groupUsers);

    currentContext.executeQueryAsync(OnSuccess, OnFailure);

    function OnSuccess(sender, args) {

        var groupUserEnumerator = groupUsers.getEnumerator();
        while (groupUserEnumerator.moveNext()) {
            var groupUser = groupUserEnumerator.get_current();
            if (groupUser.get_id() == currentUser.get_id()) {
                userInGroup = true;
                break;
            }
        }
        if (userInGroup) {
            //alert("user exists in the group");
            //do some operation.
        }

        else {
            //alert("user doestn't exist in the group");
        }

    }

    function OnFailure(sender, args) {
        //error message.
    }
}
Happy coding!!!