[譯]在啟用瀏覽器功能的INFOPATH表單中實現基於SQL SERVER的多級聯動的下拉式列表

來源:互聯網
上載者:User

翻譯:實現多級聯動的下拉式列表

原文:http://blogs.msdn.com/infopath/archive/2006/10/12/cascading-dropdowns-in-browser-forms.aspx

 

如果你使用Office InfoPath用戶端軟體去建立解決方案,很方便地去使用“篩選”功能,去篩選下拉式清單方塊的值,但是“篩選”功能在基於瀏覽器的模板中是用不起來的,那麼我們怎麼去完成同樣的功能呢?

通過建立帶參數的Web Service的方法我們就可以完成這個不可能的任務,你可以把這些基於Web Service的方法以“資料連線”的形式加入模板,當一個下拉式清單方塊值發生變化時來執行這些查詢。當這個查詢設定好後,簡單地執行這個“資料連線”的查詢就可以獲得相關的資料。 這個例子,需要去串連到SQL SERVER的Northwind樣本資料庫和Visual Studio。 首先,讓我們去建立這個Web Service,其中包括2個方法。  Step 1:開啟網站 
  1. 開啟 VS
  2. 從 “檔案”(File) 菜單中, 選擇 “開啟”(Open) 然後再選擇 “網站”(Web Site)
  3. 選擇“檔案系統” (File System) 然後瀏覽到 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS
  注意: 本樣本選擇了 LAYOUTS 檔案夾, 這意味著這個 web service 對所有的網站都是可見的. 如果你想你的Web Service對某個特定的網站可見,你可以開啟這個目錄 C:\Inetpub\wwwroot\wss\VirtualDirectories\80 
  1. 點擊開啟(Open)
  2. 在解決方案瀏覽器中(Solution Explorer), 右擊這個網站選擇建立一個新的檔案夾。
  
  1. 重新命名這個檔案夾叫 WebServices
  2. 考慮到今後可能還會有其它Web Service放在這個檔案夾中,為了方便管理我們再建立一個子檔案夾:
    1. WebServices 右擊 選擇新檔案夾(New Folder)
    2. 重新命名這個檔案夾為 NorthwindTables
    Step 2: 建立Web Service 
  1. 右擊 NorthwindTables 選擇建立項目( Add New Item)
  2. 在模板對話方塊中選擇WEB服務(Web Service)
  3. 在命名框中把這個項目命名為: NorthwindTable.asmx
  
  1. 取消“將代碼放在單獨的檔案中”,點擊確定。
    Step 3: 添加WEB方法  注意: 在這個樣本中, 假設 SQL Server 資料庫是與Microsoft Office SharePoint Server安裝在同一台機器中的。 
  1. 給代碼添加“using” 如下: 

using System.Data;using System.Data.SqlClient; 
  1. 添加Web 方法如下,從Northwind 庫的 Customers 表中讀取CustomerID的值:
 [WebMethod]public DataSet GetCustomers() {            // 建立到Northwind 資料庫的串連            SqlConnection cn = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");             // 建立一個data adapter 對象來執行SQL             // statement to retrieve the customer ID values            SqlDataAdapter da = new SqlDataAdapter("SELECT Customers.CustomerID FROM Customers Order By CustomerID", cn);             // 建立DataSet來儲存            DataSet ds = new DataSet();             // 開啟串連            cn.Open();             // 填充資料            da.Fill(ds, "Customers");             // 關閉相關串連            cn.Close();            cn = null;            da = null;                        return ds;            } 
  1. 如下添加web方法,從傳入的已選擇的客戶(Customer)中去讀取相關訂單資訊:
[WebMethod]public DataSet GetOrdersForSelectedCustomer(string strCustID) {            // 建立到庫的串連            SqlConnection cn = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");             //建立一個字串變數,以便儲存修改後的SQL語句            string strOrdersSQL = "";             //建立一個預設的SQL字串            string strOrdersOrigSQL = "SELECT * FROM Orders";             // 一些客戶ID的值包含單引號' 我們需要            // 把它替換成2個單引號,以便             // 系統可以正確地識別            strCustID = strCustID.Replace("'", "''");             // 把預設的SQL語句換成帶查詢參數的。            // 並且需要排序            strOrdersSQL = strOrdersOrigSQL + " Where CustomerID Like '%" + strCustID + "%' Order By OrderID";             // 建立一個Adapter對像去擷取OrderID的值。                        SqlDataAdapter daOrders = new SqlDataAdapter(strOrdersSQL, cn);             // 建立DataSet儲存資料            DataSet Ds = new DataSet();             // 開啟串連            cn.Open();             // 填充資料            daOrders.Fill(Ds, "Orders");             // 清理記憶體            cn.Close();            cn = null;            daOrders = null;                              return Ds;} 
  1. 產生(Build)並儲存項目。
    Step 4: 測試這個Web Service  注意:  這個網站的應用程式集區的標識帳戶,必須對SQL SERVER這個資料庫具有存取權限才可以。 
  1. 開啟瀏覽器並訪問http://%3cserver%3e/_layouts/WebServices/NorthwindTables/NorthwindTables.asmx (把 <server> 替換成你伺服器名稱)
  2. 你可以看到剛才我們建立的2個方法,和系統預設的 HelloWorld :
  
  1. 單擊 GetCustomers 然後點擊Invoke – 它會返回一組客戶ID的值。
  2. 單擊 GetOrdersForSelectedCustomer ,strCustID 文字框中輸入: BERGS 然後點擊查詢 – 它會返回 BERGS的所有訂單號。
    Step 5: 建立INFOPATH表單 
  1. 設計一個新的、空的、瀏覽器安全色的INFOPATH表單。
  2. 添加一個下拉式清單方塊並且命名為: SelectCustomer
  3. 添加另一個下拉式清單方塊並且命名為: SelectOrder
   
  1. 如下添加2個 “僅接受資料”類型的資料連線,並且串連到NorthwindTables 的 Web Service中去。

    1. GetCustomers:

      • 開啟選項“在表單開啟時自動檢索資料” (“Automatically retrieve data when the form is opened”)
    2. GetOrdersForSelectedCustomer:
      • 當需要使用樣本值時,填入 ALFKI 作為 strCustID 參數
      • 取消選項“在表單開啟時自動檢索資料” (“Automatically retrieve data when the form is opened”)
  2. 設定SelectCustomer這個下拉框的屬性,其列表框項從外部資料源 GetCustomers 尋找值,欄位CustomerID 同時為其值和顯示名稱。
  3. 設定 SelectOrder  這個下拉框屬性,其列表框項從 GetOrdersForSelectedCustomer資料來源尋找值,同時使用 OrderID 欄位作為其值和顯示名稱。
  4. 在SelectCustomer這個下拉框上建立一個規則(Rule) 應用如下的操作:
    1. 設定域值:設定SelectOrder 域值為空白
    2. 設定域值:設定資料來源GetOrdersForSelectedCustomer 中的參數域(strCustID) 為主要資料源SelectCustomer 域的值。
    3. 使用資料連線進行查詢GetOrdersForSelectedCustomer
  
  1. 儲存這個模板到本地,檔案名稱為FilteredDrop-downs_IPFS.XSN
   Step 6: 發布這個模板 
  1. 發布這個模板到運行 InfoPath Form Services的伺服器
  2. 使用瀏覽器在點擊檔案庫中的建立
  3. SelectCustomer 控制項中選擇BERGS
  4. 點擊 SelectOrder – 只有 BERGS 的訂單被顯示出來
  5. 選擇不同的客戶ID注意訂單下拉框是否改變。 
 由Dosboy傾情翻譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.