摘要:本章節(jié)里,我們要學(xué)習(xí)如何給InfoPath添加代碼,然后如何把含有代碼的表單模板發(fā)布到具有Forms Service的網(wǎng)站上去。本代碼比較簡單:根據(jù)上一章的示例,模板里有一個字段叫“申請人”,這段代碼就是根據(jù)當(dāng)前登錄的人名,通過代碼查詢到他的部門,然后自動地填到“申請部門”這個下拉框中去。這樣當(dāng)使用者第一次新建這個表單時,申請人和部門就會自動填好,這樣就會顯得模板比較智能。
你將學(xué)會:
- 如何給InfoPath模板添加代碼,并進(jìn)行發(fā)布。
- 如何從MOSS的用戶配置文件中來讀取用戶的中文名稱
- 如何使用OM和Query語句,對SharePoint列表進(jìn)行查詢
- 如何在程序中設(shè)置表單中某個節(jié)點(域)的值
- 如何應(yīng)用Loading事件
一、新建一個表單庫,用來存放表單
如下圖:
二、編輯表單模板,并加入程序
1 以設(shè)計模式打開模板,在“工具”-“表單選項”中設(shè)置編程語言為c#,如下圖:
2.設(shè)置表單模板的安全級別為“完全信任”和表單模板簽名,如下圖:
3. 在通過菜單中的Loading事件,打開編寫程序的界面:
4.給程序添加3個必要的“引用”,如圖下圖,打開“添加引用”對話框,
1)給程序集添加WSS的引用,主要使用OM對象模型,如下圖:
2)給程序集添加Office Server的引用,主要使用配置文件類,如下圖:
3) 參照之前的例子,再給程序加上System.Web的引用,主要用來使用ServerContext對象。
5 給程序加上代碼
1) 給程序加上引用行,如下示例:
//以下需要手動加上去的 using System.Web; using Microsoft.Office.Server; using Microsoft.Office.Server.Administration; using Microsoft.Office.Server.UserProfiles; using Microsoft.SharePoint;
2) 在Loading事件中加入如下的代碼:
if (this.New) //如果是新的表單,就設(shè)置初始值 { //取得當(dāng)前用戶在配置文件中FullName的值 using (SPSite site = new SPSite("http://oss")) //請把這個值換成你的SharePoint網(wǎng)站的URL { //以下根據(jù)當(dāng)前用戶登錄名來取得用戶的配置文件 ServerContext context = ServerContext.GetContext(site); UserProfileManager profileManager = new UserProfileManager(context); UserProfile u = profileManager.GetUserProfile(this.Application.User.LoginName); string fullName = u[PropertyConstants.PreferredName].Value.ToString(); XPathNavigator mainNavigator = this.MainDataSource.CreateNavigator(); //取得主數(shù)據(jù)源的檢索游標(biāo) //設(shè)置申請人的節(jié)點值為用戶名,即配置文件中PreferredName(名稱)的屬性 mainNavigator.SelectSingleNode("/my:myFields/my:申請人", this.NamespaceManager).SetValue(fullName); //根據(jù)姓名從SharePoint的部門列表來查詢部門 using (SPWeb web = site.AllWebs["/demo"]) //請把這個換成你的SharePoint網(wǎng)站的URL { SPQuery query = new SPQuery(); //因為姓名字段,是從標(biāo)題更改而來的,所以其內(nèi)部名稱為Title query.Query = "<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>" + fullName + "</Value></Eq></Where>"; SPList list = web.Lists["部門人員"]; SPListItemCollection items = list.GetItems(query); if (items.Count > 0) //如果查找到了就設(shè)置部門的值 mainNavigator.SelectSingleNode("/my:myFields/my:申請部門", this.NamespaceManager).SetValue(items[0]["部門"].ToString ()); } } } }
6 調(diào)試看結(jié)果
請按 可以看看調(diào)試結(jié)果,如下圖:
三、 部署模板到文檔庫
程序都調(diào)試好了,應(yīng)該部署到文檔庫中,如何部署呢?
1. 啟動文件菜單中的發(fā)布向?qū)В涯0灏l(fā)布到C:盤的根文件夾下,如下圖:
2 把剛才發(fā)布的模板上傳到管理中心,并激活到網(wǎng)站集
進(jìn)入管理中心,的“應(yīng)用程序管理”頁面,如下圖點擊進(jìn)入上傳頁面:
點擊上傳后,再點擊確定,進(jìn)入模板的列表頁面,如下圖把這個模板激活到網(wǎng)站集:
在配置頁面里,如下圖配置好使用這個模板的網(wǎng)站集:
3 設(shè)置文檔庫
1)首先打開第一步創(chuàng)建的“采購申請”文檔庫的高級設(shè)置,打開內(nèi)容類型管理,并配置為網(wǎng)頁顯示這個表單庫如下圖:
2)如下圖添加“采購申請單”內(nèi)容類型:
如下圖把采購申請單添加進(jìn)入右邊
結(jié)果如圖:
3)把這個內(nèi)容類型設(shè)置為唯一模板,并把原有的表單模板刪除掉,
點擊“更改’新建’按鈕的順序和默認(rèn)內(nèi)容類型”,
把采購申請單,設(shè)置為第1內(nèi)容類型,如下圖:
點擊進(jìn)入表單內(nèi)容類型的設(shè)置界面,點擊刪除:
四、測試結(jié)果
如下圖,點擊新建
結(jié)果如下圖,一切正常: