在InfoPath Forms Services中實現聯動下拉列表框(二)

 

通過VSTA編程實現聯動下拉列表框

      VSTAVisual Studio Tools for Applications )是微軟免費提供的方便開發人員定製應用程序的工具,它的作用和VBA類似,可以爲應用程序的二次開發人員提供一個Visual Studio環境以及C#VB.NET語言進行插件的開發,我們可以簡單的把它看成是VBA.Net升級版,目前微軟的Office2007完全支持這項技術。下面我們詳細說明實現通過VSTA編程實現聯動下拉列表框的過程。


 第一步,準備作爲下拉列表框數據源的列表。

      通過規則實現聯動下拉列表框的方法要求必須以帶參數查詢的Web Service作爲數據源,而下文中的方法對數據源沒有特殊要求。所以,我們選擇最簡單的SharePoint列表作爲數據源。在SharePoint服務器上創建一個自定義列表Cities,爲這個列表增加兩個欄,欄名爲CityProvince,類型都爲“單行文本”。創建好列表後輸入一些測試數據,如下圖。

 

第二步,設計InfoPath表單。

1. 我們創建一個與上一篇界面相同的表單,但是數據連接不同,也不需要添加規則。表單上同樣要放置兩個下拉列表框ddlb1ddlb2。
2. 進入下拉列表框ddlb1的屬性對話框,在“數據”頁中,手動輸入兩個選項“四川”和“新 疆”。注意,這次要保留第一行默認的空值(顯示名稱“選擇)
3. 在下拉列表框ddlb1屬性的“瀏覽器表單”頁,確認回發設置爲“始終”。
4. 需要強調兩點:第一,創建表單模板時一定要鉤選“僅啓用瀏覽器兼容性功能”,或者也可以在設計表單時選擇菜單工具/表單選項,進入表單選項對話框,在“類別”中選擇“兼容性”,鉤選“設計一個可在瀏覽器或InfoPath中打開的表單模板,作用與前者相同。
第二,在表單選項中選擇“安全和信任”,鉤選“自動確定安全級別”,而選擇“完全信任”。因爲如果在表單中加入VSTA編程,表單安全級別必須爲“完全信任”,否則程序無法運行。因爲表單安全級別爲“完全信任”,發佈表單步驟就與普通表單不同了,後面的文章會詳細說明發布安全級別爲“完全信任”的表單的步驟。
5. 以上界面設計完畢後接着添加數據連接,啓動“數據連接嚮導”,
A. 選擇將
SharePoint列表作爲數據源。
B. 進入下一步,輸入SharePoint網站的地址

C. 進入下一步,選擇列表Cities
D. 進入下一步,選擇列表的域ProvinceCities,如下圖。
E. 在嚮導最後一步,不要鉤選“在打開表單時自動檢索數據”,點擊“完成”按鈕。
  數據連接創建完畢後,接着就要設置下拉列表框ddlb2的數據源。在ddlb2屬性對話框“數據”頁的“列表框項”下選擇“從外部數據源查找值”,將“數據源”設置爲Cities,“項”設置爲:

/dfs:myFields/dfs:dataFields/dfs:Cities

“值”爲:@City

“顯示名稱”爲:@City

完成上述步驟,
InfoPath表單就設計好了,將這個表單模板保存爲ddlb2.xsn。下一步就要進行VSTA編程來實現下拉列表框聯動。
 

第三步,VSTA編程。

 

要進行VSTA編程必須安裝VSTA軟件開發工具包,筆者使用的版本是Visual Studio 2005 Tools for Applications Software Development Kit (SDK),下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=7C2EA8AE-E051-449A-9051-3A351BF27B7F&displaylang=en&displaylang=en

編程的思路是,系統偵聽下拉列表框ddlb1Changed事件,一旦ddlb1的值發生變化,系統將重新檢索ddlb2的數據源,並按照ddlb1的值進行過濾,刪除不符合條件的值,只保留符合條件的值。下面用到的代碼源於國外ICT專家Frederik博客中的文章《HOW TO use Cascading Dropdown List Boxes within an InfoPath Web Form(參考資料[2])

下面詳細說明操作步驟。

 

 

InfoPath表單設計界面右鍵點擊ddlb1,在出現的菜單中選擇編程/Changed事件,進入VSTA編程環境。在ddlb1_Changed事件中插入下面代碼。

 

FormCode類中插入下面自定義函數的代碼。

 

添加代碼後的VSTA編程界面如下圖。
 

下面對代碼中自定義函數作簡單說明。

參數

說明

dataConnectionName

數據連接名稱,該數據連接是下拉列表框ddlb2數據源的數據連接,在本例中值應爲“Cities”。

可以從菜單工具/數據連接打開數據連接對話框。

 

dataSourceName

數據源名稱,指下拉列表框ddlb2的輔助數據源,應該與對應數據連接同名。可以從菜單視圖/任務窗格打開數據源視圖。

 

ForeignKey

設置過濾條件的Field的名稱,這個Field的設置值應該與下拉列表框ddlb1的值對應。在本例中該參數值應爲“Province”。

CascadingDropDownDataSourceField

聯動的下級下拉列表框(bblb2)XPath值,打開數據源視圖,選擇主數據源,右鍵點擊ddlb2,在彈出的菜單上選擇複製XPath可獲得該參數值,在本例中應爲“/my:myFields/my:ddlb2

 

selectedMainValue

聯動的上級下拉列表框(ddlb1)的值,該函數會根據此值過濾ddlb2的選項。可通過ddlb1_Changed事件自帶參數e.NewValue獲得,該值即ddlb1變化後的新值。

repeatingNode

下拉列表框bblb2的數據源中作爲選項NodeXPath值,可以從ddlb2的屬性對話框中看到,也可以在數據源視圖中“複製XPath”得到。在本例中應爲“/dfs:myFields/dfs:dataFields/dfs:Cities”。

 

 

完成編寫代碼後,可以在VSTA環境中啓動調試,觀察運行結果。如果程序能在InfoPath客戶端中成功運行,下一步就可以向InfoPath Forms Services發佈這個表單了。

 

第四步,發佈InfoPath表單。

前面提到過,由於本表單模板的安全級別是“完全信任”,因而發佈過程不同於一般InfoPath表單,發佈這種表單的過程稍微複雜一些,下面是發佈過程。

1. 首先,啓動發佈表單模板嚮導,選擇“具有或不具有InfoPath Form ServicesSharePoint服務器”;
2. 進入下一步,輸入SharePoint網站地址;
3. 進入下一步,一定要確認鉤選“使用戶可以通過瀏覽器填寫此表單”。
4. 進入下一步,填寫發佈後模板存放的位置和文件名稱,本例我們填寫“d:/ddlb2pub.xsn”。
5. 進入下一步,再點擊下一步就可以發佈了
發佈嚮導完成後,記住發佈文件的位置,後面的操作會把這個文件上傳到SharePoint服務器上。

 

第五步,應用內容類型

下面還需要以管理員身份登錄SharePoint管理中心上傳表單模板,並添加表單庫的內容類型,操作如下。

1. 上載表單模板。在SharePoint管理中心的應用程序管理頁面,點擊InfoPath Forms Services下面的“上載表單模板”;進入上載表單模板頁面,輸入前面發佈的表單模板的位置和文件名“d:/ddlb2pub.xsn”。點擊上載按鈕,等待一會兒,會出現上載成功的頁面;點擊確定後,會進入管理表單模板頁面。這時會看到剛上載的表單模板ddlb2pub.xsn這一項,要注意這項的狀態。如果狀態爲“就緒”,說明完全安裝成功。如果狀態爲“正在安裝”,就要等一會兒在刷新頁面,直到狀態變爲“就緒”爲止。如果長時間處於“正在安裝”狀態,就要檢查“Windows SharePoint Services Timer”這個服務是否啓動,如果沒啓動則啓動它,或者手動執行命令“stsadm –o execadmsvcjobs”完成表單模板安裝。
2. 激活到網站集。表單模板就緒後,還需要激活表單模板。從表單模板ddlb2pub.xsn的下拉菜單選擇“激活到網站集”。在激活表單模板頁面中,網站集一項選擇要使用這個表單的網站集,點擊確定即可。
3. 添加內容類型。我們需要將這個內容類型應用到一個SharePoint列表或庫上(爲了簡便,本例我們還是選用上一篇文章中創建的表單庫ddlb,但需要將該庫設置爲“允許管理內容類型”)。在表單庫的設置頁面,在內容類型下面點擊“從現有網站內容類型添加;入添加內容類型頁面,從可用網站內容類型列表中選擇ddlb2pub,點擊“添加”按鈕,再點擊“確定”按鈕。

完成後該內容類型會列在表單庫的設置頁面的內容類型下面。如果不喜歡缺省名稱,可以點擊該內容類型,將名稱改爲“
VSTA表單”。

至此,內容類型添加完畢,下面可以測試了。在
ddlb表單庫頁面,點擊“新建”下拉菜單,選擇“VSTA表單”。


上面步驟詳細說明了
VSTA編程實現聯動下拉列表框的操作過程。這種方法的優點是對下拉列表框的數據源沒有限制,由於VSTA功能強大,還可以擴展更多的功能,靈活性是其它方法無可比擬的;但是,表單發佈比較複雜,而且要求有管理員權限。
本文和上一篇文章中講述的方法都不能在重複表中實現聯動的下拉列表框,下一篇將講述如何在重複表中實現聯動的下拉列表框。

源碼下載:ddlbEx2.rar

參考資料

[2].    HOW TO use Cascading Dropdown List Boxes within an InfoPath Web Form, Frederik Van Lierde,http://www.silversandsassociates.com/HOW_TO_use_Cascading_Dropdown_ListBoxes_within_an_InfoPath_Web_Form.pdf

 

本文出處:>>http://www.cnblogs.com/sean_zhang

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章