gdufo

           

          InfoPath 與 數(shù)據(jù)庫的通訊


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

          一、在
          vs中創(chuàng)建表單模板把數(shù)據(jù)存到數(shù)據(jù)庫中。

          新建infopath表單模板:

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


           

          開始設(shè)計(jì)表單:

          1.         點(diǎn)擊右邊“設(shè)計(jì)任務(wù)”中的控件,利用控件設(shè)計(jì)表單;

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

          3.         綁定重復(fù)表的數(shù)據(jù)源,選擇要顯示的字段。

          4.         提交按鈕創(chuàng)建規(guī)則,選擇“使用數(shù)據(jù)連接提交”,然后選擇“提交到宿主環(huán)境”。

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

          6.         保存模板。


          7. 創(chuàng)建信息初始化列表“WFMetaData”,標(biāo)題“申請(qǐng)單編號(hào)確認(rèn)規(guī)則”創(chuàng)建欄“PurcharIDFormat0”值是“P-,yyyyMMddHHmmA”。用這種規(guī)則創(chuàng)建計(jì)劃單編號(hào)。

          8. Insert -----àLoading 事件,先創(chuàng)建數(shù)據(jù)源,讀取初始化信息,代碼如下:

          public void FormEvents_Loading(object sender, LoadingEventArgs e)

                  {

                      try

                      {

                          //取到提交連接的對(duì)象,FileSubmitConnection對(duì)應(yīng)的是提交到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:計(jì)劃單編號(hào)", NamespaceManager);

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

                          SPSite mysite = new SPSite(osssubmit.FolderUrl);

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

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

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

                          {

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

                              {

                                  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 == "申請(qǐng)單編號(hào)確認(rèn)規(guī)則")

                                  {

                                      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) //申請(qǐng)單編號(hào)確認(rèn)規(guī)則

                              {

                                  fieldFillID.SetValue(idFormat);

                              }

                          }

                      }

                      catch

                      { }

          填寫好信息將信息數(shù)據(jù)系列化到數(shù)據(jù)庫中,創(chuàng)建了FormSave方法把重復(fù)表數(shù)據(jù)系列化道數(shù)據(jù)庫中和PurcharToDB方法把申請(qǐng)單主數(shù)據(jù)系列化到數(shù)據(jù)庫中,代碼如下:

          ///<summary>

                  ///把重復(fù)表數(shù)據(jù)序列化至數(shù)據(jù)庫

                  ///</summary>

                  private void FormSave()

                  {

                      // 在此處編寫代碼。

                      string strResult = "";

                      int currentPid = -1;

                      try

                      {

                          //取到提交連接的對(duì)象,FileSubmitConnection對(duì)應(yīng)的是提交到SharePoint文檔庫的連接類

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

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

                          SPSite mysite = new SPSite(osssubmit.FolderUrl);

                          //讀取列表的記錄

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

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

                          //計(jì)劃單編號(hào)

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

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

                          {

                              //存儲(chǔ)數(shù)據(jù)到數(shù)據(jù)庫中

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

                              //遍歷重復(fù)表group5中的每一項(xiàng)

                              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))

                              {

                                  //對(duì)于重復(fù)表中的每一行,到數(shù)據(jù)庫去查找,如果找到就使用Update,找不到就使用New

                                  PurcharData purData = new PurcharData();

                                  purData.ID = -1;

                                  purData.PID = currentPid;

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

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

                                  purData.SBType = myf.SelectSingleNode("my:規(guī)格型號(hào)", NamespaceManager).Value;

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

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

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

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

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

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

                                  purData.Results = myf.SelectSingleNode("my:執(zhí)行情況記錄", 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)

                              //    {//如果老項(xiàng)已經(jīng)在新的編輯過程中刪除了,那么就執(zhí)行刪除Method

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

                              //    }

                              }

                          }//using 結(jié)束

                      }

                      catch{}

                  }

                  ///<summary>

                  ///將申請(qǐng)單主數(shù)據(jù)序列化到數(shù)據(jù)庫中

                  ///</summary>

                  ///<param name="userID">域帳號(hào)</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:計(jì)劃單編號(hào)", NamespaceManager);

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

                              XPathNavigator fieldGC = xpath.SelectSingleNode("/my:myFields/my:國(guó)產(chǎn)", NamespaceManager);

                              XPathNavigator fieldSBXC = xpath.SelectSingleNode("/my:myFields/my:設(shè)備現(xiàn)場(chǎng)采購", NamespaceManager);

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

                              XPathNavigator fieldWZXC = xpath.SelectSingleNode("/my:myFields/my:物資現(xiàn)場(chǎng)采購", NamespaceManager);

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

                              XPathNavigator fieldProjectName = xpath.SelectSingleNode("/my:myFields/my:項(xiàng)目名稱", 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:合計(jì)", 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. 提交按鈕事件中,調(diào)用FormSave()方法,保存到數(shù)據(jù)庫中。

          10.              到最后一步了,將它發(fā)布到InfoPath Form Services SharePoint 服務(wù)器

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

          應(yīng)用程序管理--àInfoPath Form Services---à配置 InfoPath Form Services----à上傳表單模板 ,激活到網(wǎng)站集中,

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

          內(nèi)容類型----〉從現(xiàn)有網(wǎng)站內(nèi)容類型添加------〉添加你上傳的表單模板

          二、在office中創(chuàng)建表單模板讀取數(shù)據(jù)庫中的值。

          1.         Office ---àMicrosoft office InfoPath 2007-----à設(shè)計(jì)表單模板---------à空白----------à確定

          2.         開始設(shè)計(jì)表單:

          點(diǎn)擊右邊“設(shè)計(jì)任務(wù)”中的控件,利用控件設(shè)計(jì)表單;

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

          綁定重復(fù)表的數(shù)據(jù)源,選擇要顯示的字段。

          提交按鈕創(chuàng)建規(guī)則,選擇“使用數(shù)據(jù)連接提交”,然后選擇“提交到宿主環(huán)境”。

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

          保存模板。

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

                      try

                      {

                          // 在此處編寫代碼。

                          //數(shù)據(jù)源關(guān)聯(lián)

                          AdoQueryConnection myAdoQueryConnection =

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

                          // 獲取查詢字段

                          XPathNavigator wfNum =

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

                             NamespaceManager);

                          //字段值

                          string wfNumID = wfNum.InnerXml;

                          //使用關(guān)鍵字段進(jìn)行數(shù)據(jù)庫查詢

                          string tmpConn = myAdoQueryConnection.Command;

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

                          myAdoQueryConnection.Execute();

                      }

                      catch { }

          設(shè)計(jì)好表單,如下:

           

          預(yù)覽表單。


           

          發(fā)布到網(wǎng)絡(luò)指定的位置。

          web.config
          在 appSettings節(jié)點(diǎn),connectionStrings節(jié)點(diǎn)加上下面這些內(nèi)容:

          <appSettings>        
                    <add key="MEPPurcharListName" value="物質(zhì)采購申請(qǐng)單" />  
             <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 閱讀(836) 評(píng)論(0)  編輯  收藏 所屬分類: OA(Moss+Infopath)

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 馆陶县| 长岛县| 土默特左旗| 曲沃县| 宝清县| 襄樊市| 琼结县| 吉木萨尔县| 南木林县| 蒲江县| 教育| 雅江县| 沭阳县| 云安县| 阳泉市| 新郑市| 临澧县| 镇坪县| 唐山市| 集安市| 三河市| 东乌珠穆沁旗| 英德市| 万盛区| 沅江市| 海盐县| 宁安市| 高尔夫| 万山特区| 株洲市| 哈巴河县| 根河市| 广宁县| 南通市| 科尔| 罗源县| 德令哈市| 溧水县| 岑溪市| 香格里拉县| 揭西县|