SharePoint:擴充DVWP – 第28部分:完善Remove模版

來源:互聯網
上載者:User
文章目錄
  • 步驟

上一次我們複製了預設的編輯模版,作為我們的romove模版的原始內容。因此,它最初的樣子和編輯模版類似。

Remove模版(看起來和Edit模版一樣)

現在,我們需要對其進行一些修改:

  1.我們會繼續延續前文中的做法,通過顏色編碼的主題樣式來區分不同的狀態,將remove標識為紅色。

  2.由於我們是刪除記錄,我們希望使用者更改的唯一的欄就是Effective Data ,該值將在刪除前記錄到審計列表中 。
   3. 有兩個原因,我們會刪除正式員工的記錄:辭職或辭退。所以,我們希望有兩個“儲存”按鈕,分別標記辭職和辭退 。
   4. (可選)如果生效日期是在未來,我們可能希望將其寫入審計列表,但隨後啟動一個工作流程,等到了生效日期後再執行刪除清單項目操作。

如果我們想在設計檢視中切換到新的remove模板 ,會發現它並不在下拉框中。


 沒有Remove模板這個選擇

所以,當我們正在編輯頁面時,我們需要通過交換dvt_1.rowedit和dvt_1.rowremove模板的名稱來欺騙一下SPD。 無需修改我們從預設範本拷貝的任何其他副本的內容。 從:

<xsl:template name="dvt_1.rowedit">    <xsl:param name="Pos" />    <tr>        . . .    </tr></xsl:template><xsl:template name="dvt_1.rowremove">    <xsl:param name="Pos" />    <tr>        . . .    </tr></xsl:template>

...改為...

  <xsl:template name="dvt_1.rowremove">    <xsl:param name="Pos" />  </xsl:template><xsl:template name="dvt_1.rowremove"><tr>      . . .  </tr></xsl:template><h3>  <xsl:template name="dvt_1.rowedit">    <xsl:param name="Pos" />  </xsl:template></h3><xsl:template name="dvt_1.rowedit"><tr>      . . .  </tr></xsl:template>
步驟

讓我們分析一下想要進行的修改,然後一步一步的實現。

   1. 繼續實現顏色編碼

      在程式碼窗格中,我們要把外框修改為紅色,這樣就可以為當前的工作狀態提供一條可視化的線索。 如果你是沿著之前的兩篇文章一路走下來的話,應該已經有相應的css類了,通過它可以實現紅色邊框:

.dl-l {border-left:medium red ridge;}.dl-r {border-right:medium red ridge;}.dl-t {border-top:medium red ridge;}.dl-b {border-bottom:medium red ridge;}

只在remove模板中,將每個ed-修改為dl-,然後我們回到設計窗格中,切換到編輯模板 (現在實際上顯示的是我們remove模板 ),看一下現在的介面效果:

看起來就像編輯模板 ,除了將藍色邊框換成了紅色
2.  只把生效日期欄位保留為可編輯

很簡單。滑鼠移至上方在“Worker”控制項上並修改“Format as:”為Label。在生效日期(Effective Date)之外的所有其他控制項上重複該操作。 改為Label後 ,外觀看起來像文本一樣,但仍允許我們從工作流程中訪問該控制項。

 在設計窗格中修改顯示內容

 [ 提醒:當我們在程式碼窗格修改任何內容後,再次點擊設計窗格,它將恢複到預設值模板,我們將不得不再次在資料檢視預覽中選擇編輯模板。 但是,如果我們是在設計窗格中修改Format As屬性 ,就不會有這種問題。]


只有Effective Date是可編輯的,所有的欄位都可以通過jQuey或工作流程引用
3. 使兩個不同的儲存按鈕

就像我們之前所做的一樣,我們會通過複製現有的儲存按鈕來建立一個按鈕,然後按照我們的要求進行修改。這時我們會發現,按鈕是由單獨的模板來渲染的,取決於我們當前所處的Mode。

<xsl:choose>    <xsl:when test="$Mode = 'edit'">        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="" align="center">                <a href="javascript: {code}">Save</a>            </td>        </tr>        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="" align="center">                <a href="javascript: {ddwrt:GenFireServerEvent('__cancel')}">Cancel</a>            </td>        </tr>    </xsl:when>    <xsl:when test="$Mode = 'insert'">        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="nowrap" align="center">                <a href="javascript: {ddwrt:GenFireServerEvent('__commit')}">Save</a>            </td>        </tr>        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="nowrap" align="center">                <a href="javascript: {ddwrt:GenFireServerEvent('__cancel')}">Cancel</a>            </td>        </tr>    </xsl:when>    <xsl:otherwise>        <tr>            <td class="ms-vb" width="1%" nowrap="">                <a href="javascript: {ddwrt:GenFireServerEvent(concat('__cancel;dvt_1_form_editkey={',$KeyValue,'}'))}">update</a>            </td>            <td class="ms-vb" width="1%" nowrap="" style="border-left:1px black solid; padding-left:3px">                <a href="javascript: {ddwrt:GenFireServerEvent(concat('__cancel;dvt_1_form_removekey={',$KeyValue,'}'))}">remove</a>            </td>        </tr>    </xsl:otherwise></xsl:choose>

現在,我們只需要複製一個按鈕,並重新命名。 我們將隨後設定其操作:

<xsl:choose>    <xsl:when test="$Mode = 'edit'">        . . .    </xsl:when>    <xsl:when test="$Mode = 'remove'">        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="" align="center">                <a href="javascript: {code}">Terminated</a>            </td>        </tr>        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="" align="center">                <a href="javascript: {code}">Resigned</a>            </td>        </tr>        <tr>            <td class="ms-buttonactivehover" width="1%" nowrap="" align="center">                <a href="javascript: {ddwrt:GenFireServerEvent('__cancel')}">Cancel</a>            </td>        </tr>    </xsl:when>    <xsl:when test="$Mode = 'insert'">        . . .    </xsl:when>    <xsl:otherwise>        . . .    </xsl:otherwise></xsl:choose>

哦,等等! 這意味著我們需要在某個地方設定一下Mode。

看一下上面的代碼,我們會看到Mode是dvt_1.automode模版的一個參數:

<xsl:template name="dvt_1.automode">    <xsl:param name="KeyField" />    <xsl:param name="KeyValue" />    <xsl:param name="Mode" />    <xsl:param name="Pos" />

所以,我們只需要在從dvt_1.rowremove模版中調用該模版時傳遞“remove”給Mode即可。 但請記住 ,我們目前將它命名成了dvt_1.rowedit。 所以請確保編輯是正確那一個:

<xsl:template name="dvt_1.rowedit">    <xsl:param name="Pos" />    <tr>        <td class="ms-vb dl-l dl-t">            <asp:Label runat="server" id="ff19{$Pos}" text="{@Title}" {code} /></td>        <td class="ms-vb dl-t">            <asp:Label runat="server" id="ff20{$Pos}" text="{@Positions}" {code} /></td>        <td class="ms-vb dl-t">            <asp:Label runat="server" id="ff22{$Pos}" text="{@WorkShift}" {code} /></td>        <td class="ms-vb dl-r dl-t">            <asp:Label runat="server" id="ff23{$Pos}" text="{@FTE}" {code} /></td>    </tr>    <tr>        <td class="ms-vb dl-b dl-l">            <strong>Site/Department: </strong><br />                 <asp:Label runat="server" id="ff18{$Pos}" text="{@LocDept}" {code} /></td>        <td class="ms-vb dl-b">            <strong>Group: </strong><br />                 <asp:Label runat="server" id="ff21{$Pos}" text="{@Group12}" {code} /></td>        <td class="ms-vb dl-b">            <strong>Effective Date: </strong><br />            <SharePoint:FormField runat="server" id="ff17{$Pos}" controlmode="Edit" fieldname="EffDate" itemid="{@ID}" {code} /></td>        <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">            <td class="ms-vb dl-b dl-r" width="1%" nowrap="">                <xsl:call-template name="dvt_1.automode">                    <xsl:with-param name="KeyField">ID</xsl:with-param>                    <xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" />                    <xsl:with-param name="Mode">remove</xsl:with-param>                    <xsl:with-param name="Pos" select="$Pos"/>                </xsl:call-template>            </td>        </xsl:if>    </tr></xsl:template>

      在倒數第7行裡,我們看到,可以傳遞“remove”給dvt_1.automode 的Mode參數

 

好了,這一篇文章真的很長了...讓我們先休息一下,下一次,我們將修改這兩個按鈕背後的操作。 但至少現在我們可以看到它的外觀了(記住:要查看remove模板,需要點擊update按鈕,因為我們已經換了名字):

 修改好外觀的remove模版及其按鈕(雖然還沒實現功能)

 

 下一次:現在,我們的備用編輯模板構建出來了,接下來我們將更新Terminated和Resigned按鈕的表單操作,關聯工作流程,從而繼續我們的擴充DVWP之旅 。

 

參考資料

SharePoint:Extending the DVWP-Part 28:Massage the Remove Template

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.