Источник:
http://fredshen.spaces.live.com/Blog...E4E3!226.entry
==============
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 Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI 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());
}
}
}

Источник:
http://fredshen.spaces.live.com/Blog...E4E3!226.entry