Развертывание BrowserFormWebPart декларативно без элемента BinarySerializedWebPart - PullRequest
2 голосов
/ 17 мая 2011

Кто-нибудь знает, есть ли способ развернуть BrowserFormWebPart (пользовательскую форму InfoPath для типа содержимого списка), используя стандартный элемент AllUsersWebPart и раздел CDATA для свойств? До сих пор я пытался без успеха. Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2013

После 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 голосов
/ 24 мая 2011

У меня была такая же проблема.Вот что я попробовал:

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

У меня есть Feature Receiver, который настраивает веб-часть:

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;

К сожалению, радости нет.И это насколько я получил.Надеюсь, вам повезет больше.

...