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