SharePoint 2013 開發——獲取使用者配置檔案屬性內容(User Profile)

Justin-Liu發表於2015-07-21
部落格地址:http://blog.csdn.net/FoxDave

本篇我們應用SharePoint CSOM(.NET)來讀取使用者配置檔案的資訊,個人開始逐漸傾向於客戶端模型,因為不用遠端登入到伺服器去開發,在本機就可以玩了。

開啟本地的Visual Studio 2015,選擇新建專案,我們新建一個Windows Form應用程式吧,好久沒用了,命名為WindowsFormsSPUserProfile。

應用CSOM,我們首先要對我們的專案新增客戶端的引用。右鍵點選專案節點, 選擇新增引用,在彈出窗體的右上角輸入sharepoint進行搜尋,選擇Client、Client.Runtime、Client.UserProfile這三個dll新增,注意版本要選擇15.0.0.0。

然後我們拖一個Label,一個TextBox,一個Button,一個DataGridView到窗體上,作為輸入引數,輸入網站集的URL,然後用DataGridView顯示出所有的使用者配置檔案。

雙擊按鈕控制元件,後臺將自動生成button_Click事件方法,我們就在此處寫我們的邏輯程式碼部分。

首先對輸入框的Site URL部分做一下判定,這裡用作演示我們就只判斷一下非空條件,實際過程可能會涉及到諸如地址是否合法等問題。

接下來就在else分支中寫主要的獲取邏輯程式碼。在這個例子中,我們大致的思路是為:將某個網站集的使用者讀取出來,進而獲取該使用者的配置檔案的屬性集合。首先將使用者列表載入到DataGridView中,然後在選擇具體的某個使用者時顯示所選擇使用者的配置檔案的屬性集合資訊。

首先將使用者資訊載入到控制元件上,WinForm好久不用了,所以方法較為笨拙。

然後配置DataGridView控制元件的Click事件,獲取選中的行得到使用者名稱資訊,進而獲得屬性集合資訊。

下面附上完整程式碼,比較粗糙,僅作示例用。

using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;
using System;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsSPUserProfile
{
    public partial class MainForm : System.Windows.Forms.Form
    {
        ClientContext mClientContext = null;
        public MainForm()
        {
            InitializeComponent();
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (txtSiteURL.Text == "")
            {
                MessageBox.Show("請輸入網站集地址。");
            }
            else
            {
                //todo
                //獲取輸入的網站集URL
                string siteUrl = txtSiteURL.Text;
                //構建上下文物件
                if (mClientContext == null)
                {
                    mClientContext = new ClientContext(siteUrl);
                }
                //獲取網站網站集的所有使用者
                UserCollection users = mClientContext.Web.SiteUsers;
                mClientContext.Load(users);
                mClientContext.ExecuteQuery();
                //構建使用者表
                DataTable table = new DataTable();
                table.Columns.Add("User Name", typeof(string));
                foreach (User u in users)
                {
                    DataRow row = table.NewRow();
                    row[0] = u.LoginName;
                    table.Rows.Add(row);
                }
                dataGridView.DataSource = table;
            }
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            //窗體關閉前釋放資源
            if (mClientContext != null)
            {
                mClientContext.Dispose();
            }
        }

        private void dataGridView_MouseClick(object sender, MouseEventArgs e)
        {
            //獲取雙擊行的使用者
            string userName = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
            //獲取人員管理器
            PeopleManager peopleManager = new PeopleManager(mClientContext);
            //獲取使用者屬性物件
            PersonProperties personProperties = peopleManager.GetPropertiesFor(userName);
            mClientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
            mClientContext.ExecuteQuery();
            StringBuilder propertiesStr = new StringBuilder(1300);
            foreach (var property in personProperties.UserProfileProperties)
            {
                propertiesStr.AppendLine(string.Format("{0}: {1}", property.Key.ToString(), property.Value.ToString()));
            }
            MessageBox.Show(propertiesStr.ToString());
        }
    }
}

本例的執行效果如下所示:


相關文章