gdufo

           

          InfoPath 與 數據庫的通訊


          http://www.cnblogs.com/sumh/archive/2008/03/27/1123903.html

          一、在
          vs中創建表單模板把數據存到數據庫中。

          新建infopath表單模板:

          打開vs2008,新建Project,在Project Types 區中選擇 Visual C#àOffice-à2007--àInfoPathFormTemplate ,在Name中填入infopath表單模板的名稱,如PurcharForm;如下圖:


           

          開始設計表單:

          1.         點擊右邊“設計任務”中的控件,利用控件設計表單;

          2.         添加數據源,點擊右邊“設計任務”中的數據源,選擇“管理數據連接”,點擊添加按鈕,在新建數據源中,選擇“僅接收數據”點擊下一步,希望從何處接收數據,選擇“數據庫”,點擊下一步,點擊“選擇數據庫”點擊新建數據源,然后一直點擊下一步。

          3.         綁定重復表的數據源,選擇要顯示的字段。

          4.         提交按鈕創建規則,選擇“使用數據連接提交”,然后選擇“提交到宿主環境”。

          5.         表單設計好了,開始“檢查設計方案”設置兼容性選中“設計一個可在瀏覽器或InfoPath中可以打開的表單模板”,安全級別選擇“完全信任”。

          6.         保存模板。


          7. 創建信息初始化列表“WFMetaData”,標題“申請單編號確認規則”創建欄“PurcharIDFormat0”值是“P-,yyyyMMddHHmmA”。用這種規則創建計劃單編號。

          8. Insert -----àLoading 事件,先創建數據源,讀取初始化信息,代碼如下:

          public void FormEvents_Loading(object sender, LoadingEventArgs e)

                  {

                      try

                      {

                          //取到提交連接的對象,FileSubmitConnection對應的是提交到SharePoint文檔庫的連接類

                          FileSubmitConnection osssubmit = (FileSubmitConnection)this.DataConnections["OSSSubmit"];

                          XPathNavigator fieldFillAuthor = this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:制表人", NamespaceManager);

                          XPathNavigator fieldFillID = this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:計劃單編號", NamespaceManager);

                          //根據提交連接的FolderUrl屬性可以取到文檔庫所在的網站集 (有些情況下工作流網站并不在Root站點上,所以不適合此處)

                          SPSite mysite = new SPSite(osssubmit.FolderUrl);

                          string PurcharWebName = ConfigurationManager.AppSettings["PurcharWebName"];

                          //根據提交連接的FolderUrl屬性可以取到文檔庫所在的網站(直接得到當前網站)

                          using (SPWeb myweb = mysite.OpenWeb(PurcharWebName)) // 實際中需要更改為OpenWeb("/wf/")

                          {

                              if (fieldFillAuthor != null)//自動賦值填表人,格式為 "中文顯示名(域帳號)"

                              {

                                  fieldFillAuthor.SetValue(myweb.CurrentUser.Name + "(" + myweb.CurrentUser.LoginName + ")");

                              }

                              SPList idList = myweb.Lists["WFMetaData"];

                              string idFormat = "";

                              string idFormat2 = "";

                              foreach (SPListItem item in idList.Items)

                              {

                                  if (item.Title == "申請單編號確認規則")

                                  {

                                      idFormat = item["PurcharIDFormat0"].ToString().Split(new char[] { ',' })[0];

                                      idFormat2 = item["PurcharIDFormat0"].ToString().Split(new char[] { ',' })[1];

                                      idFormat = idFormat+ DateTime.Now.ToString(idFormat2);

                                      break;

                                  }

                              }

                              if (fieldFillID != null) //申請單編號確認規則

                              {

                                  fieldFillID.SetValue(idFormat);

                              }

                          }

                      }

                      catch

                      { }

          填寫好信息將信息數據系列化到數據庫中,創建了FormSave方法把重復表數據系列化道數據庫中和PurcharToDB方法把申請單主數據系列化到數據庫中,代碼如下:

          ///<summary>

                  ///把重復表數據序列化至數據庫

                  ///</summary>

                  private void FormSave()

                  {

                      // 在此處編寫代碼。

                      string strResult = "";

                      int currentPid = -1;

                      try

                      {

                          //取到提交連接的對象,FileSubmitConnection對應的是提交到SharePoint文檔庫的連接類

                          FileSubmitConnection osssubmit = (FileSubmitConnection)this.DataConnections["OSSSubmit"];

                          //根據提交連接的FolderUrl屬性可以取到文檔庫所在的網站集 (有些情況下工作流網站并不在Root站點上,所以不適合此處)

                          SPSite mysite = new SPSite(osssubmit.FolderUrl);

                          //讀取列表的記錄

                          string PurcharListName = ConfigurationManager.AppSettings["MEPPurcharListName"];

                          string PurcharWebName = ConfigurationManager.AppSettings["PurcharWebName"];

                          //計劃單編號

                          string PurcharID = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:計劃單編號", this.NamespaceManager).Value;

                          using (SPWeb myweb = mysite.OpenWeb(PurcharWebName)) // 實際中需要更改為OpenWeb("/wf/")

                          {

                              //存儲數據到數據庫中

                              currentPid = PurcharToDB(myweb.CurrentUser.LoginName, myweb.CurrentUser.Name);

                              //遍歷重復表group5中的每一項

                              XPathNavigator NodeIter = this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:group5", this.NamespaceManager);

                              //定義操作字串

                              string strBatch = "";

                              SPList list = myweb.Lists[PurcharListName];

                              foreach (XPathNavigator myf in NodeIter.SelectChildren(XPathNodeType.Element))

                              {

                                  //對于重復表中的每一行,到數據庫去查找,如果找到就使用Update,找不到就使用New

                                  PurcharData purData = new PurcharData();

                                  purData.ID = -1;

                                  purData.PID = currentPid;

                                  purData.Number = myf.SelectSingleNode("my:序號", NamespaceManager).ValueAsInt;

                                  purData.SBName = myf.SelectSingleNode("my:物資名稱", NamespaceManager).Value;

                                  purData.SBType = myf.SelectSingleNode("my:規格型號", NamespaceManager).Value;

                                  purData.Shuliang = (float)myf.SelectSingleNode("my:數量", NamespaceManager).ValueAsDouble;

                                  purData.Address = myf.SelectSingleNode("my:生產廠", NamespaceManager).Value;

                                  purData.GetTime = myf.SelectSingleNode("my:到貨時間", NamespaceManager).ValueAsDateTime;

                                  purData.UnitPrice = (float)myf.SelectSingleNode("my:預算單價", NamespaceManager).ValueAsDouble;

                                  purData.Totals = (float)myf.SelectSingleNode("my:預算總價", NamespaceManager).ValueAsDouble;

                                  purData.Notes = myf.SelectSingleNode("my:備注", NamespaceManager).Value;

                                  purData.Results = myf.SelectSingleNode("my:執行情況記錄", NamespaceManager).Value;

                                  purData.Created = DateTime.Now;

                                  purData.AuthorId = myweb.CurrentUser.LoginName;

                                  purData.AuthorName = myweb.CurrentUser.Name;

                                  purData.JHDID = PurcharID;

                                  wf_PurcharData wfPurData = new wf_PurcharData();

                                  if (wf_PurcharData.Exists(PurcharID, purData.Number,purData.SBName,purData.SBType))

                                  {

                                      //如果找到了就更新

                                      wfPurData.Update(purData);

                                  }

                                  else

                                  {

                                      //如果沒有找到就新增

                                      wfPurData.Add(purData);

                                  }

                              ////下面檢查,此次表單編輯,是否刪除了記錄

                       

                              //    if (!stillExist)

                              //    {//如果老項已經在新的編輯過程中刪除了,那么就執行刪除Method

                              //        strBatch += "<Method ID='" + MethodId.ToString() + "' Cmd='Delete'><Field Name='ID'>" + item.ID.ToString() + "</Field></Method>";

                              //    }

                              }

                          }//using 結束

                      }

                      catch{}

                  }

                  ///<summary>

                  ///將申請單主數據序列化到數據庫中

                  ///</summary>

                  ///<param name="userID">域帳號</param>

                  ///<param name="userName">顯示名</param>

                  ///<returns></returns>

                  private int PurcharToDB(string userID, string userName)

                  {

                      try

                      {

                          XPathNavigator xpath = this.MainDataSource.CreateNavigator();

                          if (xpath != null)

                          {

                              XPathNavigator fieldJHDID = xpath.SelectSingleNode("/my:myFields/my:計劃單編號", NamespaceManager);

                              XPathNavigator fieldZK = xpath.SelectSingleNode("/my:myFields/my:轉口", NamespaceManager);

                              XPathNavigator fieldGC = xpath.SelectSingleNode("/my:myFields/my:國產", NamespaceManager);

                              XPathNavigator fieldSBXC = xpath.SelectSingleNode("/my:myFields/my:設備現場采購", NamespaceManager);

                              XPathNavigator fieldWZGN = xpath.SelectSingleNode("/my:myFields/my:物資國內采購", NamespaceManager);

                              XPathNavigator fieldWZXC = xpath.SelectSingleNode("/my:myFields/my:物資現場采購", NamespaceManager);

                              XPathNavigator fieldCountry = xpath.SelectSingleNode("/my:myFields/my:項目所在國", NamespaceManager);

                              XPathNavigator fieldProjectName = xpath.SelectSingleNode("/my:myFields/my:項目名稱", NamespaceManager);

                              XPathNavigator fieldBeginTime = xpath.SelectSingleNode("/my:myFields/my:開工日期", NamespaceManager);

                              XPathNavigator fieldFillTime = xpath.SelectSingleNode("/my:myFields/my:填表日期", NamespaceManager);

                              XPathNavigator fieldNumPersonId = xpath.SelectSingleNode("/my:myFields/my:contact/my:Person/my:AccountId", NamespaceManager);

                              XPathNavigator fieldNumPersonName = xpath.SelectSingleNode("/my:myFields/my:contact/my:Person/my:DisplayName", NamespaceManager);

                              XPathNavigator fieldFirstPersonId = xpath.SelectSingleNode("/my:myFields/my:contacter/my:Person/my:AccountId", NamespaceManager);

                              XPathNavigator fieldFirstPersonName = xpath.SelectSingleNode("/my:myFields/my:contacter/my:Person/my:DisplayName", NamespaceManager);

                              XPathNavigator fieldInitComment = xpath.SelectSingleNode("/my:myFields/my:comment", NamespaceManager);

                              XPathNavigator fieldTotalsMoney = xpath.SelectSingleNode("/my:myFields/my:合計", NamespaceManager);

                              Purchar purchar = new Purchar();

                              purchar.PID = -1;

                              purchar.JHDID = fieldJHDID.Value;

                              purchar.ZK = fieldZK.ValueAsBoolean;

                              purchar.GC = fieldGC.ValueAsBoolean;

                              purchar.SBXC = fieldSBXC.ValueAsBoolean;

                              purchar.WZGN = fieldWZGN.ValueAsBoolean;

                              purchar.WZXC = fieldWZXC.ValueAsBoolean;

                              purchar.Country = fieldCountry.Value;

                              purchar.ProjectName = fieldProjectName.Value;

                              purchar.BeginTime = fieldBeginTime.ValueAsDateTime;

                              purchar.FillTime = fieldFillTime.ValueAsDateTime;

                              purchar.FillPersonId = userID;

                              purchar.FillPersonName = userName;

                              purchar.NumPersonId = fieldNumPersonId.Value;

                              purchar.NumPersonName = fieldNumPersonName.Value;

                              purchar.FirstPersonId = fieldFirstPersonId.Value;

                              purchar.FirstPersonName = fieldFirstPersonName.Value;

                              purchar.InitComment = fieldInitComment.Value;

                              purchar.TotalsMoney = (float)fieldTotalsMoney.ValueAsDouble;//Double 類型

                              wf_Purchar wfPurchar = new wf_Purchar();

                              return wfPurchar.Add(purchar);

                          }

                          else

                          {

                              return -1;

                          }

                      }

                      catch (Exception)

                      {

                          return -1;

                      }

                  }

          9. 提交按鈕事件中,調用FormSave()方法,保存到數據庫中。

          10.              到最后一步了,將它發布到InfoPath Form Services SharePoint 服務器

          11.上傳到管理中心,應用程序管理--àInfoPath Form Services---à配置 InfoPath Form  Services----à選中嵌入式SQL身份驗證和數據源的身份驗證(用戶表單模板),

          應用程序管理--àInfoPath Form Services---à配置 InfoPath Form Services----à上傳表單模板 ,激活到網站集中,

          12.新建表單庫---〉設置表單庫-----〉高級設置---內容類型設置為允許管理內容類型----〉啟用了瀏覽器的文檔設置為顯示為頁面。

          內容類型----〉從現有網站內容類型添加------〉添加你上傳的表單模板

          二、在office中創建表單模板讀取數據庫中的值。

          1.         Office ---àMicrosoft office InfoPath 2007-----à設計表單模板---------à空白----------à確定

          2.         開始設計表單:

          點擊右邊“設計任務”中的控件,利用控件設計表單;

          添加數據源,點擊右邊“設計任務”中的數據源,選擇“管理數據連接”,點擊添加按鈕,在新建數據源中,選擇“僅接收數據”點擊下一步,希望從何處接收數據,選擇“數據庫”,點擊下一步,點擊“選擇數據庫”點擊新建數據源,然后一直點擊下一步。

          綁定重復表的數據源,選擇要顯示的字段。

          提交按鈕創建規則,選擇“使用數據連接提交”,然后選擇“提交到宿主環境”。

          表單設計好了,開始“檢查設計方案”設置兼容性選中“設計一個可在瀏覽器或InfoPath中可以打開的表單模板”,安全級別選擇“完全信任”。

          保存模板。

          工具------à編程-----àLoading事件,添加代碼如下:

                      try

                      {

                          // 在此處編寫代碼。

                          //數據源關聯

                          AdoQueryConnection myAdoQueryConnection =

                             (AdoQueryConnection)(this.DataConnections["wf_PurcharData"]);

                          // 獲取查詢字段

                          XPathNavigator wfNum =

                             CreateNavigator().SelectSingleNode("/my:myFields/my:wfNum",

                             NamespaceManager);

                          //字段值

                          string wfNumID = wfNum.InnerXml;

                          //使用關鍵字段進行數據庫查詢

                          string tmpConn = myAdoQueryConnection.Command;

                          myAdoQueryConnection.Command = tmpConn + " " + "where ""JHDID"" = '" + wfNumID + "'";

                          myAdoQueryConnection.Execute();

                      }

                      catch { }

          設計好表單,如下:

           

          預覽表單。


           

          發布到網絡指定的位置。

          web.config
          在 appSettings節點,connectionStrings節點加上下面這些內容:

          <appSettings>        
                    <add key="MEPPurcharListName" value="物質采購申請單" />  
             <add key="PurcharWebName" value="/wf" />
             <add key="gsegc_ConnectionString" value="Password=sa;User ID=sa;Data

          Source=litware;Initial Catalog=AD;"/>
             <add key="PowerUser" value="administrator" />
             <add key="PowerPwd" value="sa" />
             <add key="PowerDomain" value="litware" />

            </appSettings>

          <connectionStrings>   
            <add name="GSEGC_ConnectionString" connectionString="Password=sa;User

          ID=sa;Data Source=litware;Initial Catalog=AD;" providerName="System.Data.SqlClient"/>
            <add name="GSEGC_LogConnectionString" connectionString="Password=sa;User

          ID=sa;Data Source=litware;Initial Catalog=AD;" providerName="System.Data.SqlClient"/>
           </connectionStrings>

          posted on 2009-11-07 12:38 gdufo 閱讀(831) 評論(0)  編輯  收藏 所屬分類: OA(Moss+Infopath)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 本溪| 仁化县| 昆山市| 项城市| 凤山市| 余干县| 湖南省| 荣成市| 诸暨市| 石首市| 永城市| 泰来县| 铁岭县| 定襄县| 北京市| 剑川县| 大新县| 固阳县| 静宁县| 宣汉县| 扬中市| 久治县| 颍上县| 丰顺县| 巴楚县| 额济纳旗| 垫江县| 太白县| 平陆县| 乐陵市| 紫金县| 蓝田县| 台湾省| 乳源| 黔东| 尼勒克县| 谢通门县| 靖边县| 洛川县| 全州县| 奉新县|