Add a Dynamics AX user to be a memebr of Sharepoint site group

In AX 4.0, it is allowed to link an AX user to a particular Sharepoint site group from main menu -> Administration -> Users -> User relations button -> Web sites tab. Unfortunately, this is removed from AX 2009.
However, we can still add this feature back if we like by using X++.
 
The example below show how easy can add an AX user to Sharepoint site owner groups by using X++ and CLRInterop.
Before you run this job, please add Microsoft.Sharepoint.dll (WSS 3.0) as a reference on AOT if it is not registered in GAC.
You can find this dll in C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12ISAPI on the server that Enterprise Portal resides.
 
static void AddAXUserToSharepointGroup(Args _args)
{
    Microsoft.SharePoint.SPWeb                   spWeb;
    Microsoft.SharePoint.SPSite                    spSite;
    Microsoft.SharePoint.SPGroupCollection  spGroupCollection;
    Microsoft.SharePoint.SPGroup                spGroup;
    Microsoft.SharePoint.SPUserCollection    spUserCollection;
    Microsoft.SharePoint.SPUser                  spUser;
    EPWebSiteParameters                           epWebSiteParameters;
    UserInfo                                              userInfo;
    SysUserInfo                                         sysUserInfo;
    str                                                       loginName;
    System.Exception                                 ex;
    str                                                       siteGroupName;
    ;
   
    try
    {
        //Sharepoint site registered in AX2009
        select firstonly epWebSiteParameters;
        select firstonly userInfo
            where userInfo.id == curUserId();
        select firstonly sysUserInfo
            where sysUserInfo.Id == curUserId();
        loginName           = userInfo.networkDomain + @"" + userInfo.networkAlias;
        spSite              = new Microsoft.SharePoint.SPSite(epWebSiteParameters.InternalUrl);
        spWeb               = spSite.get_RootWeb();
        //Create a user in Sharepoint
        spUserCollection    = spWeb.get_SiteUsers();
        spUserCollection.Add(loginName, sysUserInfo.Email, userInfo.name, "");
        //Add the user to a site owner group
        spUser              = spUserCollection.get_Item(loginName);
        spGroupCollection   = spWeb.get_SiteGroups();
        siteGroupName       = CLRInterop::getAnyTypeForObject(spWeb.get_Title()) + " Owners"; //Or Visitors, Members
        spGroup             = spGroupCollection.get_Item(siteGroupName);
        spGroup.AddUser(spUser);
        spGroup.Update();
    }
    catch (exception::CLRError)
    {
        ex = CLRinterop::getLastException();   
        if (ex)
        {
            info(ex.ToString());          
        }
    }
    catch (exception::Internal)           
    {
        ex = clrinterop::getLastException();       
        if (ex)
        {
            info(ex.ToString());           
        }
    }
}
 
This entry was posted in Axapta Development. Bookmark the permalink.

Leave a comment