首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

在Infopath中實(shí)現數據有效性驗證的三種方法

2020-10-08 16:16:17
字體:
來(lái)源:轉載
供稿:網(wǎng)友
Infopath的使用避免了最終用戶(hù)以完全手寫(xiě)的方式生成XML數據文件,同時(shí)也可以統一XML文件的格式,在MOSS系統和網(wǎng)站開(kāi)發(fā)中被廣泛使用。

  使用Infopath開(kāi)發(fā)一個(gè)XML前端表單頁(yè)面需要有幾個(gè)特定的步驟,如編寫(xiě)XML示例文件,生成XML Schema文件,在Infopath中導入主數據源,設計Infopath表單呈現,如果需要還可以給表單添加C#事件代碼,如表單打開(kāi)、保存時(shí)所要執行的動(dòng)作,附加按鈕的執行動(dòng)作等。讀者如果對Infopath的開(kāi)發(fā)有興趣可以單獨去研究,本文主要介紹在Infopath中如何實(shí)現數據的有效性驗證。

  在Infopath中,有三種方法可以實(shí)現數據的有效性驗證:

  1. 使用Infopath的內置數據類(lèi)型。

  2. 給輸入項添加自定義數據驗證條件或驗證事件。

  3. 通過(guò)給表單自定義按鈕添加規則或驗證事件來(lái)進(jìn)行數據有效性驗證。

 

使用Infopath內置數據類(lèi)型進(jìn)行數據的自動(dòng)驗證

  這是最簡(jiǎn)單的數據驗證方法。在Infopath中添加控件,或給主數據源中的域指定控件的時(shí)候,可以為控件的輸入指定數據類(lèi)型。如果沒(méi)有為Infopath指定單獨的主數據源,那么Infopath將按照你在表單中添加的控件來(lái)構建數據源結構;如果在表單編輯之前已經(jīng)指定了主數據源,則控件所接受的數據類(lèi)型依賴(lài)于它所綁定的數據源中域的數據類(lèi)型,數據源中域的數據類(lèi)型可在編寫(xiě)XML Schema文件時(shí)單獨指定,如果沒(méi)有指定,默認為String類(lèi)型,表示可接受任何類(lèi)型的數據。

在Infopath中右鍵單擊要設置數據有效性驗證的控件,點(diǎn)擊“屬性”,或者直接雙擊該控件,在彈出的對話(huà)框中設置控件的數據類(lèi)型,如下圖: 2010-5-30 12-06-16   Infopath支持下列數據類(lèi)型:

文本(string)整數(integer)小數(double)布爾(True/False)超鏈接(anyURI)日期(date)時(shí)間(time)日期和時(shí)間(datetime)

  在屬性對話(huà)框中,我們還可以設置數據的默認值,以及數據格式等。當設置了控件的數據類(lèi)型后,最終用戶(hù)在填寫(xiě)表單時(shí)如果類(lèi)型不匹配則Infopath會(huì )給出相應的提示信息,如: 2010-5-30 12-16-42

使用自定義數據驗證條件或驗證事件進(jìn)行數據有效性驗證

   你可以在Infopath中設置自定義數據驗證條件或編寫(xiě)自定義事件進(jìn)行數據的有效性驗證,這需要一些額外的編程開(kāi)銷(xiāo)或計算機編程方面的知識。

  1. 使用自定義數據驗證條件

  右鍵單擊要設置數據有效性驗證的控件,點(diǎn)擊“屬性”,或者直接雙擊該控件,在彈出的對話(huà)框中點(diǎn)擊“數據驗證”按鈕,在彈出的對話(huà)框中點(diǎn)擊“添加”,在數據驗證對話(huà)框中設置數據驗證條件,并填寫(xiě)當數據驗證失敗時(shí)屏幕的提示信息以及警告對話(huà)框要顯示的消息內容。

Infopath已經(jīng)集成了很多數據驗證條件方便用戶(hù)直接選擇,如域中的值大于、小于、等于、包含、不包含等等,如果你想定義自己的匹配模式,可以選擇“匹配模式”或“不匹配模式”,然后在第三個(gè)下拉列表中選擇“選擇模式”,在彈出的對話(huà)框中編寫(xiě)自定義模式正則表達式。例如你想規定該域只能接受包含小數點(diǎn)的數字,你可以編寫(xiě)如下正則:

復制代碼 代碼如下:

-?[0-9]*/.?[0-9]+

然后設置警告信息: 2010-5-30 12-44-04

  2. 使用自定義驗證事件

  使用自定義驗證事件需要編寫(xiě)C#代碼進(jìn)行數據的有效性驗證,因為Infopath內置了VSTA編程接口,使得我們可以非常方便地通過(guò)Visual Studio為Infopath編寫(xiě)C#代碼以完成一些特定的功能。在這里要注意一下,編寫(xiě)本文時(shí)我本機的開(kāi)發(fā)環(huán)境是Visual Studio 2008 + Office 2007,在安裝Office 2007時(shí)必須手動(dòng)將Infopath項下的VSTA選項勾上,否則Infopath默認是不支持VSTA編程接口的。Infopath中的VSTA默認使用的Visual Studio 2005的開(kāi)發(fā)環(huán)境,讀者不需要特定去安裝Visual Studio 2005,默認情況下VSTA會(huì )將所需的程序及環(huán)境配置好。 2010-5-30 12-57-53

  右鍵單擊要設置數據有效性驗證的控件,選擇“編程”-“Validating事件”,此時(shí)Infopath會(huì )聯(lián)系Visual Studio打開(kāi)VSTA工程,在VSTA工程中,我們可以為事件添加自定義方法。有一個(gè)地方需要說(shuō)明,默認情況下Infopath會(huì )以VB.NET語(yǔ)言創(chuàng )建VSTA工程,如果你想更改工程語(yǔ)言,可以點(diǎn)擊“工具”-“選項”,在“設計”選項卡中將語(yǔ)言選為C#,同時(shí)你還可以設置工程的默認保存位置。如果之前你已經(jīng)創(chuàng )建了VB.NET語(yǔ)言的VSTA工程,可以通過(guò)“工具”-“表單選項”,在“編程”選項卡中刪除代碼,然后重新創(chuàng )建新的VSTA工程,在此處也可以選擇本Infopath表單的VSTA工程的存放位置。 2010-5-30 12-52-16

2010-5-30 13-11-02   我們在VSTA中添加如下代碼,以實(shí)現我們在上例中限制只接受數字類(lèi)型的數據驗證效果。 

復制代碼 代碼如下:

public void field1_Validating(object sender, XmlValidatingEventArgs e)
{
if (!e.UndoRedo && e.Operation == XmlOperation.ValueChange)
{
// 獲取數據源中域的值
XPathNavigator root = MainDataSource.CreateNavigator();
string field1 = root.SelectSingleNode("http://my:field1", NamespaceManager).Value;

// 檢查用戶(hù)輸入項是否匹配正則表達式
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(@"-?[0-9]*/.?[0-9]+");

if (!regEx.IsMatch(field1))
{
e.ReportError(e.Site, true, "僅允許數字");
}
}
}


  保存代碼并關(guān)閉Visual Studio,保存或發(fā)布編寫(xiě)好的Infopath表單,然后直接打開(kāi)表單實(shí)例,在所要驗證的域中輸入內容,當驗證失敗時(shí)Infopath會(huì )按照驗證事件代碼中的要求彈出相應的提示。 2010-5-30 13-57-17

在按鈕上使用規則或驗證事件進(jìn)行數據有效性驗證

  在Infopath中,除了上面介紹的兩種方法可以實(shí)現數據的有效性驗證外,我們還可以通過(guò)給表單上的按鈕設置規則及驗證事件來(lái)驗證域的數據有效性。

  1. 使用規則進(jìn)行數據有效性驗證

  例如表單中有一個(gè)文本框,一個(gè)表達式框和一個(gè)按鈕,我們想驗證用戶(hù)在文本框中輸入的值是否為一個(gè)數字,并且將信息顯示在表達式框中。按照下面的步驟給按鈕添加規則:

右鍵單擊按鈕點(diǎn)擊“屬性”,或者直接雙擊按鈕,在彈出的對話(huà)框中點(diǎn)擊“規則”按鈕。在“規則”對話(huà)框中點(diǎn)擊“添加”。在“規則”對話(huà)框中點(diǎn)擊“添加操作”。在“操作”對話(huà)框中,從“操作”下拉列表中選擇“設置域值”。點(diǎn)擊“域”后面的按鈕,在彈出的對話(huà)框中選擇表達式框所綁定的域,點(diǎn)擊“確定”關(guān)閉對話(huà)框。保持“操作”對話(huà)框中“值”文本框為空,點(diǎn)擊“確定”關(guān)閉,然后關(guān)閉“規則”對話(huà)框。此時(shí)在“規則”對話(huà)框中已經(jīng)添加了一條新的規則,其作用是當按鈕點(diǎn)擊時(shí)清空表達式框中的值。按照前面的步驟再添加一條規則,同樣綁定到表達式框上,并將值設置成“僅允許數字”。給規則2設置條件,在“條件”對話(huà)框中,選擇要進(jìn)行驗證的域(此處應該是文本框所對應的域),然后選擇“不匹配模式”,同時(shí)設置匹配的正則表達式為-?[0-9]*/.?[0-9]+確定并關(guān)閉所有的對話(huà)框

  當用戶(hù)打開(kāi)表單實(shí)例時(shí),在文本框中輸入非數字,然后點(diǎn)擊按鈕,此時(shí)表達式框中會(huì )出現相應提示;如果用戶(hù)輸入的內容符合驗證規則,則表達式框中的內容被清空。 

  2. 在按鈕上使用驗證事件進(jìn)行數據有效性驗證

  右鍵單擊按鈕點(diǎn)擊“屬性”,或者直接雙擊按鈕,在“屬性”對話(huà)框中點(diǎn)擊“編輯表單代碼”,在VSTA工程代碼中已經(jīng)新添加了一個(gè)按鈕事件,添加下面的代碼: 

復制代碼 代碼如下:

public void CTRL2_5_Clicked(object sender, ClickedEventArgs e)
{
// 獲取表單數據源根節點(diǎn)的引用
XPathNavigator root = MainDataSource.CreateNavigator();

// 清空表達式框中的內容
root.SelectSingleNode("my:field2", NamespaceManager).SetValue("");

// 檢查文本框中的值是否為數字,并且在表達式框中顯示提示信息
string field1 = root.SelectSingleNode("my:field1", NamespaceManager).Value;
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(@"-?[0-9]*/.?[0-9]+");

if (!regEx.IsMatch(field1))
{
root.SelectSingleNode("http://my:field2", NamespaceManager).SetValue("僅允許數字");
}
}


  注意:在Infopath中,所有的數據驗證僅會(huì )給出相應的提示信息,用戶(hù)可以強制保存表單并忽略數據有效性驗證的提示信息。另外,本文C#代碼中所使用的主數據源節點(diǎn)名稱(chēng)(如my:field1,my:field2等)因實(shí)際情況而異。

發(fā)表評論 共有條評論
用戶(hù)名: 密碼:
驗證碼: 匿名發(fā)表