轉帖|其它|編輯:郝浩|2010-12-13 15:55:43.000|閱讀 1293 次
概述:在SharePoint2010中,我們可以選擇幾種不同的方式來訪問域用戶的profile,下面簡單介紹3種方法訪問域用戶profile.
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在SharePoint2010中,我們可以選擇幾種不同的方式來訪問域用戶的profile,下面簡單介紹3種方法:
1.通過客戶端直接調用user profile service來訪問
例如項目中有silverlight模塊想顯示當前用戶的profile信息,可以這么作:
首先添加Service Reference,輸入service url //rootsite/sites/subsite/_vti_bin/UserProfileService.asmx?WSDL
rootsite & subsite請根據實際情況替換。然后我們為我們的Service reference取名為UserProfileServiceProxy。
其次在maipage方法中加入調用service 代碼以及回調方法代碼:
public MainPage()
{
InitializeComponent();
client = new UserProfileServiceProxy.UserProfileServiceSoapClient();
client.Endpoint.Behaviors.Add(new AsmxBehavior());
client.GetUserProfileByNameCompleted +=
new EventHandler<UserProfileServiceProxy.
GetUserProfileByNameCompletedEventArgs>
(client_GetUserProfileByNameCompleted);
client.GetUserProfileByNameAsync(null);
}
private void client_GetUserProfileByNameCompleted(object sender, UserProfileServiceProxy.GetUserProfileByNameCompletedEventArgs e)
{
if (e.Error == null)
{
string s = "";
for (int i = 0; i < e.Result.Count; i++)
{
if (e.Result[i].Values.Count > 0)
{
s +="{" + i.ToString() + "}" +"-->" + e.Result[i].Values[0].Value.ToString() + "\n";
}
}
MessageBox.Show(s);
}
}
其中加入AsmxBehavior類的原因是silverlight對guid的deseriable無法識別,網上找了個別人寫的類,不添加這個bahavior,service調用會報異常,AsmxBehavior類和AsmxMessageInspector類就解決了這個問題,用的時候,把這兩個類加進你的項目中就可以了。AsmxBehavior類和AsmxMessageInspector類的詳細代碼會在附件中加上。
這樣就可以得到一個當前user的profile信息了,可以看見我們主要是調用了GetUserProfileByNameAsync(null)這個方法,傳入null參數返回當前用戶profile,當然你可以給別的name來得到相應的profile。
2. 在server直接通過SharePoint 的 Object Model取得service,方法如下:
using (SPSite site = new SPSite("siteurl"))
{
SPServiceContext context = SPServiceContext.GetContext(site);
UserProfileManager pmManager = new UserProfileManager(context);
System.Collections.IEnumerator item = pmManager.GetEnumerator();
while (item.MoveNext())
{
UserProfile userProfile = item.Current as UserProfile;
object o = userProfile[PropertyConstants.Url].Value;
}
}
注意此方法需要先添加引用下面2個dll文件:
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
3.當然當你有一個可以直接從公司域環境中讀取信息的帳號時,也可以直接去AD中讀取用戶profile,方法如下:
using System.DirectoryServices;
static void Main(string[] args)
{
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP:
//ads.autodesk.com", @"youraccount", "password",AuthenticationTypes.Secure);
DirectorySearcher ds = new DirectorySearcher(directoryEntry);
ds.Filter = "(&(objectCategory=Person)(objectClass=User))";
SearchResultCollection collection = ds.FindAll();
int count = 0;
foreach (SearchResult sr in collection)
{
System.DirectoryServices.DirectoryEntry det = sr.GetDirectoryEntry();
PropertyCollection pc = det.Properties;
if (det.Properties["mail"].Value !=
null && det.Properties["sAMAccountName"].Value != null)
{
Console.WriteLine(det.Properties["mail"].Value.ToString() + "--------" + det.Properties["sAMAccountName"].Value.ToString());
count++;
}
if (det.Properties["sAMAccountName"].Value.ToString() == "your account")
{
foreach (string propName in pc.PropertyNames)
{
foreach (object value in det.Properties[propName])
Console.WriteLine(" property = {0} value = {1}",
propName, value);
}
}
}
Console.WriteLine(count);
Console.Read();
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載自RyanDing