Search code examples
c#sharepoint-2010workflow

How to get Current User in Sharepoint site workflow 2010?


Am trying to find the current logged user in sharepoint site workflow 2010 while creating a project. Based on the user, I would like to retrieve the current user's project manager. Every time am trying to retrieve current user name, it's giving System Account.

I even tried logging in as different user but still displaying System Account as the current user.

I tried following options :

SPUser user = workflowProperties.OriginatorUser;

SPUser user = SPContext.Current.Web.CurrentUser;


SPWeb web = SPContext.Current.Web;
SPUser user = web.CurrentUser;

 SPContext.Current.Web.CurrentUser.LoginName;

But everything failed. Am sure that am doing something wrong. I don't know the correct procedure. Some procedures give me null or Object reference not set to an instance of the object or System Account details. I have even tried using elevated permission and its giving me null value.

SPSecurity.CodeToRunElevated elevatedSubmit = new SPSecurity.CodeToRunElevated(delegate
        {
            //SPUser user = SPContext.Current.Web.CurrentUser;
            //string strAssignedTo = user.Name;

            string sspURL = "http://localhost/PWA/default.aspx";
            SPSite site = new SPSite(sspURL);
            SPWeb web = site.OpenWeb();
            SPUser theUser = web.CurrentUser;
            string strUserName = theUser.Name;
        });

        SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);

Am I supposed to add users explicitly as SPUser or any other changes before trying to retrieve current user via workflow ?


Solution

  • SharePoint 2010 Get Current Username / Logged in User

    check this StackExchange answer as well Get the current user interacting with a site workflow

    if you are wanting to get the current user when you log in you can try something like this

    SPWeb webSite = SPControl.GetContextWeb(SPContext);
    SPUser spUser = webSite.CurrentUser;
    string strUserName = spUser.LoginName;
    

    using this line below will return the OriginatorUser however if you are not logged in as Admin you will get the System Account UserName

    //This give the Login name e.g <domain>\<name>  
    workflowProperties.OriginatorUser.LoginName;
    

    ** Note ** I noticed that in your code you are trying to get / assign user twice you should only need this line if you decide to use your code

    SPUser user = SPContext.Current.Web.CurrentUser;