Я весьма озадачен этим. Расширяя существующую функцию до решения SharePoint, я обнаружил, что они запрашивают Wss_Content напрямую. Зная, что я не должен использовать эту хранимую процедуру, я использовал объектную модель SharePoint для получения информации о группе пользователей из userName. Что жжет меня, так это то, что это медленнее, чем хранимая процедура. Есть ли более умный / быстрый способ получить эту информацию? Мы используем SharePoint 2007. Ниже приведено примерное описание функции:
private string GetTitle(string userName)
{
string results = string.Empty;
try
{
SPSite spSite = new SPSite("http://devvm");
SPWeb spWeb = spSite.AllWebs[""];
SPUser user = spWeb.AllUsers["aspnetsqlmembershipprovider:" + userName];
SPGroupCollection groups = user.Groups;
results = groups[0].Name;
}
catch (Exception ex)
{
Console.WriteLine("Unable to find user" + userName);
results = "No Group Found";
}
return results;
}
и код хранимой процедуры:
SELECT @role=Groups.Title
FROM WSS_Content.DBO.UserInfo Info
LEFT JOIN WSS_Content.DBO.GroupMembership Membership
ON Info.tp_ID=Membership.MemberID
LEFT JOIN Wss_Content.DBO.Groups Groups
ON Membership.GroupID=Groups.ID
WHERE tp_Login='aspnetsqlmembershipprovider:' + @username
К вашему сведению, причина, по которой я это сделал в try-catch, заключается в том, что это подзапрос к другому списку, у которого может не быть пользователя, связанного с элементом.
Любая помощь в этом будет принята с благодарностью.