Sharepoint 2010 以声明方式部署BrowserFormWebPart,而不使用BinarySerializedWebPart元素

Sharepoint 2010 以声明方式部署BrowserFormWebPart,而不使用BinarySerializedWebPart元素,sharepoint-2010,infopath,Sharepoint 2010,Infopath,有人知道是否有办法使用标准的AllUsersWebPart元素和属性的CDATA部分部署BrowserFormWebPart(列表内容类型的自定义InfoPath表单)?到目前为止,我试过了,但没有成功。感谢您的帮助 我也有同样的问题。以下是我尝试过的: <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2"> <![CDATA[ <webParts> <webPart xm

有人知道是否有办法使用标准的AllUsersWebPart元素和属性的CDATA部分部署BrowserFormWebPart(列表内容类型的自定义InfoPath表单)?到目前为止,我试过了,但没有成功。感谢您的帮助

我也有同样的问题。以下是我尝试过的:

<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>
获取要显示的表单需要BrowserFormWebPart属性,但由于某些原因,在AllUsersWebPart部分中设置这些属性不起作用。表单显示,我可以填写它,但表单中的值不会插入列表项的字段中。我在Feature Receiver中添加了以下部分,以尝试将表单绑定到列表项的字段中:

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

不幸的是,没有快乐。这就是我所能做到的。希望你会有更好的运气。

经过两天的研究-以下代码有效

  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();
            }
        }

坦斯克富有。这就是我正在采取的方法。一旦我有了更多信息或解决方案,我将更新帖子。@Pete Skelly:Dis您最终找到了解决方案吗?@Johndoo不幸的是,没有,客户端最终放弃发布InfoPath表单,而没有按配置部署表单。我进入了.NET Reflector的内部,并确定某些属性(我无法具体回忆它们)没有按预期进行序列化/反序列化,但没有时间了。当您购买sharepoint时,“您不知道其黑暗面的力量”。您找到解决方案了吗?@SteveB请参阅下面我的评论。我从来没有找到解决这个问题的办法。。。
  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();
            }
        }