分類存檔: SharePoint 發展

當心重大更改到 ItemStyle.xsl

我使用 ItemStyle.xsl 自訂內容查詢 Web 組件和午飯時間有關的權利的外觀, 我做了更改為 xsl 破碎. 我沒有意識到它, 但這產生了深遠的影響整個網站集. 共進午餐,在我返回時走, 注意到在一堆的地方出現此消息:

無法顯示此 Web 組件. 若要解決該問題, 在一個 SharePoint 服務相容 Windows HTML 編輯器,如 Microsoft Office SharePoint 設計器中打開該 Web 頁. 如果問題仍然存在, 與 Web 服務器管理員聯繫.

我歸咎于用戶端 (不實現,然而這點我的錯) 但最終注意到那視覺工作室智慧感知警告我我有畸形 XSL. 更正了它和一切開始工作.

本名時要小心使用 ItemStyle.xsl (和全球的 XSL 檔中的任何) — 破壞它們會影響網站集合中的許多文物.

<結束 />

在網格中顯示內容查詢 Web 部件的結果 / 表

概述和目標

外框, 苔蘚’ 內容查詢 Web 組件 (CQWP) 其結果顯示在清單格式中, 類似于搜尋結果. 它也是可能以網格格式顯示結果 (e 小節. HTML 表的格式). 柵格格式是在某些情況下更好. 描述了如何實現這種效果在這篇文章.

業務應用場景

有在用戶端與企業級苔蘚推出. 我們已設計及其分類,例如,專案層次結構中的第一類公民,有他們自己的頂層網站. 專案經理保持單身人士清單專案的摘要資訊, 如標題, 預算, 預計的完工日期, 其餘的預算和其他摘要類型欄位. 由"單身" 我的意思是保證包含只有一個專案的自訂 SharePoint 清單. 簡單地, 它看起來像這樣:

圖像

技術方法是多描述的一樣 在這裡 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP 使用 XSL 轉換來發出為瀏覽器的 HTML 呈現.

我總是設想結果前潛入 XSL,因為 XSL 是一場噩夢. 這裡是我期望的結果:

圖像

像這樣的 HTML 生成的結果:

<html>
 <正文>
 <中心>
 < 邊框= 1>

<!-- 標籤 — —>
 <tr 背景色= 藍>
 <運輸署><字體 顏色= 白色><b>專案名稱</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>完成日期</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>預算</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>實際費用</b></字體></運輸署>
 <運輸署><字體 顏色= 白色><b>整體狀態</b></字體></運輸署>
 </tr>

<tr>
 <運輸署>重新連接電腦房.</運輸署>
 <運輸署 對齊= 正確>02/01/08</運輸署>
 <運輸署 對齊= 正確>22,500.00</運輸署>
 <運輸署 對齊= 正確>19,000.00</運輸署>
 <運輸署>在進展中</運輸署>
 </tr>

<tr>
 <運輸署>提供伺服器的 SQL 升級</運輸署>
 <運輸署 對齊= 正確>04/01/08</運輸署>
 <運輸署 對齊= 正確>7,500.00</運輸署>
 <運輸署 對齊= 正確>0.00</運輸署>
 <運輸署>計畫</運輸署>
 </tr>

</>
 </中心>
 </正文>
</html>

方法

按照這些步驟來創建網格:

  1. 確定網格的元件 (行/列).
  2. 定義並創建必要的網站列.
  3. 創建子網站,為專案和單身人士名單.
  4. 將 CQWP 添加到 web 頁並將其配置為搜索您的清單.
  5. 修改 CQWP 的 XML 來收集起來的額外的列.
  6. 修改 XSL 生成表.

我要去專注于數位六. 數位從一到四個是直向前和任何 CQWP 使用者已經做的東西. 五號已被證實的其他人包括詳盡螢幕截圖載貨的本文從 MSDN 在這裡 (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) 和希瑟 · 所羅門的博客 在這裡 (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

螺栓和螺母

開始和執行步驟一到五的 MSDN 文檔和希瑟 · 所羅門條步驟.

在這一點, 向頁面添加了您的 CQWP 和你有你 <CommonViewFields> 根據需要配置.

按照通常的步驟, 拿到這些中間結果:

1. 創建內容類型, 該內容類型和兩個網站範本的自訂清單. 這裡是內容類型:

圖像

這裡是網站結構:

圖像

2. 創建我的專案的子網站和單身人士專案摘要清單後添加 CQWP:

圖像

3. 添加我想要通過的所有其他資訊 <CommonViewFields>:

        <屬性 名稱="CommonViewFields" 類型="字串">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</屬性>

請注意,我不得不保持在一個線上或它的所有屬性欄位將不工作 (CQWP 會告訴我,該查詢返回任何專案).

4. 在這一點, 我們準備去超越 MSDN 文章翻到希瑟 · 所羅門的文章. 跟隨她的腳步開始近一步 #5 若要創建一個自訂 / 未託管的版本的 ItemStyle.xsl. 希瑟的聽從, 通過一步了 11 和得到這些中間結果:

4.1: 我的 XSL 範本的名稱,如下所示:

<xsl:範本名稱 ="網格" 匹配 ="行[@Style = 電網]" 模式 ="itemstyle">

她建議,我也略有修改 <xsl:為每個 …> 通過添加 <br /> 標記,以提供一個更清潔的清單:

    <xsl:為每個 請選擇="@*">
      P:<xsl:值的 請選擇="名稱()" /><br/>
    </xsl:為每個>

4.2: 我修改的 web 部件, 轉到外觀並選擇我"網格" 樣式:

圖像

應用更改並在這裡是結果:

圖像

從上面我們可以看到我們希望田野 (專案名稱, 費用, 狀態, 等) 可供我們使用時我們發出的 HTML. 不只如此, 但我們看到,我們必須引用那些列在 XSL 中的名稱. 舉個例子, 我們引用專案的狀態作為"Project_x005F_x0020_Name".

在這一點, 我們離開從希瑟的博客,從這些巨人的肩膀上, 添加我自己一點點.

ContentQueryMain.xsl

請注意: 當對 ContentQueryMain.xsl 以及 ItemStyle.xsl 的更改, 您需要檢查那些檔回之前您看到您的更改的效果.

為網格製作目的, 苔蘚使用兩個不同的 XSL 檔來生成的結果我們看到從 CQWP. 生成輸出的前一位, 我們修改了 ItemStyle.xsl. 苔蘚實際上使用另一個 XSL 檔, ContentQueryMain.xsl 到 ItemStyle.xsl 來生成其 HTML 結合. 正如其名稱所暗示, ContentQueryMain.xsl 是"主" 控制整體液流的翻譯的 XSL. 它遍歷所有找到的項並將它們傳遞到範本逐一在 ItemStyle.xsl. 我們將修改 ItemStyle.xsl 生成開放 <表> 之前發射的第一行的資料並關閉標記 <表> 標記後發出的最後一行. 要做到這一點, ContentQueryMain.xsl 被修改,以將兩個參數傳遞給我們"網格" ItemStyle.xsl 中的範本, "最後一行" 和"當前行". ItemStyle.xsl 使用這些有條件地發出必要的標記.

使用希瑟 · 所羅門的技術, 我們找到 ContentQueryMain.xsl. 它坐落在 ItemStyle.xsl 一樣的地方. 此螢幕擷取畫面應該説明:

圖像

我們需要進行以下更改:

  • 修改 xsl 範本, "CallItemTemplate" 這實際上調用我們在 ItemStyle.xsl 的網格範本. 我們將到網格範本傳遞兩個參數,以便它會有這些資料,它需要有條件地生成打開和關閉 <表> 標籤.
  • 另一位叫"CallItemTemplate 的 ContentQueryMain.xsl 的修改" 把它傳遞"LastRow" 因此,LastRow 可能會轉嫁到我們的網格範本的參數.

找到名為"OuterTemplate.CallItemTemplate 的範本" 由字串標識:

  <xsl:範本 名稱="OuterTemplate.CallItemTemplate">

替換整個範本,如下所示:

  <xsl:範本 名稱="OuterTemplate.CallItemTemplate">
    <xsl:param 名稱="CurPosition" />

    <!--
      添加"LastRow" 參數.
      我們只使用它時專案風格通行證中的"網格".
    -->
    <xsl:param 名稱="LastRow" />

    <xsl:選擇>
      <xsl:當 測試="@Style = 'NewsRollUpItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="編輯模式" 請選擇="$cbq_iseditmode" />
        </xsl:應用範本>
      </xsl:當>
      <xsl:當 測試="@Style = 'NewsBigItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
        </xsl:應用範本>
      </xsl:當>
      <xsl:當 測試="@Style = 'NewsCategoryItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
        </xsl:應用範本>
      </xsl:當>

      <!--
              將當前的位置和 lastrow 傳遞給網格 itemstyle.xsl 範本.
              ItemStyle.xsl 將會使用,發出打開和關閉 <表> 標籤.
      -->
      <xsl:當 測試="@Style = 電網">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
          <xsl:與參數 名稱="最後" 請選擇="$LastRow" />
        </xsl:應用範本>
      </xsl:當>

      <xsl:否則>
        <xsl:應用範本 請選擇="." 模式="itemstyle">
        </xsl:應用範本>
      </xsl:否則>
    </xsl:選擇>
  </xsl:範本>

評論描述所做的更改的目的.

答案是肯定的, "OuterTemplate.CallItemTemplate" 本身是從另一個範本調用嗎. 通過搜索此文本字串查找該範本:

<xsl:範本 名稱="OuterTemplate.Body">

滾動流覽 OuterTemplate.Body 中的說明並插入 LastRow 參數,如下所示 (顯示為斜體的注釋):

<xsl:調用範本 名稱="OuterTemplate.CallItemTemplate">
  <xsl:與參數 名稱="CurPosition" 請選擇="$CurPosition" />
  <!-- 插入 LastRow 參數. -->
  <xsl:與參數 名稱="LastRow" 請選擇="$LastRow"/>
</xsl:調用範本>

所有這一切之後, 我們終於有了正確設置,我們 ItemStyle.xsl 可以發出的東西 <表> 在正確的地點標記.

ItemStyle.Xsl

請注意: 再次, 在 ItemStyle.xsl 中進行任何更改,所以,你看到那些更改的效果後檢查.

在這裡,我們有兩個任務:

  • 替換整個網格範本. 你可以複製/粘貼從下面.
  • 添加一些胡言亂語外範本定義,使"formatcurrency" 要工作範本. (你可以告訴我有一個纖細的控制碼在 XSL).

第一次, 靠近頂部的 ItemStyle.xsl, 添加這條線:

  <!-- 一些胡言亂語,使我們能夠顯示美國. 貨幣. -->
  <xsl:十進位格式 名稱="工作人員" 數位="D" />

  <xsl:範本 名稱="預設值" 比賽="*" 模式="itemstyle">

注意直接之前將其添加 <xsl:範本名稱 ="預設" …> 定義.

下一次, 回到我們的網格範本. 用下面的代碼替換整個網格範本. 它是徹底的評論, 但不要猶豫給我發電子郵件或在我的博客留下評論,如果你有問題.

  <xsl:範本 名稱="網格" 比賽="行[@Style = 電網]" 模式="itemstyle">

    <!--
      ContentMain.xsl 通過 CurPos 和最後.
      我們用這些來有條件地發出打開和關閉 <表> 標籤.
    -->
    <xsl:param 名稱="CurPos" />
    <xsl:param 名稱="最後" />

    <!-- 以下變數都是從標準 ItemStyle.xsl 中未被修改 -->
    <xsl:變數 名稱="SafeImageUrl">
      <xsl:調用範本 名稱="OuterTemplate.GetSafeStaticUrl">
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' ImageUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="SafeLinkUrl">
      <xsl:調用範本 名稱="OuterTemplate.GetSafeLink">
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' LinkUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="DisplayTitle">
      <xsl:調用範本 名稱="OuterTemplate.GetTitle">
        <xsl:與參數 名稱="標題" 請選擇="@Title"/>
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' LinkUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="LinkTarget">
      <xsl:如果 測試="@OpenInNewWindow = true" >_blank</xsl:如果>
    </xsl:變數>

    <!--
      在這裡我們定義一個變數, ""tableStart.  這包含的 HTML,我們使用來定義表的列標籤開幕.  請注意,如果 CurPos = 1, 它包括 HTML 在 CDATA 標記.
      否則, 它將為空.

      TableStart 的值是一大,每次通過 ContentQueryMain.xsl 調用 ItemStyle 時.
    -->
    <xsl:變數 名稱="tableStart">
      <xsl:如果 測試="$CurPos = 1">
        <![CDATA[
        <表格邊框 = 1>
          <tr 背景色 ="藍色">
            <運輸署><字體顏色 ="白"><b>專案名稱</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>完成日期</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>預算</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>實際費用</b></字體></運輸署>
            <運輸署><字體顏色 ="白"><b>整體狀態</b></字體></運輸署>
          </tr>
        ]]>
      </xsl:如果>
    </xsl:變數>

    <!--
      另一個變數, tableEnd 只是定義關閉表標記.

      與 tableStart 一樣, 它始終是一大.  這就是為什麼它的值分配有條件地根據是否我們被路過的最後一行 ContentQueryMain.xsl.
    -->
    <xsl:變數 名稱="tableEnd">
      <xsl:如果 測試="$CurPos = $Last">
        <![CDATA[ </表> ]]>
      </xsl:如果>
    </xsl:變數>

    <!--
      總是發出 tableStart 的內容.  如果這不是通過 ContentQueryMain.xsl 傳遞給我們的第一行, 然後我們知道它的值將顯示為空白.

      禁用輸出轉義因為當 tableStart 不空白, 它包括我們要由瀏覽器呈現的實際 HTML.  如果我們不告訴 XSL 解析器來禁用輸出轉義, 它將生成之類"&這是;表&gt;" 而不是"<表>".
    -->
    <xsl:值的 請選擇="$tableStart" 禁用輸出轉義=""/>


    <tr>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <運輸署>
        <xsl:值的 請選擇="@Project_x005F_x0020_Name"/>
      </運輸署>

      <運輸署 對齊="權利">
        <xsl:值的 請選擇="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </運輸署>

      <運輸署 對齊="權利">
        <xsl:調用範本 名稱="formatcurrency">
          <xsl:與參數 名稱="價值" 
請選擇="@Project_x005F_x0020_Budget"></xsl:與參數> </xsl:調用範本> </運輸署> <運輸署 對齊="權利"> <xsl:調用範本 名稱="formatcurrency"> <xsl:與參數 名稱="價值" 請選擇="@Project_x005F_x0020_Expenses">
</xsl:與參數> </xsl:調用範本> </運輸署> <運輸署> <xsl:值的 請選擇="@Project_x005F_x0020_Status"/> </運輸署> <!-- 滿足以下所有條件被注釋掉,以澄清事情. 不過, 把它帶回來,塞進 <運輸署> 看看它的效果. --> <!-- <div id ="linkitem" 類 ="專案"> <xsl:如果測試 ="字串長度($SafeImageUrl) != 0"> <div 類 ="圖像-地區-左"> <href ="{$SafeLinkUrl}" 目標 ="{$LinkTarget}"> <img 類 ="圖像-固定寬度" src ="{$SafeImageUrl}"
alt ="{@ImageUrlAltText}"/> </一> </div> </xsl:如果> <div 類 ="連結"> <xsl:調用範本
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <href ="{$SafeLinkUrl}"
目標 ="{$LinkTarget}" 標題 ="{@LinkToolTip}"> <xsl:值的選擇 ="$DisplayTitle"/> </一> <div 類 ="說明"> <xsl:值的 select="@Description" /> </div> </div> </div>
--> </tr> <!-- 發出關閉表標記. 如果我們不是在最後一行, 這將顯示為空白. --> <xsl:值的 請選擇="$tableEnd" 禁用輸出轉義=""/> </xsl:範本> <xsl:範本 名稱="formatcurrency"> <xsl:param 名稱="價值" 請選擇="0" /> <xsl:值的 請選擇='數位格式($價值, "$DDD,DDD,DDD。DD", "工作人員")' /> </xsl:範本>

標準 WSS/MOSS 資料輸入螢幕不支援級聯下拉清單 (或其他內部-從通信)

更新 (04/2008): 這個很好的博客條目顯示良好的 javascript 的基礎方法解決此問題: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

更新二: (04/2008): 這篇博客以及前景看好: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

一周幾次, 如果不是每日,, 論壇使用者的描述通常會通過級聯下拉式功能表的要求. 舉個例子, 我有兩個下拉控制項:

  • 美國的清單. 國家
  • 美國的清單. 城市.

作為負責任的 UI 提供, 我們想要這樣操作:

  • 保羅選擇美國. 從下拉狀態.
  • 這將導致城市下拉篩選只有那些屬於所選國家的城市.
  • 保羅從這已篩選的清單中選擇一個城市.

沒有開箱支援此功能. 事實上, 沒有為任何一種直接的內部形式溝通的 OOB 支援. 這包括以程式設計方式隱藏/啟用/禁用欄位欄位更改表單上其他地方的回應.

這篇文章來描述可能的解決辦法和這些的真正目的是選項知他們:

  1. 開發自訂的列類型. 作為一個自訂列開發人員, 您可以完全控制"世界" 自訂該列的. 您可以實現級聯下拉那種方式.
  2. 請考慮使用工作流. 在某些情況下, 您想要自動將一個值分配給欄位基於另一個欄位的值. 在此情況下, 您通常會嘗試使用計算的列, 但有的時候, 它只是不會得到這份工作做. 設計器 SharePoint 工作流是下降到代碼和 visual studio 相對管理友好替代. 如果你走這條路, 意識到處理的問題 這篇文章 (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. 事件處理常式: 工作流一樣, 這是一個經過--事實上解決方案. 您的事件處理常式是.NET 程式集 (C#, VB.NET) 將控制傳遞到哪個 SharePoint. 你開發的物件有權訪問清單的資料 (和整個物件模型) 可以做任何所需的計算.
  4. 使用 SharePoint 設計器來創建表單自訂項. 我沒有用這種方法直接經驗, 但是我聽說他們最近在NewForm.aspx上做得很好
  5. 滾你自己 ASP.NET 資料輸入功能 (作為一個獨立的 web 頁或 web 部件) 而改用的.

如果有誰知道其他的、 更好的選項, 請發表評論,並會更新這篇文章的正文.

<結束 />

Technorati 標籤:

在 SharePoint 中創建橫條圖

概述:

(更新 12/04/07: 在連結到此位址通過一個非常有趣的 web 部件的另一個博客的末尾添加另一個有意思的資源)

此博客條目描述了如何在 SharePoint 中創建橫條圖. 這在 WSS 和苔蘚的環境中工作,因為它只取決於資料檢視 web 部件.

總體方法是,如下所示:

  1. 創建一個包含您想要的圖形的資料的清單或文件庫.
  2. 關聯的文件庫的地方 / 自訂清單拖到頁上並將其轉換為一個資料檢視 web 部件 (DVWP).
  3. 修改 DVWP 的 XSL 生成 HTML,它顯示的圖形.

業務應用場景 / 安裝程式:

我創建了一個自訂清單與標準的標題列和一個額外的列, "地位". 此模型 (很簡單) "授權費用" 其中標題表示專案和地位值的清單中的方案:

  • 建議
  • 在進程中
  • 停滯

目標是產生互動的水準橫條圖,顯示了這些狀態碼.

我有填充清單,它看起來像這樣:

圖像

創建資料檢視 Web 組件:

通過向頁中添加的自訂清單創建 DVWP (在我的案子的網站頁面) 按照說明進行操作 在這裡 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

除了簡單地創建 DVWP, 我們還需要設置分頁屬性,以顯示所有可用行. 對我來說, 這看起來像這樣的東西:

圖像

在這一點, 我始終關閉 SPD 和瀏覽器. 然後重新打開使用瀏覽器的頁. 這樣可以避免不小心弄在頁面上 web 部件佈局.

修改 XSLT:

現在是時候要修改 XSLT.

我總是使用 visual studio 為此. (請參閱 在這裡 為將説明你很多的智慧感知有關的重要說明).

創建一個空的專案添加四個新檔 (改為"原始" 以及"新" 在適當情況下):

  • Original.xslt
  • New.xslt
  • 原 Params.xml
  • 新 Params.xml

以我為例, 它看起來像這樣:

圖像

修改 web 部件和複製 params 和 XSL 到"原始" 在 Visual Studio 的版本.

在這裡的目標是導致的 XSL 轉換的結果,我們從回來的 DVWP 查詢到 HTML 呈現為一個圖.

為此目的, 它有助於首先考慮什麼 HTML 應該看起來像之前我們被稱為"XSL"瘋狂迷惑. (要弄清楚, 以下是只是一個例子; 不要鍵入或複製/粘貼到 visual studio 中. 我提供充分的打擊,後來在那寫-向上的切入點). 下面的示例圖呈現 HTML 後立即按:

示例條形圖

相應的 HTML:

<html>
<正文>
<中心>
<表寬度 = 80%>
<tr><運輸署><中心>水準橫條圖</運輸署></tr>
<tr>
<td 對齊 ="中心">
<表格邊框 ="1" 寬度 = 80%>
<tr>
<td 寬度 = 10%>打開</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 50%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
<tr>
<td 寬度 = 10%>關閉</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 25%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
<tr>
<td 寬度 = 10%>停滯</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 25%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
</表>
</運輸署>
</tr>
</表>
</正文>
</html>

我用一個死簡單的方法,對通過設置為"紅色"行的背景顏色創建我的酒吧.

這是這裡的外賣: 在結束, 我們做的所有創建 HTML 具有行和列.

XSLT 範本:

我已經複製的 XSLT 生成水準橫條圖. 它是相當好注釋掉,因此我不會加在你那多在這裡除了這些筆記:

  • 我開始用預設 SharePoint 設計師給了我,當我第一次創建 DVWP 的 XSL.
  • 我是能夠從 SPD 的砍這 657 行到 166 線條.
  • 我沒搞砸在附近使用參數的 XML 檔 (這是單獨從 XSL 和你就會知道你去修改 DVWP 本身是什麼意思; 有兩個檔,您可以修改). 不過, 為了簡化它, 我刪除幾乎所有人都從 XSL. 這意味著,如果您想要使用這些參數, 你只需要將其變數定義添加回 XSL. 這將是容易,因為你將有原始的 XSL 變數定義在您的 visual studio 專案.
  • 你應該能夠複製並粘貼這直接到您的 visual studio 專案. 然後, 我的電話中刪除和插入來電轉接到"ShowBar".
  • 通過創建工程,深化 <a href> 喜歡這個: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. 這種技術可能在其他上下文中的價值. 在第一次, 我以為我會需要符合更複雜的格式: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, 但在我的環境,這不是必要. 此清單中的 URL 通過 SharePoint 被傳遞給我們,所以這是很容易概括.

這裡是:

<xsl:樣式表 版本="1.0" 排除-結果-首碼="rs z o s ddwrt dt msxsl" 
xmlns:msxsl="金塔:架構-微軟-com:xslt" xmlns:xsl="http://www.w3.org/ 1999/XSL/變換"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="金塔:架構-微軟-com:辦公室" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:rs="金塔:架構-微軟-com:行集" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="金塔:frontpage:內部"
> <xsl:輸出 方法="html" 縮進="沒有" /> <xsl:十進位格式 ="" /> <xsl:param 名稱="ListUrlDir"></xsl:param> <!-- 我需要這個支援向下切入. --> <xsl:範本 比賽="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:變數 名稱="dvt_StyleName"></xsl:變數> <xsl:變數 名稱="" 請選擇="/dsQueryResponse/行/列" /> <xsl:變數 名稱="dvt_RowCount" 請選擇="計數($行)" /> <xsl:變數 名稱="空空如也" 請選擇="$dvt_RowCount = 0" /> <xsl:變數 名稱="dvt_IsEmpty" 請選擇="$dvt_RowCount = 0" /> <xsl:選擇> <xsl:當 測試="$dvt_IsEmpty"> 沒有資料關係圖!<br/> </xsl:當> <xsl:否則> <!-- 有趣的東西從這裡開始. 我們需要在關係圖中定義一對變數的每一行: 總專案數和合計百分比. --> <xsl:變數 名稱="totalProposed" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = '建議'])" /> <xsl:變數 名稱="percentProposed" 請選擇="$totalProposed $dvt_RowCount div" /> <xsl:變數 名稱="totalInProcess" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) '中' =])" /> <xsl:變數 名稱="percentInProcess" 請選擇="$totalInProcess $dvt_RowCount div" /> <xsl:變數 名稱="totalStalled" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = 停滯])" /> <xsl:變數 名稱="percentStalled" 請選擇="$totalStalled $dvt_RowCount div" /> <!-- 我們定義我們的 HTML 表在這裡. 我借用一些標準 SharePoint 樣式在這裡使它保持一致. 我認為它將榮譽對全球的 css 檔的更改,以及主題將重寫. --> < 寬度="100%" ="0" ="2" 樣式="右邊框: 1 固體 #C0C0C0; 下邊框: 1 固體 #C0C0C0; 邊框式左: 固體; 邊框左邊寬度: 1; 邊框式頂部: 固體; 邊框頂部寬度: 1;"> <tr> <運輸署 對齊="中心"> < 邊框="1" 寬度="100%"> <!-- 我們想要圖的每個狀態, 我們稱之為"ShowBar" 範本. 我們將它傳遞: 1. 行標籤. 這被轉化為超連結. 2. 百分比 (上面的變數). 3. 實際的欄位名稱的基礎清單中的代碼. 這不需要匹配顯示標籤. 4. 為匹配的欄位值 #3. 5. 此狀態碼的總計項 (不總計的所有狀態碼). 它會發出 <tr></tr> 和水準橫條圖線. 我們為我們想要查看每個狀態碼調用此範本. --> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="' 建議 '"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentProposed"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="' 建議 '"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalProposed"></xsl:與參數> </xsl:調用範本> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="停滯"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentStalled"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="停滯"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalStalled"></xsl:與參數> </xsl:調用範本> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="' 在過程'"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentInProcess"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="' 在過程'"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalInProcess"></xsl:與參數> </xsl:調用範本> </> </運輸署> </tr> </> </xsl:否則> </xsl:選擇> </xsl:範本> <!-- 此範本並在橫條圖中顯示單個行的工作. 你可能會做大部分的你在這裡調整. --> <xsl:範本 名稱="ShowBar"> <xsl:param 名稱="BarDisplayLabel" /> <!-- 要顯示標籤 --> <xsl:param 名稱="BarPercent"/> <!-- 合計百分比. --> <xsl:param 名稱="QueryFilterFieldName"/> <!-- 用於跳轉到查詢 & 篩選器 --> <xsl:param 名稱="QueryFilterFieldValue"/> <!-- 用於跳轉到查詢 & 篩選器 --> <xsl:param 名稱="TotalItems" /> <!-- 這個 barlabel 的總計數 --> <tr> <!-- 欄標籤本身. --> <運輸署 ="ms formbody" 寬度="30%"> <!-- 這下一組語句生成一個查詢字串,允許我們深入到基礎資料的篩選視圖. 我們做的幾件事情在這裡使用: 1. 我們可以將 FilterField1 和 FilterValue1 傳遞給要篩選的列的清單. 2. SharePoint 將關鍵的參數傳遞給我們, ListUrlDir 指出,對此 DVWP 為"正在運行"的基礎清單. 不是 XSL 好玩? --> <xsl:文本 禁用輸出轉義=""> <![CDATA[<href ="]]></xsl:文本> <xsl:值的 請選擇="$ListUrlDir"/> <xsl:文本 禁用輸出轉義=""><![CDATA[?FilterField1 =]]></xsl:文本> <xsl:值的 請選擇="$QueryFilterFieldName"/> <xsl:文本 禁用輸出轉義=""><![CDATA[&FilterValue1 =]]></xsl:文本> <xsl:值的 請選擇="$QueryFilterFieldValue"/> <xsl:文本 禁用輸出轉義=""><![CDATA[">]]></xsl:文本> <xsl:值的 請選擇="$BarDisplayLabel"/> <xsl:文本 禁用輸出轉義=""><![CDATA[</一>]]></xsl:文本> <!-- 下一位顯示一些數位的格式: "(總計 / % 總數的)" --> (<xsl:值的 請選擇="$TotalItems"/> / <!-- 這為我們創造一個很好的百分比標籤. 謝謝, 微軟! --> <xsl:調用範本 名稱="percentformat"> <xsl:與參數 名稱="%" 請選擇="$BarPercent"/> </xsl:調用範本>) </運輸署> <!-- 最後, 發出 <運輸署> 標籤為酒吧本身.--> <運輸署> < ="0" ="0" 邊框="0" 寬度="{一輪($BarPercent * 100)+1}%"> <tr 背景色="紅色"> <xsl:文本 禁用輸出轉義=""><![CDATA[&n b s p;]]></xsl:文本> </tr> </> </運輸署> </tr> </xsl:範本> <!-- 這是直接取自我在 MS 範本中找到一些 XSL. --> <xsl:範本 名稱="percentformat"> <xsl:param 名稱="%"/> <xsl:選擇> <xsl:當 測試="數位格式($%, '#,##0%;-#,##0%')= '南'">0%</xsl:當> <xsl:否則> <xsl:值的 請選擇="數位格式($%, '#,##0%;-#,##0%')" /> </xsl:否則> </xsl:選擇> </xsl:範本> </xsl:樣式表>

結果:

從上面的 XSL 生成此圖:

圖像

鑽取到的基礎資料通過點擊的狀態碼:

圖像

思想總結:

可這被普遍?

我愛這個圖形的概念, 但我討厭的事實是,我不得不進去,做這麼多的手動編碼. 我已經很少考慮到它是否可以被推廣也樂觀, 但我也有點害怕的時候,可能是某處的道路上不會提供任何變通的磚牆. 如果任何人有一些好的點子上這, 請在評論中記或 電子郵件通知我.

垂直圖:

這是一個水準橫條圖. 很有可能要創建一個垂直圖. 我們只需要更改 HTML. 我會開始以同樣的方式: 創建 HTML 表示形式的分隔號形圖,然後找出如何獲得,通過 XSL. 如果任何人有興趣, 我能說服試試,處理掉這些問題. 如果某人已經做了,, 請讓我知道,我很樂意鏈接到你的博客🙂

我認為一個垂直圖表的挑戰,是圖形的標籤更難管理, 但當然不是不可能.

欄位名稱地方:

有至少兩個事情要尋找與您的欄位名稱.

第一次, 帶有空格的欄位名稱已在 XSL 轉義. 這可能是一個問題在這裡:

        <xsl:變數 名稱="totalProposed" 
請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = '建議'])" />

如果您的狀態"" 列實際上是名為"狀態碼" 然後您需要引用它作為"Status_x0020_Code":

   <xsl:變數 名稱="totalProposed" 
請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status_x0020_Code) = '建議'])" />

第二次, 我對此有點模糊, 但你也必須要對欄位名稱更改的通知. 如果你的名字你的領域"狀態碼" 然後再上, 將它重命名為"AFE 狀態", "內部名稱" 不會更改. 內部名稱仍將"狀態碼" 並且必須引用作為"Status_x0020_Code". "其他資源" 連結可説明診斷和糾正這種問題.

那個顏色:

我選了"紅色" 因為它是我喜歡的那一刻. 它不會是一個大問題來顯示不同的顏色,以便提供號碼的不僅僅是視覺的描述, 但也提供一個有用的 KPI. 舉個例子, 如果所占的百分比"停頓" Afe 的 > 10% 然後顯示紅色, 否則顯示它在黑. 使用 <xsl:選擇> 要實現此目的.

其他資源:

快樂轉型!

<結束 />

訂閱我的博客!

本 OM 資料通過一個自訂清單 (或, 然而另一個 OM 資料 Displayor [像 YACC, 但不同])

今天, 我花了的幾個小時追蹤消息"您輸入的列名稱已在使用或保留背後的根本原因. 請選擇另一個名稱。"

可以創建這一欄, 刪除並重新創建另一個環境中, 所以我知道這不是一個保留的名稱. 不過, 我只是找不到列中任何地方通過任何網站上標準的 SharePoint 使用者介面網站集合中.

我過帳到 MSDN 論壇在這裡 和不屈不撓 安德魯 · 伍德沃德 我指出了方向的基礎物件模型資料.

我去 codeplex 找到一些工具,將説明我同行到 OM 的基礎資料和説明我找到麻煩.

嘗試了幾種工具,他們非常酷和有趣,但在結束, 使用者介面並不是適合我的目的. 我不批評他們以任何方式, 但顯然工具製造商不心中有我的問題,他們在創建它們的 UI 時 :). 大多數人似乎要投資大量的時間和精力創建工作站 / 用戶端應用程式提供樹狀檢視, 用滑鼠右鍵按一下內容功能表等等. 這些都是很好,所有, 但這是很多的工作,以創建頂級的使用者體驗,也是非常靈活.

我真的很需要這個問題的答案. 我想到,如果我能得到的所有網站列到一個自訂清單中的網站集合中, 我可以篩選, 排序和創建視圖,能幫我找到這個假想現有列 (它沒有, BTW). 我走在前面,後來,和一兩個小時, 我的網站中的所有列已都載入到與分組的自訂清單嗎, 排序,等等。. 五分鐘後答案.

如果我成功接管世界, 我想我會命令所有 SharePoint 工具供應商必須認真都考慮堆焊他們自訂清單中的物件模型資料. 這種方式, 我擁有的力量 若要搜索任何方式我想 (約束, 答案是肯定的, 由標準 sharepoint 功能).