
W artykule
http://office.microsoft.com/pl-pl/sharepointdesigner/HA101191111045.aspx opisany jest sposób tworzenia niestandardowych formularzy dla list SharePoint. Wszystko ładnie, ale za pomocą takich formularzy nie można dodawać załączników. Jeśli w trakcie tworzenia formularza pozostawimy domyślnie zaznaczoną opcję
Pokaż standardowy pasek narzędzi, to mimo istnienia przycisku
Dołącz plik nie uda nam się pliku dołączyć :(
Aby ten problem rozwiązać należy w pierwszej kolejności ściągnąć i zainstalować poprawkę
http://support.microsoft.com/kb/953749/en-us. Jeśli macie środowisko MOSS to sugerowane jest dodatkowe zainstalowanie poprawki
http://www.microsoft.com/downloads/details.aspx?FamilyId=3811C371-0E83-47C8-976B-0B7F26A3B3C4&displaylang=en.
Service Pack 2 dla SharePoint zawiera już te poprawki, więc jeśli mamy go zainstalowanego to jesteśmy gotowi na modyfikacje formularza .aspx.
Po wykonaniu aktualizacji trzeba zmodyfikować kod XSL w plikach ASPX będących niestandardowymi formularzami. W tym celu musimy dokonać dwóch zmian.
1) Odnaleźć w kodzie strony następujący fragment kodu:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</xsl:template>
i
ZAMIENIĆ go na następujący kod:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<div>
<span id="part1">
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</span>
<SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
<SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
</div>
</xsl:template>
2) Odnaleźć linię definiującą szablon
<xsl:template name="dvt_1.rowedit">
a następnie odszukać ostatni tag
<xsl:if ...> wewnątrz definicji szablonu.
Przed tym ostatnim tagiem należy wstawić następujący kod:
<tr id="idAttachmentsRow">
<td nowrap="true" valign="top" width="20%">
<SharePoint:FieldLabel ControlMode="Edit" FieldName="Attachments" runat="server"/>
</td>
<td valign="top" width="80%">
<SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Edit" FieldName="Attachments" __designer:bind="
{ddwrt:DataBind('u','AttachmentsField','Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Attachments')}"/>
<script>
var elm = document.getElementById("idAttachmentsTable");
if (elm == null || elm.rows.length == 0)
document.getElementById("idAttachmentsRow").style.display='none';
</script> </td>
</tr>
UWAGA: Oba wstawione fragmenty kodu dotyczą formularza edycji. Jeśli chcemy wykorzystać ten kod w np. formularzu dodawania nowego elementu to należy zmienić wartość
ControlMode="Edit" na
ControlMode="New".