2011-05-17 18 views
2

有誰知道是否有一種方法使用標準AllUsersWebPart元素和CDATA部分爲屬性部署BrowserFormWebPart(用於列表內容類型的自定義InfoPath表單)?到目前爲止,我嘗試過沒有成功。任何幫助表示讚賞。聲明性地部署BrowserFormWebPart而不使用BinarySerializedWebPart元素

+0

你有沒有找到一個解決辦法? – 2012-06-13 07:16:04

+0

@SteveB看到我下面的評論。我從來沒有找到這個解決方案... – 2012-06-14 11:29:26

回答

2

後的研究2天 - 下面的代碼工作

private void UpdateInfoPathForms(SPSite oSite) 
    { 
     UpdateInfoPath(oSite, "Lists/Audit Calendar/Item/newifs.aspx"); 
     UpdateInfoPath(oSite, "Lists/Audit Calendar/Item/displayifs.aspx"); 
     UpdateInfoPath(oSite, "Lists/Audit Calendar/Item/editifs.aspx"); 
    } 

    private void UpdateInfoPath(SPSite oSite, string formFileLocation) 
    { 
     var file = oSite.RootWeb.GetFile(formFileLocation); 

     using (SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared)) 
     { 
      try 
      { 
       var wp1 = new Microsoft.Office.InfoPath.Server.Controls.WebUI.BrowserFormWebPart(); 

       wp1.SubmitBehavior = Microsoft.Office.InfoPath.Server.Controls.WebUI.SubmitBehavior.FormDefault; 
       wp1.FormLocation = "~list/Item/template.xsn"; 
       wp1.ContentTypeId = oSite.RootWeb.Lists["Audit Calendar"].ContentTypes["Item"].Id.ToString(); 

       IListWebPart listWebpart = wp1 as IListWebPart; 

       listWebpart.ListId = oSite.RootWeb.Lists["Audit Calendar"].ID; 

       if (formFileLocation.Contains("newifs.aspx")) 
       { 
        listWebpart.PageType = PAGETYPE.PAGE_NEWFORM; 
       } 
       else if (formFileLocation.Contains("displayifs.aspx")) 
       { 
        wp1.ListFormMode = Microsoft.Office.InfoPath.Server.Controls.WebUI.ListFormMode.ReadOnly; 
        listWebpart.PageType = PAGETYPE.PAGE_DISPLAYFORM; 

       } 
       else if (formFileLocation.Contains("editifs.aspx")) 
       { 
        listWebpart.PageType = PAGETYPE.PAGE_EDITFORM; 
       } 
       listWebpart.ViewFlags = SPViewFlags.None; 

       manager.AddWebPart(wp1, "Main", 0); 
       manager.SaveChanges(wp1); 
      } 
      finally 
      { 
       manager.Web.Dispose(); 
      } 
     } 
0

我有同樣的問題。這裏是我的嘗試:

<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2"> 
    <![CDATA[ 
    <webParts> 
     <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> 
      <metaData> 
       <type name="Microsoft.Office.InfoPath.Server.Controls.WebUI.BrowserFormWebPart, Microsoft.Office.InfoPath.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> 
       <importErrorMessage>Cannot import this Web Part.</importErrorMessage> 
      </metaData> 
      <data> 
       <properties> 
        <property name="ChromeType" type="chrometype">None</property> 
        <property name="HelpMode" type="helpmode">Modeless</property> 
        <property name="ChromeState" type="chromestate">Normal</property> 
       </properties> 
      </data> 
     </webPart> 
    </webParts>]]> 
</AllUsersWebPart> 

然後我有一個配置Web部件功能接收器:

using (SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(PersonalizationScope.Shared)) 
{ 
    try 
    { 
     BrowserFormWebPart webpart = GetWebPart(manager); 
     webpart.SubmitBehavior = SubmitBehavior.FormDefault; 
     webpart.FormLocation = "~list/MyList/template.xsn"; 
     webpart.ContentTypeId = "0x01003C8AD6E14DAD5342BBFAA84E63F8022C"; 
     manager.SaveChanges(webpart); 
    } 
    finally 
    { 
     manager.Web.Dispose(); 
    } 
} 

的BrowserFormWebPart性能要求越來越形式來顯示,但由於某些原因,設置AllUsersWebPart部分中的這些屬性不起作用。表單顯示,我可以填寫它,但表單中的值不會插入到列表項的字段中。我向Feature Receiver添加了以下部分,嘗試將表格綁定到列表項的字段中:

IListWebPart listWebpart = webpart as IListWebPart; 
listWebpart.PageType = PAGETYPE.PAGE_EDITFORM; 
listWebpart.ViewFlags = SPViewFlags.None; 

不幸的是,沒有快樂。而且就我而言。希望你會有更好的運氣。

+0

Thansk Rich。這是我正在採取的方法。一旦我有更多信息或解決方案,我將更新帖子。 – 2011-05-26 18:58:55

+0

@Pete Skelly:你最終是否找到了解決方案? – JohnDoDo 2012-02-07 15:14:29

+0

@JohnDoDo不幸的是,客戶端最終放棄了發佈InfoPath Forms並且沒有按照配置部署它們。我進入了.NET Reflector的內核,並確定某些屬性(我無法專門回憶它們)未按預期序列化或反序列化,但耗盡時間。 – 2012-02-08 21:20:20