Friday, March 19, 2010

пропажа ListFormWebPart

Как известно, при изменении стандартных форм Sharepoint крайне важно не трогать ListFormWebPart на страницах NewForm, EditForm и DispForm; если её удалить, появятся ошибки вроде "Неправильный URL страницы" при нажатии на "Создать".
Если это всё-таки случилось, не надо спешить следовать рекомендациям Микрософта, удалять лист и делать всё заново, можно решить проблему куда проще.
Поскольку испортился только, скажем, NewForm.aspx, а EditForm.aspx у нас на месте, открываем неиспорченный файл и копируем весь код ListFormWebPart оттуда, после чего вставляем его в какую-нибудь WebPartZone. Код этот выглядит примерно вот так:

<WebPartPages:ListFormWebPart runat="server" __MarkupType="xmlmarkup" WebPart="true" __WebPartId="{2F5FA27F-56B9-46FC-90E1-85E853CA4204}" >
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
 <Title>Переговорные</Title>
 <FrameType>Default</FrameType>
 <Description />
 <IsIncluded>true</IsIncluded>
 <PartOrder>1</PartOrder>
 <FrameState>Normal</FrameState>
 <Height />
 <Width />
 <AllowRemove>true</AllowRemove>
 <AllowZoneChange>true</AllowZoneChange>
 <AllowMinimize>true</AllowMinimize>
 <AllowConnect>true</AllowConnect>
 <AllowEdit>true</AllowEdit>
 <AllowHide>true</AllowHide>
 <IsVisible>false</IsVisible>
 <DetailLink />
 <HelpLink />
 <HelpMode>Modeless</HelpMode>
 <Dir>Default</Dir>
 <PartImageSmall />
 <MissingAssembly>Невозможно импортировать эту веб-часть.</MissingAssembly>
 <PartImageLarge />
 <IsIncludedFilter />
 <ExportControlledProperties>true</ExportControlledProperties>
 <ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
 <ID>g_2f5fa27f_56b9_46fc_90e1_85e853ca4204</ID>
 <ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{8CCD4B47-F922-4630-8F18-527F71928E4A}</ListName>
 <ListItemId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">0</ListItemId>
 <ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">Edit</ControlMode>
 <TemplateName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">ListForm</TemplateName>
 <FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">6</FormType>
 <ViewFlag xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">1048576</ViewFlag>
</WebPart>
</WebPartPages:ListFormWebPart>


А теперь - магия: меняем ControlMode на New и FormType на 8. Тогда эти строчки будут выглядеть вот так:

 <ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">New</ControlMode>
 <TemplateName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">ListForm</TemplateName>
 <FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">8</FormType>


* This source code was highlighted with Source Code Highlighter.


Сохраняем файл. Вуаля! Всё заработало. Надеюсь, это сэкономит кому-нибудь пару часов бития головой об стену. :)

PS Для DispForm.aspx ControlMode, соответственно, Display, а FormType - 4.